武汉理工大学毕业设计(论文)
如图5所示,每条接收通道都有一个8B/10B解码器,有弹性缓冲区向其中送入数据。该8B/10B解码器使用两个查找表(D表和K表),将10B符号流解码成8B的数据(D)或控制(K)字符。从附录B中可以看出,任何一个控制字符中都含有数据字符所不包含的元素(6比特部分或4比特部分),所以这个过程很容易完成,最终还要生成一个D/K#信号。D/K#信号的状态表明了所接收的符号:
(a) 如果在D表中发现与已接收的符号相匹配,则为数据字符,D/K#信号被驱动为高电平;
(b) 如果在K表中发现与已接收的符号相匹配,则为控制字符,D/K#信号被驱动为低电平。
2.2.2 不一致状态计算
解码器根据所接收到的首个符号的不一致性来初始化不一致状态值。首个符号之后,一旦在解码器中初始化了不一致状态,解码器就开始为每个接收到的后续符号计算不一致状态值,以便为其标记“+”或“-”,除非接收的符号具有中性不一致性,在这种情况下不一致状态值保持不变。
这样首个符号就非常重要,必须通过首个符号判断出不一致状态值(正或负)。如果首个符号的不一致性为中性,那么丢弃这个符号,继续判断下一个符号的状态,直到判断出的不一致状态为“+”或“-”为止。
2.2.3 错误检测
8B/10B解码器的错误检测逻辑负责检测接收符号流中的各种错误。应该注意的是,该逻辑不会捕获所有可能的传输错误。规范要求将这些错误作为接收器错误检测报告并报告给数据链路层。下面分别介绍可以检测到的两类错误:
1) 代码违规错误。有以下几种情况:
(a) 任何6比特的字部分包含多于4个“1”或4个“0”; (b) 任何4比特的字部分包含多于3个“1”或3个“0”; (c) 任何10B符号包含多于6个“1”或6个“0”;
(d) 任何10B符号包含多于5个连续的“1”或5个连续的“0”; (e) 任何无法解码为8B字符的10B符号都属于该错误。
2) 不一致状态错误。编码到10B符号中的字符(具有非中性的不一致状态值)在被编码到10B符号中时会带有与CRD相反的极性。如果下一个符号不具备中性不一致性,并且它的不一致状态值与CRD相同,则检测到不一致状态错误。
在处理后续符号之前可能无法检测某些不一致状态错误。如果符号中的两个比特应为错误而翻转了,可能不会检测到该错误,那么该符号可能被解码为有效的8B字符。该错
14
武汉理工大学毕业设计(论文)
误在物理层无法检测。
实际上,在硬件语言的编码过程中可以发现并不需要外加错误检测模块。因为整个系统都是基于查找表设计的,所以在查找表以外的符号都可以被视为错误。这样,不仅节省了大量的资源,还有利于错误报告和代码的同步传输
[10]
。
15
武汉理工大学毕业设计(论文)
3 FPGA单元结构及系统设计思想
3.1 FPGA单元结构
FPGA结构的基础是逻辑单元。可以这样理解,如果FPGA是一个有机体,那么逻辑单元就是构成这个有机体的细胞。整个FPGA的功能就是由这些可编程逻辑单元完成不同的功能,通过不同的组合而实现的。因为这次设计是基于Altera公司的Cyclone系列FPGA芯片EP1C6Q240C8,所以这里我们以Cyclone系列芯片为主来介绍FPGA的内部结构。图6就是Cyclone系列FPGA芯片的逻辑单元结构图。
图6 Cyclone系列FPGA逻辑单元结构图
这个结构中,最重要的两个部分就是查找表(LUT)和可编程寄存器。
在FPGA芯片内部,查找表实际上就是一个四输入的RAM,它可以将表查找的信息记录在里面,根据不同的输入,进行输出。由于这种结构不存在门传输延时问题,所以可以使FPGA运行速度得到很大的提升。查找表在实际应用中的定义我们将在4.1.1节中有所介绍。
寄存器,应该说是FPGA的核心部件。所有时序逻辑的实现都需要它来完成。它实际
16
武汉理工大学毕业设计(论文)
上就是说一个D触发器,每次时钟沿到来,它就进行一次寄存的操作。整个系统就是通过这样按时钟沿触发的寄存来完成所有时序的控制的。
其他结构就是一些简单的门、选择和进位逻辑,它们的具体功能在图6中都有简单标注由于这部分不是我们所要讨论的重点,所以在这里就不多做介绍了。
3.2 系统设计思想
下面将要介绍的内容并非只适用于与FPGA相关的系统设计。实际上,当今基于各种器件的硬件逻辑系统设计几乎都要遵循下面的原则、沿用下面的技巧。只是当今FPGA高速发展,几乎已经成为硬件逻辑设计的代名词,所以这里依然使用它作为主题。
3.2.1 面积与速度的平衡与互换原则
面积和速度的互换是FPGA设计的一个重要思想。“面积”是指一个设计所消耗的FPGA的逻辑资源数量,可以用所消耗的触发器和查找表来衡量。“速度”是指设计在芯片上稳定运行时所能够达到的最高频率,这个频率由设计的时序状况决定,与设计满足的时钟周期、时钟建立时间、保持时间等时序特征量密切相关。如果同时要求一个设计具备设计面积最小,而且还要求运行的频率最高,这是不切实际的。恰当的设计目标应该是在满足设计时序要求的前提条件下,使设计的芯片面积最小;或者在所规定的面积下,使设计的时序余量更大、频率能够更高。这两种目标充分体现了面积和速度的平衡思想。作为矛盾的两个组成部分,面积和速度的地位是不同的。相对而言,首先应该要满足时序的要求,如果两者有冲突,应满足速度优先的原则[11]。
实际上,与FPGA相关的系统设计还有很多原则,但是,面积与速度的原则是最基本,也是最重要的原则。而且,FPGA相关的系统设计并非此次的重点研究对象,所以,其他原则在这里不多赘述。
3.2.2 状态机
状态机,可以说是系统设计的灵魂。实际上,状态机是包含一组状态集、一个起始状态、一组输入符号集、一个映射输出符号和当前状态到下一状态的转换函数的计算模型。当输入符号串,模型随即进入起始状态。它要改变到新的状态,依赖于转换函数。有两类状态机:一类我们称之为米里(Mealy)状态机,它的输出取决于当前函数的输入和现态;另一类我们称之为摩尔(Moore)状态机,它的输出仅取决于现态
[12]
。
如果仅从定义出发,是无法理解状态机的精髓的。其实,状态机应该是一种任务分配模式。我们可以将它看成一个直角坐标系,横坐标代表它的操作类别,分为现态到次态的
17
武汉理工大学毕业设计(论文)
跳转操作时序;状态间的跳转条件;每个状态所要完成的任务。纵坐标即为每种操作类别所实现的各种功能。状态机的魅力就在于它可以将一个庞大的、复杂的逻辑按照上面的方式分解为小规模的、简单的逻辑,然后按照时序逐步完成。这样做的优点是显而易见的:庞大的逻辑难于管理、调节、优化,而且会严重影响系统运行速度。而分解以后的逻辑在那些方面就容易的多,而且通过合理的分配逻辑,可以使系统的运行速度达到一个很高的水平。不仅如此,状态机还可以最大程度的优化时钟沿处的逻辑,使之更加平整,最大程度的减少误差逻辑出现的几率。图7就是这次由QuartusII生成的解码部分的状态机视图。
图7 解码逻辑的状态机视图
这个状态机属于米里(Mealy)型状态机,这个图中仅仅包含了这个状态机的状态转换路径,关于这个状态机的详细信息将在第4部分有所介绍。
3.2.3 流水线
这里所述的流水线是指一种处理流程和顺序操作的设计思想,是高速设计中的一个常用设计手段。如果某个设计的处理流程分为若干步骤,而且整个数据处理时没有反馈或者迭代运算,前一个步骤的输出是下一个步骤的输入,即可以考虑采用流水线设计方法以提高系统的工作频率。其基本结构是将适当划分的n个操作步骤单流向串联起来。流水线操作的最大特点和要求是:数据流在各个步骤的处理,从时间上看是连续的。如果将每个操作步骤简化假设为通过一个D触发器(就是用寄存器打一个节拍),那么流水线操作就类似一个移位寄存器组,数据流依次流经D触发器,完成每个步骤的操作。流水线设计的关键在于整个设计时序的合理安排、前后级接口间数据流速的匹配。这就要求每个操作步骤的划分必须合理,要统筹考虑各个操作步骤间的数据流量。如果前级操作时间恰好等于后级的操作时间,设计最为简单,前级的输出直接汇入后级的输入即可。如果前级操作时间小于后级的操作时间,则需要对前级的输出数据适当缓存,才能汇入后级,还必须注意数据速率的匹配,防止后级数据的溢出。如果前级操作时间大于后级的操作时间,则必须通过逻辑复制、串并转换等手段将数据流分流,或者在前级对数据采用存储、后处理方式,否则会造成与后级的处理节拍不匹配。流水线处理方式之所以频率较高,是因为复制了多个
18
百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库PCIE接口8B10B编、解码的实现(5)在线全文阅读。
相关推荐: