武汉理工大学毕业设计(论文)
最终发送正确的错误报告。
4.2.2 解码控制
影响解码逻辑复杂度的不仅有检错逻辑,还有初始CRD(参阅2.2.2)和D/K#标志值的确定。这就决定了解码控制逻辑必然要比编码控制逻辑使用更多的时钟周期。不过,这是不影响整体性能的。因为就算是在实际的PCI Express物理层编码中,这部分是属于并行字符的处理流程,而串并转换逻辑是将串行数据流转换为10位的并行数据。这样,在这部分我们无论怎样都有10个时钟周期的时序资源可以利用。所以,只要状态机最大的转换路径不超过10个状态,那么就可以任意分配逻辑,这也体现出了状态机的优越之处。这里,我将解码过程分为7个步骤。下面介绍具体的实现过程:
1) 确定输入的第一个10B字符的符号(正或负)。如果为中性,那么丢弃这个字符,继续检验下一个10B字符,直到检验出正或负为止。这时,所需的CRD状态与这个10B字符的符号相反(参阅2.1.1);
2) 将输入的10B字符拆分成6比特部分(高6位)和4比特部分(低4位),根据输入的10B字符确定D/K#标志(参阅2.2.1);
3) 根据第一步所确定的CRD状态值、第二步所确定的D/K#标志值和6比特部分,通过6比特转5比特的查找表(D表或K表)来确定8B字符的5比特部分、计算下一步所需的CRD状态值,顺便得到一个6比特部分的错误状态变量。
4) 将第三步检测到的错误状态变量赋值给状态机内部变量,以便后期处理调用。 5) 根据第三步所确定的CRD状态值、第二步所确定的D/K#标志值和4比特部分,通过4比特转3比特的查找表(D表或K表)来确定8B字符的3比特部分、计算解下一个10B码所需的CRD状态值,顺便得到一个4比特部分的错误状态变量。
6) 将第五步检测到的错误状态变量赋值给状态机内部变量,以便后期处理调用。 7) 将第三步和第五步得到的5比特部分(低5位)和3比特部分(高3位)组合成最终需要输出的10B字符;输出D/K#值和错误报告。
13展示了解码部分的状态机视图,也是由ModelsimSE生成的。从这张图中可以很清晰的看到各个状态的触发条件和转换路径。每一个状态都对应相应的步骤。将图13和图11进行对比,我们就可以体会到相对编码逻辑,解码逻辑有多复杂了。和图7相比,我们可以看到,同样是解码控制逻辑的状态机,图13无论是在视图的布局还是所包含的信息量上都优于图7。由此,我们也可以感受到ModelsimSE这款仿真软件的强大所在。
24
武汉理工大学毕业设计(论文)
图13 解码逻辑状态机视图
25
武汉理工大学毕业设计(论文)
5 逻辑综合及仿真实现
5.1 逻辑综合
逻辑综合提供了硬件代码和网表之间的链接。综合就是根据芯片制造商提供的基本电路单元库,将硬件语言描述的RTL级电路转换为电路网表的过程。这是一个迭带过程:首先,需要给设计中的各个模块设置一定的约束条件,这些约束条件定义了综合的目标。如时间约束,定义了模块的每个信号相对于时钟信号的关系。除时间约束之外还需定义综合的环境,如综合使用的FPGA芯片型号(实际上就是定义工艺库)等信息。然后综合工具根据RTL代码和制定的约束条件进行综合,最后产生满足约束条件的RTL级网表[16]。图14就是本次设计编码系统的逻辑综合所得的RTL级网表,这是由QuartusII生成的。
图14 编码系统RTL级网表
整个过程一般分为两步:
26
武汉理工大学毕业设计(论文)
1) 编译:RTL描述的通用转换,也就是说将硬件语言描述的电路转化为与工艺不相关并且尚未优化的电路。
2) 优化:让通用的网表使用面向对象的工艺进行门级映射。结果必须符合器件面积和速度的需要。
最终,QuartusII将这个网表转换成逻辑单元之间的关系,导入到FPGA中实现最后功能。从图12中我们虽然可以看到四个查找表,但是实际上并不是HDL查找表中的所有逻辑都需要转化为RTL级网表。如图15是由QuartusII综合后得到的解码系统逻辑资源占用量的统计表。
a
b
图15 逻辑资源占用量统计表
图a是只对解码系统中的查找表模块“lut_6b5b_ctrl”进行综合后的逻辑资源占用结果。我们可以看到,它只占用了26逻辑单元(Logic Cells)中的查找表资源(LUT-Only LCs)。图b是对整个解码系统进行综合的逻辑资源占用结果。我们可以清楚的看到“lut_6b5b_ctrl”模块的逻辑单元占用量变成24。这就是由于在逻辑综合过程中,部分查找表中的逻辑被优化掉了,转而利用一些逻辑门,通过和其他查找表共用部分逻辑资源来完成综合。这样就节省了器件的逻辑资源,而且在时序上也可能满足更好的要求
[17]
。通过图a和图b,我们
也可以看到,所有的查找表模块都只占用了逻辑单元中的查找表资源,并未占用其他资源(图a中管脚(Pins)资源占用是为统计之便,将“lut_6b5b_ctrl”模块设置为顶层模块所造成的。实际上,在整个系统中,它并不占用管脚资源,这可以参阅图b)。由此我们也可以看出QuartusII这款软件综合的精准性。
5.2仿真
仿真过程是正确实现设计的关键环节,用来验证设计者的设计思想是否正确;在设计实现过程中各种分布参数引入后,其设计功能是否依然正确无误。仿真主要分为功能仿真和时序仿真。功能仿真是在设计输入后进行;时序仿真是在逻辑综合后或布局布线后进行。
27
武汉理工大学毕业设计(论文)
仿真所使用的数据见附录D。下面我们先从仿真软件开始介绍。
5.2.1 ModelsimSE简介
Mentor公司的Modelsim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。以下是Modelsim的一些主要特点:
(a) RTL和门级优化,本地编译结构,编译仿真速度快,跨平台跨版本仿真; (b) 单内核VHDL和Verilog混合仿真; (c)源代码模版和助手,项目管理;
(d) 集成了性能分析、波形比较、代码覆盖、数据流ChaseX、虚拟对象Virtual Object、Memory窗口、Assertion窗口、源码窗口显示信号值、信号条件断点等众多调试功能;
(e) C和Tcl/Tk接口,C调试;
(f) 对SystemC的直接支持,和HDL任意混合; (g) 支持SystemVerilog的设计功能;
(h) 对系统级描述语言的最全面支持SystemVerilog,、SystemC、PSL;
Modelsim分几种不同的版本:SE、PE、LE和OEM,其中SE是最高级的版本。而集成在 Actel、Atmel、Altera、Xilinx以及Lattice等FPGA厂商设计工具中的均是其OEM版本。SE版和OEM版在功能和性能方面有较大差别,比如对于大家都关心的仿真速度问题,以Xilinx公司提供的OEM版本ModelsimXE为例,对于代码少于40000行的设计,ModelsimSE 比ModelsimXE要快10倍;对于代码超过40000行的设计,ModelSimSE要比ModelSimXE快近40倍
[18]
。所以,现在ModelsimSE几乎成了Modelsim的代名词。
5.2.2功能仿真
功能仿真是指在一个设计中,在设计实现前,对所创建的逻辑进行的验证功能是否正确的过程。布局布线以前的仿真操作都称作功能仿真,它包括综合前仿真和综合后仿真。综合前仿真主要针对基于原理框图的设计;综合后仿真即适合原理图设计,也适合基于HDL语言的设计
[19]
。实际上,在实际的逻辑设计中是没有必要做综合后仿真的,所以我
们在这里只做综合前的功能仿真。图16就是编码部分5B/6B数据字符查找表模块“lut_5b6b_data”的ModelsimSE功能仿真波形图。其Test bench代码见附录D(以下所有模块的Test bench代码都在附录D里,下面就不在强调了)。
28
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PCIE接口8B10B编、解码的实现(7)在线全文阅读。
相关推荐: