当前位置:首页 > 交织器解交织器的设计说明文档
卷积交织器与解交织器的VHDL实现和FPGA实现
解交织器则与此相反,RAM写地址如下
图6. 解交织器写地址
生成上述的读写地址的实现框图如下所示
图7. 读写地址产生的逻辑框图
以上所述讲解了读写生成器的实现思路,可以说成功实现这个模块,
交织器就基本做完了。
下面再简单阐述一下RAM的实现过程,原本可以使用Quartus自带的RAM模块,但考虑到课程设计的学习性质,决定自己实现一个RAM。 从上述分析可知,我们需要2 个 2K * 16 的RAM模块,一个用于存储交织器输出的数据,一个用于存储解交织器的输出数据。实现的方法也很简单,构造一个2048 * 16 的二维数组,16位的地址通过conv_integer从std_logic_vector[15..0]转为integer,作为数组的下标,这样就把数据存入了数组对应的存储单元,实现了RAM的功能。
最后从全局的角度看下我们设计的整个交织\\解交织的系统,系统框图如下
- 4 -
卷积交织器与解交织器的VHDL实现和FPGA实现
图8. 交织\\解交织系统总体框图 3 设计仿真结果
通过”seq.vhd”、”w_r_addcreat.vhd”、”ram.vhd”、”decode_add_creat.vhd”这4个文件生成5个模块电路,在quartus中连接好后,再将图形文件转化成一个vhd文件”inter.vhd”,然后在ModelSim中进行仿真,仿真波形如下所示
图9. 交织器输出读、写地址
从仿真结果可以看到交织器写地址依次输出0、1、19、54、106、175、261、364、484、621、775、946、0、2、20、55......一直这样循环重复下去,而读地址则滞后一位(第0通道除外),与设计初衷一致。
- 5 -
卷积交织器与解交织器的VHDL实现和FPGA实现
图10. 0-1000顺序序列发生
上图为顺序序列的仿真结果,可以看到,seq_out输出从0数到1000反复循环,这样设置的目的是便宜观察解交织器的输出结果,可以推想到若输入的序列是随机的,解交织器也可以同样地还原出来。
图11. 解交织器输出读、写地址
从仿真结果可以看到解交织器写地址依次输出0、188、359、513、650、770、873、959、1028、1080、1115、1133、1、189....一直这样循环重复下去,而读地址则滞后一位,与设计初衷一致。
图12. 交织\\解交织数据输出(初始图)
图13. 交织\\解交织数据输出(解交织有数据输出)
从交织\\解交织输出数据波形图可以看出,在交织器RAM数据未填充完
- 6 -
卷积交织器与解交织器的VHDL实现和FPGA实现
成前,解交织出的数据都是随机的,然后在延时12 * (12-1)*17 =2244个时钟周期之后,解交织出正确的数据。仿真结果与设计初衷一致。 至此,设计和仿真都完成了。
4 课程设计总结
经过小组队长的组织协调和各成员积极配合,我们的课程设计在进行了3天的努力攻关之后,终于圆满地达到了所有技术指标。我们从不知交织器为何物到最终设计出来,期间遇到过无数的挑战和烦恼。
举个例子,在写vhd程序的时候,由于分不清variable和signal的区别,我在定义的时候都是随便用的,结果就是编译虽然通过了,但仿真时出现许多莫名其妙的时序错误,本来判断好一个信号将被赋值却不知为何要等到下个时钟才能做出判断,这个问题曾纠结了我们队半天之久。由于不知道问题出在哪,队长决定从头把VHDL的课本看一遍,在翻到讲述信号的章节时,一句话让队长我恍然大悟,”信号幅值有延迟,信号的赋值在进程结束后才生效”,我欣喜若狂,立马把程序重新写了一遍,顺利地解决了这个时序错乱的问题。
还有我在用Quartus编译时发现他对RAM的编译速度实在太慢,在查询相关资料后发现Quartus的编译过程中还要对程序进行综合,生成各种门电路,RAM由于写得较大,门电路很多,编译效率自然很低。由于我们现在只处于仿真的初级过程,于是决定更换ModelSim进行编译,果不其然,速度快了很多。后期我们又联合地使用两个工具,利用Quartus的强大自动生成vhd文件,画图等,利用ModelSim强大的仿真能力进行功能仿真,很好地运用了Altera公司的两大利器。
像这样的遇到问题-->解决问题的过程还有很多,但不管怎样,我们终于克服了重重困难障碍,完美实现了交织\\解交织器的功能,对数字系统设计的流程有了进一步的了解。
通过这一次VHDL课程设计,我们提高了查阅资料、小组合作分工、共同排艰克难的能力,将课上所学知识运用到了实际,可谓收获良多。 最后感谢姜老师和实验课师兄的指导帮助,感谢你们的辛勤付出,希望我们小组的课程设计可以得到你们的认可,谢谢。
- 7 -
共分享92篇相关文档