LDPC译码器的FPGA实现
概述 |
本文将介绍LDPC译码器的FPGA实现,译码器设计对应CCSDS131x1o1s文档中提到的适用于深空通信任务的LDPC编码。本文档将简述Verilog代码的基本结构和信号说明。 |
简介 |
本文中FPGA实现特指通过Verilog HDL实现LDPC译码器功能,然而对于VHDL来说也似类似的的。Verilog HDL不像MATLAB代码那样有很强的通用性,或者说我暂时编不出通用性太好的代码。因此,这里的FPGA实现仅针对CCSDS文档(06版)中1024信息位1/2码率的适用于深空通信LDPC码,采用最小和算法下的实现。由于在截位补零下最小和算法性能奇差,因此此处不做补零处理,即码率实际为0.4。 LDPC相关文档包括《程序说明:LDPC编码(CCSDS)算法概述》、《程序说明:LDPC译码算法概述》、《学习笔记:LDPC编译码基本原理》以及《CCSDS_LDPC_V1》(代码),同时与本文档同名的学习笔记将阐述编程过程和思路,均可作为本文档的参考。 译码器的输入输出至少应该包括以下信号 input clk; //时钟 input rst; //复位信号,高有效 input decode_start; //开始译码信号,持续高电平一个clock有效 output output_ready; //开始输出 output frame_error; //输出结果不满足校验矩阵 output data_out; //输出译码后数据 output busy; //译码模块正在译码,此时不响应decode_start信号 对应应该有如下的状态 parameter IDLE = 5'b00001; //空闲状态,等待译码 parameter VML_INIT = 5'b00010; //初始化变量节点取值 parameter UML_UPDATE = 5'b00100; //更新校验节点,同时计算校验方程 parameter VML_UPDATE = 5'b01000; //更新变量节点 parameter DECODER_END = 5'b10000; //输出译码结果 下文将具体叙述程序结构和信号说明。 |
程序结构 |
图 1 程序结构图 顶层模块为decoder_top,以下具体阐述各个模块和改进思路 图 2 状态机 这是decoder_top内唯一有意义的代码,输出5个状态,输入包括 decode_start vmlram_addra hrowram_addra frame_error MAX_ITER_NUM 这是状态机跳转的所有条件,第2、3个是可选择的,可以考虑替换掉,但这两个是很很方便的。 图 3 信道信息控制模块 通过state和umlram_addrb控制尝试inputram_addra对应输出不同的信息。输入umlram_addrb是必须的,因为需要控制在uml2vml中信道信息的输出。 显然这两个模块可以合成一个,不应该直接将InputRam放在decoder_top之下。 图 4 Vml寄存器写控制 vmlram写控制需要即控制vmlram_wea,dina,addra三路信号。针对不同阶段,vml的输入是不一样的,该模块起到了一个输入选择作用对inputram_douta,vmlram_updae_dina,decoded_data_check三个信号进行处理,同时根据state不同产生写入地址。模块设计较为合理。 图 5 vml2uml模块 这个模块还包括了hrowram、vml2uml_caculate和check_data三个部分。模块完成了decoded_data的校验和vmlram_doutb到变量节点的更新。输出的hrowram_addra作为了state和uml地址生成的控制(挺方便,是否合适,有无更好选择?),hrowram_douta用于生成uml的写地址。 图 6 umlram_write_control模块 umlram_write_control模块控制产生uml写地址,为什么没有写数据,因为vml2uml模块的输出直接连接到ram上面去了。写地址和使能通过hrowram_addra和hrowram_douta控制产生。 图 7 uml2vml模块 变量节点更新模块技术按vml更新值即vmlram_update_dina和decoded_data_check. |
信号说明 |
Decoder_top顶层控制模块 表格 1 decoder_top模块信号说明
Inputram_control:根据输入产生inputram的地址控制 表格 2 inputram_control控制模块信号说明
Vmlram_write_control: vml寄存器写控制,通过输入inputram_douta, vmlram_update_dina等信息自动判断输出写地址、写使能和数据。 表格 3 vmlram_write_control模块的信号说明
Vml2uml: 接收vml读出的数据,处理后写入uml中。同时完成校验伴随式的计算 Vml2uml包含了以下几个模块:
Vml2uml_calculate.v 校验节点更新的计算部分内容
check_data.v 计算是否满足校验方程
Umlram_write_control.v: uml寄存器写控制
Uml2vml.v: 校验节点到变量节点更新,同时生成译码后结果
|
改进 |
模块划分是否合理? 功能实现是否足够合适? 存储器设计显然不够合理,都是8bit。 参考他人毕业论文的模块化方法。 了解并行、部分并行的方法 完成输入输出部分模块的设计。 完成整个硬件仿真平台的思路构想。 |
LDPC译码器的FPGA实现相关推荐
- DVB-S2系统中LDPC译码器的实现 LDPC编码器的实现 FPGA DVB-S2、DVB-S2X LDPC 编码IP、LDPC译码 IP
DVB S2 LDPC 译码器.IP core IP Core特点: 1.全部代码由FPGA代码实现: 2.支持DVB-S2.DVB-S2X全部格式: 3.支持编码.译码: 4.支持标标准中16200 ...
- turbo译码器 matlab,短帧Turbo译码器的FPGA实现
Turbo码虽然具有优异的译码性能,但是由于其译码复杂度高,译码延时大等问题,严重制约了Turbo码在高速通信系统中的应用.因此,如何设计一个简单有效的译码器是目前Turbo码实用化研究的重点.本文主 ...
- FPGA DVB-S2 FEC 信道译码 BCH译码器 LDPC译码器 解交织器 IP core
完全自主知识产权,全部代码自研.可多种形式授权. 基于FPGA的DVB-S2接收机IP core,含BCH译码IP.LDPC译码IP.解交织IP. (1)支持DVB-S2标准中BCH码全部编码样式: ...
- 最形象的卷积神经网络详解:从算法思想到编程实现(转载)
mark一下,感谢作者分享! 原标题:最形象的卷积神经网络详解:从算法思想到编程实现 1 新智元推荐 查看全文 http://www.taodudu.cc/news/show-4611564.html ...
- bch verilog代码_基于FPGA的多进制BCH编码
标签:编码(180)RS(99) 摘要:RS(Reed-Solomon)编码是一种具有较强纠错能力的多进制BCH编码,其既可纠正随机错误,又可纠正突发错误.RS编译码器广泛应用于通信和存储系统,为解决 ...
- LDPC码的EXIT图
LDPC码简介 LDPC码是一种线性分组码,具有硬件可实现的译码器,并在很多数据传输和数据存储上都表现出逼近信道容量的性能. LDPC码用校验矩阵或Tanner图表示. LDPC码的Tanner 图类 ...
- FPGA 信道编码 信道译码IP
1.卷积编码.Viterbi译码 支持常见系统码及部分非系统码 2.LDPC码编码.LDPC译码器 支持常见LDPC编译码 支持DVB-S2.DVB-S2X全部码型 支持ACM模式 3.RS码编码.R ...
- 动手写一个简单版的谷歌TPU
https://www.toutiao.com/a6701092937394029064/ 谷歌TPU是一个设计良好的矩阵计算加速单元,可以很好的加速神经网络的计算.本系列文章将利用公开的TPU V1 ...
- matlab MinGW-w64 C/C++ Compiler 的配置(附百度云下载资源)
转载自:https://blog.csdn.net/weixin_43710112/article/details/105797054 matlab MinGW-w64 C/C++ Compiler ...
最新文章
- ML之nyoka:基于nyoka库利用LGBMClassifier模型实现对iris数据集训练、保存为pmml模型并重新载入pmml模型进而实现推理
- tcp/ip 协议的传输过程
- php100网站怎么了
- mysql毫秒丢失_MySQL JDBC 更新数据丢失毫秒精度
- mysql hsqldb_HSQLDB的使用方法
- 使用Aria2+AriaNG+FileManager来进行离线BT下载及在线播放
- 转载:破解DR.COM实现共享上网方法大搜罗(抱歉,直接转载
- java求三角形周长 面积_计算三角形的周长和面积 java
- 使用vuepress搭建一个完全免费的个人博客网站
- 介质服务器作用,爱数之介质服务器及介质同步技术
- 贷中存量客户的价值挖掘与分类实现,试试这一重要的场景模型
- 0x000000ED蓝屏完美解决方案
- ChatGPT火了,对话式人工智能还能干嘛?
- 有苦有乐的算法 --- 一个无序数组,如果从小到大排好序,任何一个元素任何一个元素移动索引长度不超过k,实现排序
- Python真牛逼,获取压缩文件密码,我只要一分钟!
- Centos7 安装向日葵
- 【Access2007】Access2007的打开方式
- WeCube开源监控插件Open-monitor介绍
- 写了一个开机启动,监听通话的demo
- 利用DRP动态调整MMCME2时钟频率
热门文章
- java.io.IOException: No such file or directory之linux权限问题
- MCU与MPU的区别
- 中美AI争高下的秘诀!一文看尽中国AI计算力发展
- 百度SEO站群素材资源解析平台系统源码V8.0
- 【算法类】【预处理】利用skit-learn分割训练集测试集
- 联想计算机电源维修,联想电脑主机FSP145-51N1型电源工作原理
- C++friend用法简单总结
- webrtc在服务器端通信协议,一种基于WebRTC通信的Web协议WebTorrent
- 移植shellinabox到ARM嵌入式开发板
- 计算广告发展历程:从CPC到oCPX