- 1、本文档共6页,可阅读全部内容。
- 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
现代的IC芯片包含丰富的触发器,不同电路的时钟驱动源存在频率和
现代的IC芯片包含丰富的触发器,不同电路的时钟驱动源存在频率和相位的差异,因而出现了跨不同时钟区域进行异步数据传输的要求。亚稳态问题是异步数据传输过程面临的主要问题,本文提出多种跨越异步时钟边界传输数据的方法,它们包括FIFO?法和脉冲展宽处理等同步方法。
Peter Alfke
应用工程主管
ilinx公司
mikem@
数字电路设计工程师偏好稳定、易于设计及仿真的同步单一时钟系统,然而,有时也难免用到多时钟。在电信和数据通讯领域,将数据由一种时钟域传到另一种时钟域的情况很常见,这类设计要全面解决时序问题。
两种不相关时钟并不一定会造成时序关系的混乱,虽然出现时序冲突的情况肯定不止一次,因此,在这种情形下,在异步边界之间准确地传输数据至关重要。采用经验证的设计技术可将存在问题的仲裁电路大幅减少,并且设计出可靠工作的电路。
应遵循的设计原则
尽管设计工程师偏好同步电路,但如果一个系统中存在多个时钟,要确保时钟边界的设计成功,设计工程师就必须遵循若干重要原则:1. 不要同时对一个以上的并行触发器中的异步输入进行同步处理。由于在同步触发器窗口建立期间异步输入经常会改变,而且给定的两个触发器不可能完全一致(即便在同一芯片内的触发器)。这样迟早会出现这样的情况:当一个时钟沿来临时,一个触发器输入被当成“1”,而另一个触发器被当成“0”。这种反常的情形会引起很多麻烦,因而需要将设计改为只使用一个时钟同步触发器。
然而,即使采用单个同步触发器也会出现逻辑异常现象,出现这种情形的可能性很小,但的确存在,因为当触发器的主锁存器接收的信号进入平稳状态前,异步输入在极短的建立时间窗口内发生改变,这样触发器就会进入亚稳态。
触发器即使进入亚稳态状态,也会很快进入稳态。只要触发器有几纳秒的建立时间,设计工程师就能解决这个亚稳态问题。因为输入数据中时序不一致,所以采用何种方式让触发器稳定并不重要。亚稳态问题并非指输出结果数据的不确定性,而是指输出变化的时序不确定性。
握手通信方式
当并行数据通过时钟域边界时,采用什么办法能够解决稳定问题?传统的处理办法是生成一个标记,然后采用握手方式来处理(图1)。
当发送电路要发送并行数据时,它会在READY信号上产生一个上升沿,即在触发器F上设立标记告诉接收电路发送数据已经准备就绪。接收电路将持续扫描触发器F,当检测到标记变为高电平时便接收稳定的并行数据,然后产生用于设置触发器A的ACK上升沿。它使触发器F复位,然后触发器F使触发器A复位。这种独特的设计不考虑传输和接收之间任意相位及频率的关系,这通常要求在两个触发器之间的设计采用合理的约束竞争条件。在触发器F和触发器A复位期间,可以把一个合理的环路延迟插入。在某些特殊设计中,这种延迟可在发送期间,也可以在接收期间插入。
这种传统的握手通讯方式要求通讯双方检测标记F的状态。发送电路只能在F为低电平时才改变并行数据,而接收电路只能在F为高电平时接收数据,这种方式虽然安全但数据传输率低。然而,还能找到在异步时钟边界更快地传输数据的其它方法。
当接收时钟比输入数据的变化快得多时,就要对带有接收时钟的异步字进行双倍缓存,并在两个寄存器中对数据进行识别校验(图2)。
同样,如果在接收时钟之前或在接收时钟周期内,异步数据时序未发生变化,则两个寄存器里都保存相同的有效数据。识别比较器也可用作跳变检测器,因为在异步数据发生变化时它会停止工作。
如果异步数据是二进制计数器,这种双倍缓存电路甚至可用来处理与读时钟周期速度同样快的计数器的变化。要修正识别比较器使其能接受识别数据。如前所述这种电路能拒收计数器跳变时可能俘获的错误数据,但允许读取电路在一个计数器时钟周期后开始读操作,此外,改变比较器窗口也能增加这种容错性。
向FIFO输入数据
当接收时钟偶尔要读取比读取时钟周期变化更快的异步数据时,就必须插入一个异步先进先出(FIFO)存贮器作为一个弹性缓存,该FIFO存贮器由配备独立的读、写地址计数器的双口RAM和数据端口组成。双口RAM和FIFO存贮器的专用IC很多,在FPGA(如Xilinx的Virtex)中也嵌入了双口RAM。FPGA双口RAM深度从16位(用查表逻辑实现)到256位甚至4096位(由片上BlockRAM实现),输入和输出的时钟频率远远大于100MHz。
真正双端口存贮器的每个端口的工作相互独立。写入端采用连续的写入时钟并通过激活WRITE ENABLE端来写入数据。读取端采用连续的读取时钟并通过激活READ ENABLE端来读取数据。为了避免出现解码差错,建议两个端口都采用格雷码寻址方式。在FIFO中,如果两个端口采用相同序列,那么地址代码序列是不相关的。因为在任意的跳变中只有一个位改变,格雷码特别适合于时钟域边界的数据传输。
空
文档评论(0)