后的图形如图5所示:
图 5缓存电路
3.3.4 并串转换模块的设计
本模块主要是实现并行数据输入转换为串行数据输出,输入的为6位的并行的数据,输出为6位串行的数据,通过Quartus封装后的图形如图6所示:
图 6并串转换模块
3.3.5 系统的顶层设计
完整电路模块采用自顶向下的设计方法,在顶层模块中调用各个子模块来完成系统控制功能。具体顶层设计电路如下:
图 7完整电路顶层图
13
3.4 系统各个模块的仿真
3.4.1分频器的仿真
通过前面的设计,设置好相应的输入和输出后六分频器的仿真波形如图8所示:
图 8分频器的仿真
图中clk为系统时钟输入,clk6为6分频后的时钟输出,通过对比可以看出,仿真波形是正确的。 3.4.2 串并转换模块的仿真
通过前面的设计,设置好相应的输入和输出后串并转换模块的仿真波形如图9所示:
图 9串并转换模块的仿真
图中clk为系统时钟输入,shift_in为串行的5B码组输入,A为并行的5B码组输出,这里我们选用任意的一个码组10110,从仿真结果中可以看出,在第五个时钟周期结束后并行输出的码组为10110,验证了仿真的正确性。 3.4.3 存储器模块的仿真
通过前面的设计,设置好相应的输入和输出后存储器模块的仿真波形如图
14
10所示:
图 10缓存电路的仿真
图中clk为系统时钟输入;F为模式选择位,0表示选择模式1,1表示选择模式2,;Y为并行的5B码组输入,Q为并行的6B码组输出。通过对比Y和Q的码组可以发现,当输入00000时输出000111,当输入00001时输出011100,当输入00010时输出110001,当输入00011时输出110001??,只不过延迟了一个时钟周期。与5B6B编码表中进行对比可以证明仿真结果是正确的。 3.4.4 并串转换模块的仿真
通过前面的设计,设置好相应的输入和输出后并串转换模块的仿真波形如图11所示:
图 11并串转换模块的仿真
图中clk0表示系统时钟6分频后的时钟输入,clk1为系统时钟输入,Q为并行的6B码组输入,shift_out为串行的6B码组输入,这里我们选用任意一个码组100100测试,shift_out在一个clk0周期后输出的串行码为100100,说明了仿真是正确的。
15
3.4.5 完整电路仿真
根据顶层模块的设计,仿真结果如图12所示:
图 12完整电路仿真波形
图中clk为系统时钟输入,clk6为6分频器分频后的输出,M为模式选择位,A为并行5B码组输入,Q为并行6B码组输出,shift_in为串行的5B码组输出,shift_out为串行的6B码组输出,这里选用任意一个码组01011作为串行码组输入,可以看到在一个clk6周期后串行输出的6B码组为100111,通过编码表对比可以知道,设计与仿真都是正确的,故整个系统完全实现了所要求的功能。
16
第四章 总结
本文简单介绍了一种方法实现5B6B的编码,并使用VHDL硬件语言实现了5B6B编码数字化设计,完成了编码器最基本的功能,在这个基础上,未来的目标就是降低监测同步信号误码率,使这个设计更加完美。
第一次采用FPGA来对5B6B编码,所有的Verilog编程中,所有的设计QUARTUS2功能仿真和时序验证已经通过仿真。
毕业设计选择这一个题目是因为有同学在课程设计中曾做这个题目,可以相互探讨。开始可以选择Matlab或者 VHDL语言来进行设计,我们选择了用VHDL来做,使用自上而下的硬件描述语言的设计方法来实现。
17