武汉理工大学毕业设计(论文)
处理模块,它频率的提高是以牺牲面积为代价的 T
e1 d1 c1 b1 a1 [13]
,其示意图如图8所示。
Step1 a2 Step2 Step3 Step4 Step1 b2 Step2 a3 Step3 Step4 Step1 c2 Step2 b3 Step3 a4 Step4 Step1 d2 Step2 c3 Step3 b4 Step4 a5 Step1 e2 Step2 d3 Step3 c4 Step4 b5
图8 流水线时序图
其实,本次设计初期采用的就是流水线的方案,但是随着对设计原理理解的深入,才发现本次设计的系统存在CRD状态值的反馈,所以放弃了流水线方案,最终改用状态机方案。
3.2.4 串并转换
串并转换是FPGA设计的一个重要思想,它是数据流处理的常用手段以及面积与速度互换思想的直接体现。总的来说,将串行转换为并行,通过复制逻辑,同时处理多位数据,提高整个设计的数据吞吐率,其本质是通过面积的消耗提高系统工作速率。而将并行转换为串行,一般为了节约资源,(不过在通信中应用有的是为了考虑数据稳定性,因为并行方式的数据如果传输路径较远时很难对齐)因为设计速度有足够的余量,所以可以通过速度优势换取面积的节省[14]。
本次的设计中虽然没有牵扯到串并转换,但是实际上,8B/10B编、解码的主要目的就是为了方便并行数据的串行传输,所以这个也是很重要的内容。
3.2.5 乒乓操作
“乒乓操作”是一个常应用于数据流控制的处理技巧,其处理流程如图9所示:输入
19
武汉理工大学毕业设计(论文)
数据流通过“输入数据流选择单元”,等时地将数据流分配到两个数据缓冲模块。数据缓冲模块可以是任何存储模块,比较常用的存储单元为双RAM(DPRAM)、单口RAM(SPRAM)和FIFO等。在第一个缓冲周期,将输入的数据流缓存到“数据缓冲模块1”。在第2个缓冲周期,通过“输入数据流选择单元”的切换,将输入的数据流缓存到“数据缓冲模块2”,与此同时,将“数据缓冲块1”缓存的第1个周期的数据通过“输出数据流选择单元”的选择,送到“数据流运算处理模块”被运算处理。在第3个缓冲周期,通过“输入数据流选择单元”的再次切换,将输入的数据流缓存到“数据缓冲模块1”,与此同时,将“数据缓冲模块2”缓存的第2个周期的数据通过“输出数据流选择单元”的切换,送到“数据流运算处理模块”被运算处理。如此循环,周而复始。其最大的特点是通过“输入数据流选择单元”和“输出数据流选择单元”按节拍、相互配合的切换,将经过缓冲的数据流没有时间停顿地送到“数据流运算处理模块”,被运算与处理。操作非常适合对数据流进行流水线式处理。乒乓操作的第二大优点是可以节约缓冲区空间。通过巧妙地运用乒乓操作,可以达到用低速模块处理高速数据流的效果,是面积与速度互换原则的一个很好体现[15]。
输入数据流选择单元 MUX 2选1 数据选择单元2 数据选择单元1 输出数据流选择单元 MUX 数据流运算处理模块 2选1 图9乒乓操作流程图
20
武汉理工大学毕业设计(论文)
4 系统设计
实际上,本次设计最终的结果并非一个单独的系统,因为编码逻辑和解码逻辑本来就是属于PCI Express物理层的两个不同接口。所以,本次设计结果是两个(编码和解码)独立的逻辑系统。
4.1 编码系统设计
编码逻辑系统就是一个基于查找表的逻辑块,它主要由五部分组成:四个查找表模块和一个编码控制模块。编码部分系统结构如图10所示。
编码控制模块 数据字符的8B 字符 5B/6B查找表模块 数据字符的3B/4B查找表模块 10B字符 控制字符的5B/6B查找表D/K# 模块 控制字符的3B/4B查找表模块
图10 编码系统结构图
4.1.1 查找表
在计算机科学中,查找表是用简单的查询操作替换运行时计算的数组或者联合阵列这样的数据结构。由于从内存中提取数值经常要不复杂的计算速度快很多,所以这样可以得到显著的速度提升。
在此次设计的编码逻辑中,虽然没有牵扯到复杂的计算问题,但是字符的转换以及CRD状态值的计算依然是以查找图10中嵌入编码控制模块的四个表模块为基础的,所以这里依然将它们称为查找表。这四个查找表模块就是根据附录A的四张表正向(输入位数较小的字节,输出位数较大的字节)编写的。
21
武汉理工大学毕业设计(论文)
4.1.2 编码控制
由于查找表模块的输入为系统内部的值,它一定是正确的,所以不牵扯到其他问题,其编码难度很小,所以编码系统逻辑的编写主要集中在编码控制这一块。编码控制模块主要负责编码的过程控制,如图10所示,当中嵌入了上面所介绍的四个查找表模块。这部分代码的编写主要是基于状态机各个状态的分工的。这种分工是以编码模块的表查找过程和CRD状态值的计算为依据的。图11即为编码控制模块的状态机视图,这是由ModelsimSE生成的。
图11 编码逻辑状态机视图
如图11所示我将编码逻辑分为5个步骤:
1) 将输入的8B字符拆分成3比特部分(高3位)和5比特部分(低5位); 2) 根据初始CRD状态值、输入D/K#状态和5比特部分,通过5B/6B查找表(D表或K表)查找应该输出的6比特部分。
3) 根据这个6比特部分计算应该输出的CRD状态值,以供下一步的3B/4B查找使用; 4) 根据第二步输出的CRD状态值、输入D/K#状态和3比特部分,通过3B/4B查找表(D表或K表)查找应该输出的4比特部分,而后根据这个4比特部分计算应该输出的
22
武汉理工大学毕业设计(论文)
CRD状态值,以供下一个8B字符的编码;
5) 将第二步和第三步得到的6比特部分(高6位)和4比特部分(低4位)组合成最终需要输出的10B字符。
这个状态机需要5个时钟周期完成全部过程。在图11中可以很清晰的看到各个状态的触发条件和转换路径,每个状态都和以上的步骤有所对应。
4.2 解码系统设计
实际上,解码系统才是这次设计的重点。解码系统的逻辑构架和编码系统一样,也是一个控制模块中嵌入四个查找表,但是相对编码系统,解码系统无论是查找表还是控制模块,其逻辑代码的编写都要复杂很多,这种复杂体现在很多方面。图12即为解码逻辑的结构图。
解码控制模块 数据字符的6B/5B查找表模10B字符 控制字符的6B/5B查找表模块 控制字符的4B/3B查找表模块 8B字符 块 数据字符的4B/3B查找表模块 D/K# 错误报告
图12 解码系统结构图
下面就重点针对这些方面介绍解码逻辑的设计。
4.2.1 查找表
查找表的定义已经在4.1.1节中有所介绍,这里就不再赘述了。
从概念理解,解码逻辑的查找表编写就是编码的逆过程,也就是根据附录A的四张表反向(输入位数较大的字节,输出位数较小的字节)编码。但是,解码逻辑必须考虑检错,那么就需要一个用来标志错误状态的输出变量来标志出现错误的情况。这里是这样定义这个变量的:只要输入的4比特(或6比特)字符无法在查找表中查找到,那么,这个变量就为“1”,否则为“0”。这样,解码控制模块就可以根据这个输出变量来控制解码的过程,
23
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PCIE接口8B10B编、解码的实现(6)在线全文阅读。
相关推荐: