关于FPGA中的亚稳态现象

更新时间:2023-03-16 18:06:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

第一章 绪论

1

第一章 绪论

1.1 论文产生的背景

对于研发人员来说,可靠性是必须保证的设计目标之一。为了验证系统的可靠性,产品在出厂前都会进行大量的整机测试,包括常温测试、高低温测试直到最终的外场测试,这些测试需要耗费大量的人力和物力。对于开发人员来说,通常这个阶段出现的问题也是最头疼的,因为其中很多属于偶发性故障,难以复现。比如芯片上电初始化配置经常失败,或者正常运行的系统突然发生复位,或者网口突然发生阻塞,或者常温下的通过的指标,在进行高低温实验的时候出现了恶化。整机测试不同于平时研发的单板测试,测试手段受到很多限制。比如由于单板装入了机壳,就不能使用JTAG口进行实时监测,也不能使用示波器排查。但是如果在开发初期,设计者能够对系统的各个环节进行认真的评估,充分考虑了可靠性问题,那么在面对测试阶段层出不穷的故障时便能轻松一些。

关于可靠性问题,几乎所有的研究资料都推荐使用同步设计解决,因为同步设计可以保证时钟触发沿避开输入数据发生变化的区域,这也就避免了不稳定采样。的确,实际中复杂逻辑电路均采用同步设计,FPGA厂家也只对客户的同步设计给予技术支持。但是同步设计并非不需要考虑异步问题,因为绝大多数的设计都需要与外界通信,比如某项目中的FPGA的外围设备包括CPLD、CPU、DSP和大量的射频芯片,这些外围器件的工作时钟与FPGA的工作时钟没有任何关系。因此,每次FPGA与这些外围设备通信都面临着失败的风险,如何降低通信故障率是设计中的一个难点。

本文将围绕异步信号对同步系统的影响进行详细的理论分析,从数字电路的结构出发讨论亚稳态发生的根源,并结合FPGA实际设计经验介绍几种解决方法。

1.2 发展历史

输入数据与采样时钟发生沿打沿(marginal trigger)的情况,双稳态电路不能在规定的时间(由厂家定义)进入稳态的现象称为亚稳态。一旦双稳态电路进入亚稳态,那么在亚稳态停留的时间将不可预知。在这段时间里,双稳态电路输出的电压处于非法的逻辑电平区间,具体的电压值无法预测,输出还可能发生振荡。此时如果两个扇出对亚稳态的输出信号进行采样,由于扇出个体间及两条信号线延

2

第一章 绪论

迟的差异,不能保证两个扇出能够最终将其识别为相同的逻辑值。因此,处于亚稳态的系统很容易发生功能故障[1]。

从数字电路发展初期,人们就开始广泛的研究亚稳态。刚开始时人们重点关注电路发生亚稳态的现象,提出了一些经验数据[2, 3, 4]和抽象理论[5,6]以及亚稳态的理论和经验模型[7, 8]。后来通过这些模型的研究,得到了由亚稳态引起故障的概率

[9, 10]

。利用同样的方法,双稳态电路的研究得到了极大发展:出现了测量亚稳态参等等。

另一方面,微电子的飞速发展将亚稳态的研究推到了更加重要的位置。事实

数的方法[11, 12, 13],设计出了检测亚稳态现象的电路[14, 15]和克服亚稳态的同步器[16, 17,

18, 19]

上,因为系统复杂度的快速提高,出现沿打沿的概率变得越来越大,所以时序问题变得越来越重要。系统工作频率的提高使得留给器件从亚稳态恢复到稳态的时间变短。这些因素使得在FPGA设计中越来越重视亚稳态,大量的研究表明亚稳态就是双稳态电路的模拟特性本质的表现。

会发生亚稳态的电路很多,包括常用的AD、存储器和总线控制器等等。不同的系统对故障率的要求也不同,比如语音通信中,由于人耳朵听觉特性,语音信号的误码率可以相对较高。但是对于其他数字处理领域,就会要求相对较低的误码率。

在数字电路中,最容易出现问题的就是总线控制器。图1.1所示为一个外界异步信号与处理器通信的总线控制器的系统结构。外界的异步信号经过同步器同步后进入总线控制器。如果异步信号的频率较低,比如键盘输入,那么系统的故障率(由MTBF衡量)也会相对较低。然而,如果外界异步信号来自高速IC,那么这个系统的故障率就会相应变高。

总同线步控电制路器异步信号处理器

图1.1 一个与处理器通信的总线控制器结构

当今的FPGA设计人员有许多工具软件帮助完成百万门级的电路,但是这些工具并不能解决异步信号的同步问题,这就要求设计者了解提高可靠性的技术,减小跨时钟域时的故障率。对于触发器来说,在时钟触发沿附近的一个小的时间窗口内,输入信号应当保持稳定,其中时间窗口的宽度由厂家决定。

FPGA生产厂家对其产品的可靠性负责,他们使用MTBF(mean time between failure平均无故障时间)来描述发生亚稳态的概率。每个厂家都要求输入信号必须满足器件的建立时间和保持时间。建立时间指在时钟触发沿到来前输入信号必须

第一章 绪论

3

保持稳定的时间,保持时间指时钟触发沿到来后输入信号必须保持稳定的时间。这些参数指标通常与工作电压,工作温度,信号质量和工艺有关。如果输入数据满足这些参数指标,那么器件发生故障的概率就微乎其微。

1.3 本文的主要工作及内容安排

本文主要讨论了数字电路设计中,尤其是FPGA的设计中遇到的亚稳态的问题。文章从数字电路的原理以及数字电路的基本组成单元的结构出发,研究了亚稳态是如何发生的,并从亚稳态的统计特性出发研究了对亚稳态的计算及度量方法,最后结合具体实例重点讨论了对亚稳态的各种处理方法。

本文的主要工作内容如下:

第一章为绪论,简单介绍了亚稳态的发生和危害以及对亚稳态的研究的重要性,并简述了亚稳态的研究在国内外的发展情况。

第二章主要阐述了亚稳态发生的根源,介绍了亚稳态的具体含义,从数字电路的模拟特性,数字电路的基本组成单元RS锁存器和D触发器的结构出发,从根源上讨论了亚稳态的发生。

第三章从触发器的响应曲线、亚稳态窗及平均无故障时间三方面(统计学的角度)出发详细讨论了对亚稳态的计算及度量方法。

第四章是文章的重点,从四个方面即两级触发器级联、握手协议、开环控制、及双口RAM出发,结合具体实例详细介绍了实际中处理亚稳态的方法。

4

第一章 绪论

第二章 亚稳态发生的根源

5

第二章 亚稳态发生的根源

2.1 亚稳态概述

对于数字电路设计者来说,设计的可靠性是极其重要的。而对于触发器来说,只有满足特定的时序关系才能保证电路可靠。如果不满足这个关系,就可能发生亚稳态。而亚稳态意味着输出信号不能在预定的时间内进入已知的状态,也就是说器件的传播延迟超过了额定值。当发生亚稳态后,即使最终输出稳定下来,设计者也不能肯定输出的逻辑值一定正确。在输出信号从亚稳态到稳态的变化过程中,输出信号也许长期游离于非法的逻辑电平值,也可能发生振荡,不论何种情况,对于下一级门电路这都将是一场灾难。

在FPGA中,时钟域是个很重要的概念,几乎所有亚稳态的发生都是由于跨时钟域的问题所引起的。要想理解跨时钟域所引发的故障,首先要了解时钟域,以及同步信号、异步信号的概念。所谓时钟域,是指在FPGA内部由单一时钟或者由多个但是相位恒定的时钟控制的区域。一个时钟和其派生时钟(通过PLL产生)属于同一个时钟域,反转时钟也属于同一个时钟域。如果时钟之间的基准不同,比如来自不同的晶振,即使标称频率相同(通过频率计能看到晶振的频率漂移),也属于不同的时钟域。简单的讲,同步信号是指属于同一个时钟域的信号,异步信号就是指属于不同的时钟域的信号。也可以这样解释,同步信号是指信号与采样时钟之间具有稳定的相位关系,异步信号是指信号与采样时钟之间没有稳定的相位关系。

任何异步信号对于本地时钟域系统都意味着一个不稳定的源,因为总是存在这种可能,时钟会在异步信号变化的时候进行了采样。也就是说,因为异步信号会在相对于时钟触发沿的任何位置到达,所以有这种可能,异步信号会在由建立和保持时间界定的时间窗中变化,这就违背了器件的正常工作条件。当发生这种情况时,芯片可能会出现3种不同的结果:

(1)识别成功,稳定的输出新的数据 (2)识别失败,继续稳定的输出旧的数据 (3)识别失败,进入亚稳态

因为实际中无法断定究竟会出现上述哪一种结果,所以为了保证工作正常,所有跨时钟域的信号即异步信号不能直接使用,必须全部进行同步处理变为本地的同步信号。

6

第二章 亚稳态发生的根源

下面以一个具体的亚稳态发生的例子来引入对亚稳态的讨论。图2.1所示为一个典型的数字设计,时钟域A向时钟域B发送数据,所以对于时钟域B来说,输入数据是异步数据。时钟域B需要采用同步器才能保证接收正常。

时钟域A同步电路时钟域B 图2.1 一个典型的数字设计

即使在第一次触发的时候出现了亚稳态,只要输入信号足够长,在下一次触发的时候就一定能够保证采样到稳定的输入数据,如果从这个角度考虑,好像亚稳态至多只是延长了一个处理周期而已,比如传输一个足够长的控制信号,即使这次判断为无效,那么下次一定会被识别为有效,如图2.2所示。但是实际情况并没有这么简单,因为如果触发器拥有多个扇出,那么就不能保证所有的扇出将亚稳态的信号识别为相同的逻辑电平值,如图2.3所示。

DQ信号ADQ信号BCLK1CLK2CLK1信号ACLK2信号B在信号B变换沿处采样在信号B稳定处采样亚稳态 图2.2 亚稳态的发生示意图

扇出1‘0’扇出3‘1’‘0’异步信号DQCLK扇出2扇出4‘1’

图2.3 亚稳态对触发器的影响示意图

第二章 亚稳态发生的根源

7

2.2 数字电路的模拟特性

如果数字系统中只存在逻辑“0”和逻辑“1”,那么设计者也就不会面临可靠性的问题。然而实际上,所有的逻辑电路处理的都是模拟电压信号,后面将会发现可靠性问题实际上均源于数字电路的模拟特性。下面以最常用的LVTTL33逻辑电平为例来说明,LVTTL33逻辑电平如表2.1和图2.4所示:

表2.1 LVTTL逻辑电平

工作电压 输出高电平 输出低电平 输入高电平 输入低电平

VCC=3.3V VOH≥2.4V VOL≤0.4V VIH≥2V VIL≤0.8V

0.4V0V3.3V2.4V非法逻辑电平0.8V逻辑0(低态)0V逻辑0(低态)VO逻辑1(高态)3.3V2.VVI逻辑1(高态)非法逻辑电平图2.4 LVTTL逻辑电平示意图

对于输出电平来说,大于VOH的电平将被解释为逻辑“1”,小于VOL的电平将被解释为逻辑“0”,介于VOH和VOL之间的电平属于非法逻辑电平;对于输入电平来说,大于VIH的电平将被解释为逻辑“1”,小于VIL的电平将被解释为逻辑“0”,介于VIH和VIL之间的电平属于非法逻辑电平。显然无论输入电压还是输出电压,进行电平切换的时候,都将经历这段短暂的非法逻辑电平时间。以单触发器为例,发生亚稳态的触发器的输出情况可能有3种:

(1)超过正常传播延迟但是没有超过一个时钟周期,输出稳定的逻辑值“1”,虽然可能与前级的输入值相反。

(2)超过正常传播延迟但是没有超过一个时钟周期,输出稳定的逻辑值“0”,虽然可能与前级的输入值相反。

(3)在本次触发后的整整一个时钟周期都处于非法逻辑电平,直到下一次稳定的触发后进入稳态。

这3种情况对系统产生的影响正是本文讨论的内容,显然如果在由组合电路构成的反馈电路中出现了亚稳态,那么很容易波及到整个系统。

2.3 RS锁存器

通过分析双稳态电路中最简单的单元:RS锁存器,可以很容易理解亚稳态发生的原因。RS锁存器是构成各种功能锁存器或触发器的基本单元,它可以用两个与非门或两个或非门交叉耦合构成。图2.5所示为用两个与非门搭建的RS锁存器,它有两个互补输出端Q和Q,用Q端的逻辑值来表示锁存器的状态。Q=1,Q=0时,称锁存器处于1状态;Q=0,Q=1时,称锁存器处于0状态。R、S为锁存器

8

第二章 亚稳态发生的根源

的两个输入端(或称激励端),R被称为清零端,S被称为置位端,均为低电平有效。当输入信号R、S保持为1不变化时,该锁存器必定处于Q=1或Q=0的某一状态保持不变,所以它是具有两个稳定状态的双稳态锁存器。表2.2所示为RS锁存器的真值表。

表2.2 RS锁存器的真值表

Q R S Q

0 0 1 1

0 1 0 1

1 0 1 保持

1 1 0 保持

RQQS图2.5 与非门搭建的RS锁存器

当R为低电平,S为高电平的时候,Q和Q分别为低电平和高电平;当R为高电平,S为低电平的时候,Q和Q分别为高电平和低电平;当R和S均为低电平的时候, Q和Q全部变为高电平,此时如果R先于S变高,那么Q仍然为高电平,Q变为低电平,如果S先于R变高,那么情况相反。但是当R和S同时变高,情况就变的复杂起来,图2.6所示为RS锁存器的波形图,图中的t7时刻就表示了这个时刻。下面将分析在这个时刻,RS锁存器究竟发生了什么。

RSQQt1t2t3t4t5t6t7

图2.6 RS锁存器的波形图

由与非门的特性可知,当RS锁存器的两个输入端口的任何一个为低电平时,输出端的状态就能够唯一确定,而当两个输入端均为高电平时,RS锁存器就进入反馈状态,这时输出端Q和Q的值就由反馈建立之前的值来决定,这是因为A&1=A所以建立反馈后的电路等效于两个反向器串联,如图2.7所示。

第二章 亚稳态发生的根源

V稳态9

Q(Q)Q(Q)亚稳态QQ 0 图2.7 RS锁存器进入反馈状态的等效电路 图2.8 Q和Q的变化曲线

t

由于反向器头尾相接,所以Q和Q的变化趋势正好相反,此时Q和Q的变化曲线如图2.8所示,横坐标表示时间,纵坐标表示电压,粗线表示电压由高电平变为低电平,细线表示电压由低电平变到高电平,两条曲线的交点就是亚稳态点。显然对于上图所示的等效电路来说,如果将Q或者Q的电压置为亚稳态点,并且没有外界的干扰,那么整个反馈系统就永远的停留在这个电压上。实际工作中,可以通过调整R端和S端的时序达到这种效果。

如果R端或者S端由高电平变化为低电平,那么即使在变化的过程中输出端出现了毛刺,RS锁存器的输出终将是稳定的。但是如果R端和S端同时由低电平向高电平变化(也就意味着正在建立反馈,锁存器开始由开环状态变为闭环状态),那么Q和Q的电压就会同时开始下降,从图2.9可以看出,在同时下降到亚稳态点时,反馈环路已经建立起来,根据前面介绍的等效电路的分析可知,此时Q和Q将停止变化,如图2.9所示。

1RQ010Q101S图2.9 R端和S端同时变高对输出的影响示意图

0

如果R端和S端同时由高电平变为低电平,则不会发生上述现象。因为当R端和S端为低电平时,就会强迫Q和Q进入稳态高电平,所以Q和Q将最终稳定在高电平状态。但是如果R端和S端变化的时刻很接近,就可能在输出端产生毛刺。出现毛刺就意味着在输入变化之前和之后,输出值都应该处于相同的电平,只是在输入端变化的过程中,输出端出现了短暂的相反电平,如图2.10所示。

10

R第二章 亚稳态发生的根源

1011R01QQ010S1t0t1t2QQ010St0t1t2t310

0

图2.10 毛刺的产生示意图 图2.11 毛刺的传递示意图

图中,R端和S端在t0时刻都为高电平,且Q端为低电平,Q端为高电平。t1时刻,S端开始由高电平变为低电平,导致Q端由低电平变为高电平,t2时刻,R端开始由高电平变为低电平(△t=t2- t1),那么在t1时刻之后的某个时刻,与非门将R端和Q端都识别为高电平,于是Q端开始下降,但是因为R端电压在逐渐变低,所以与非门终将R端识别为低电平,所以Q端电压在经过短暂的下降后又被抬高,恢复成高电平,于是在Q端出现了一个毛刺。

上面讨论的都是输入波形完整时,由于时序的问题导致RS锁存器输出出现毛刺的情况,假如由于前端的原因在输入端出现了毛刺,那么RS锁存器会将毛刺传播下去,如图2.11所示。图中,S端和R端在t0时刻分别为高电平和低电平,Q端为低电平,Q端为高电平。t1时刻,S端出现了一个毛刺导致Q端电压上升,在S端电压恢复为高电平后,Q端电压也恢复到低电平,这样在Q端就出现了一个毛刺。由于R端一直为低电平,所以Q端锁定在高电平不变。

这就说明,在使用RS锁存器的时候,一定要保证R和S具有足够的变化时间间隔△t,在FPGA中禁止使用RS锁存器就是这个道理,通常FPGA内部如果使用了RS锁存器,且R和S端信号都走数据线,由于数据线的延迟相当大(ns级),所以,即使在产生R和S信号的时候保证了足够的时间余量,也不能保证在到达RS锁存器端口的时候,仍然有足够的时间间隔,这也是组合逻辑固有的弊病。

从上面的分析可以确知,对于与非门来说,当两个端口同时发生变化的时候,与非门的判断就出现困难,导致发生判断错误或者进入亚稳态。但是只要保证同一时刻对于与非门的两个输入端,只有一个端口变化,另一个端口稳定就可以保证与非门输出稳定。假设与非门的传播延迟为tPD,那么保证RS锁存器正常工作的条件就是R和S的变化间隔△t大于tPD,即△t>tPD。比如S端发生的变化导致Q变化,那么在Q稳定之前(需要tPD时间),R端不能发生变化。

36

第四章 克服亚稳态的方法

ab_ldenadatadQqabus只传输一个控制信号b_ldena_clkab_ldenb_ldenDQDa_ldenldena_ldenadataabus00FF00(b)FFa_clk(a) 图4.24 两控制信号的开环控制电路的改进[29]

在实际应用中,有时发送端的控制信号不可能合并为一个,比如双向传输过程,主控制器连接了不同的外围器件,同这些外围器件通信全靠片选和地址线区分,读操作和写操作也各需要一个控制信号:读使能和写使能。如果控制器不可编程,即使只向单一器件单向传输,设计者也不可能要求控制器将多个控制信号合并为一个。

4.4 双口RAM

处理跨时钟域的常用方法是使用FIFO[31, 32, 33, 34],FIFO的一个特点就是读写操作的地址指针顺序变化,这种方式提高了FIFO的工作速度,但是也造成了对FIFO控制的僵化。在需要对事先存储数据进行精确寻址(回读)的时候,就需要使用双口RAM。双口RAM 作为一种性能优越的快速通信器件,适用于高速数字系统的设计中,它的优点是:提供了两路完全独立的端口,每路端口都有完整的地址线、数据线和控制线,允许对双端口存储器的不同单元进行同时存取。

4.5 克服亚稳态的FPGA设计实例

本章的前4节分析了同步电路能够克服亚稳态的原理,但是这对于解决亚稳态还远远不够,因为实际中由亚稳态引发的故障现象千奇百怪,这需要设计者能够透过表象快速找到故障根源。下面将以工程实际为例,介绍处理亚稳态的软件设计技巧和硬件调试技巧。 4.5.1 软件锁相中的亚稳态处理

在某项目中,基带处理板向射频板输出频率准确的时钟CLK1,但是由于传输

第四章 克服亚稳态的方法

37

链路带来的干扰增加了时钟的相噪,所以射频板没有直接使用这个外界时钟CLK1作为本板的工作时钟,而是在射频板上使用了普通的VCXO(CLK2),为了最终达到两板之间的时钟同步,射频板上的FPGA和CPU合作实现了利用外界时钟CLK1对本板工作时钟CLK2的实时校准功能。

图4.25所示为软件锁相的结构框图,其中鉴相功能和对DA的控制在FPGA内部实现,锁相控制算法在BSP中实现。鉴相的基本思路是:如果本板VCXO非常准确,那么每隔固定时间T,两个时钟的上升沿必然会对齐一次。也就是说满足

T1N1?T2N2?T(其中T1和T2分别为两个时钟的周期,N1和N2分别为两个时钟周期的计数值),如图2.26所示。在选取参数的时候,为了提高最小鉴相精度,在FPGA内部对CLK1进行了4倍频处理,倍频后的时钟作为鉴相时钟CLK1_mul,为了增大累积相差,在FPGA内部对CLK2进行分频处理,分频后的时钟为CLK2_div,设定分频后的时钟周期为T2_div,显然如果VCXO频率准确,那么在一个T2_div中用CLK1_mul计数结果应当是一个可预知的常量,但是如果VCXO频率偏移,那么计数值也会偏移,CPU根据FPGA输出的计数值(鉴相值)的偏移方向就可以推断出VCXO频率偏移的趋势,然后CPU根据锁相算法输出一个控制DA电压值返回给FPGA,FPGA模拟DA的时序将此控压值输出到DA的控制接口,每次调整的结果都是将VCXO的频率向理想的CLK2时钟频率方向移动,这样就实现了整个闭环锁相流程。

光纤恢复时钟FPGA控压值DA控制电压控压值鉴相值本地时钟CPUVCO

图4.25 软件锁相的结构框图

T1CLK1N1T2CLK2对齐对齐N2对齐

图2.26 时钟关系图

在鉴相过程中,由于两个时钟CLK1_mul和CLK2_div不相关,CLK1_mul如何识别T2_div就成为设计中需要注意的问题。实际设计中解决方法是对原始的

38

第四章 克服亚稳态的方法

T2_div先进行同步处理然后再对同步后的T2_div进行取上升沿操作,这样就同时解决了异步时钟域的隔离和识别T2_div的问题。如图4.27所示,整个处理流程都工作在CLK1_mul下,显然如此设计属于同步设计,然后在同步器中实现同步和取沿操作。图4.28显示了同步器的设计,前面两级触发器实现了对异步信号的同步功能,后面两级触发器和异或门实现了取沿操作,当然后面的两级触发器的使用同样也降低了亚稳态发生的概率。图4.29清晰的显示了同步器电路的时序图。

CLK1_mul光纤恢复时钟CLK1倍频本地时钟CLK2分频CLK2_div同步器CLK2_div_syn鉴相值鉴相器 图4.27 鉴相流程

CLK2_divDQCLK2_div_dl1DQCLK2_div_dl2DQCLK2_div_dl3DQCLK1_mulCLK2_div_synCLK2_div_dl4 图2.28 同步电路图

CLK2_divCLK2_div_dl1CLK2_div_dl2CLK2_div_dl3CLK2_div_dl4CLK2_div_syn

图 4.29 同步电路时序图

鉴相器模块的功能是在每个T2_div周期开始的时刻计数,在每个T2_div周期结束的时刻将计数值送给控制DA模块,同时将计数值清零,也就是说FPGA上报鉴相值的周期是T2_div,由于晶振的漂移效应,刚刚上电时的鉴相值相比理想值会偏离很远,但是经过几分钟的调整后,鉴相值的抖动便限制在偏离理想值正负5之内,如果BSP将鉴相值打印出来,那么从超级终端中看到的现象就是鉴相值快速的向理想值收敛,同时抖动范围也迅速减小。

设计中遇到另一个会引发亚稳态故障的设计部分来自控制DA模块,控制DA的时钟由输入到FPGA内部的CPU时钟CLK_CPU计数产生,之所以使用计数产生是因为在FPGA内部对CPU时钟进行降频后产生信号送给外界的芯片作为工作

第四章 克服亚稳态的方法

39

时钟使用,所以不必使用FPGA内部的PLL产生,这样设计唯一需要保证的就是接口的时序关系必须完全符合芯片手册对建立保持时间和时钟最高速度的要求。由于CLK_CPU比CLK_DA快的多,所以如果CLK_DA直接对CPU发出的中断信号进行采样就不能保证每次都能够成功采到,解决这个问题的方法就是在CPU模块中将接收下来的中断信号进行延拓,延拓的结果要求保证超过两个CLK_DA的长度,这样CLK_DA就能够准确采集到控压值,具体流程如图4.30所示。

CLK_CPU中断中断信号扩展CPU接口模块控压值控制DA模块扩展后的中断信号LE_DADATA_DACLK_DA 图4.30 控制DA流程

但是如此设计会引发另外一个问题,如果控制DA模块直接使用CLK_DA作为模块的工作时钟,实验表明很容易引发输出信号线DATA_DA的紊乱。原因很简单,CLK_DA由CLK_CPU计数产生,由于FPGA内部数据线的巨大延迟,根本无法保证CLK_DA能够准确的采集到来自CLK_CPU时钟域的控压值(虽然用modelsim进行功能仿真的时候很正常),既然采集到的控压值不正确,那么对其进行并串转换后的输出结果DATA_DA必然也不正常。由于CLK_CPU和CLK_DA存在整数倍关系,所以解决这个问题最简单的方法就是控制DA模块不使用CLK_DA作为工作时钟(虽然从外界看上去工作频率是CLK_DA),而是利用触发器的EN端,将所有触发器的工作时钟均设定为CLK_CPU,只是在每个CLK_DA周期的开始将EN端置一个CLK_CPU周期的高电平有效,这样虽然触发器的工作时钟是CLK_CPU,但是由于EN端的有效控制使得输出DATA_DA的工作频率是CLK_DA。当中断信号有效的时候就将控压值读入,然后经过并串转换依次送出到DATA_DA。如此一来,整个设计便全部工作在同一个时钟域中,如图4.31所示。具体实现代码如下:

always @(posedge CLK_CPU or negedge reset_n) if (!reset_n)

DA_shiftreg16 <= 16'b0; else if (CLK_DA_edge) …

控压值扩展后的中断信号DATA_DA并转串模块CLK_CPUCLK_DA_edge 图4.31并转串模块

40

第四章 克服亚稳态的方法

4.5.2 电平标准不匹配引发亚稳态

某单板在常温下测试48小时没有出现误码,在进行高低温试验中,多次出现上行光口信号突然丢失的现象,如果重新插拔光纤,上行光口信号又恢复正常。更奇怪的是虽然上行光口经常出现故障,但是下行光口信号无论在常温还是在高低温测试的时候均工作正常。

单板光口通信部分的原理图如下,PMC7832是一款支持CPRI协议的芯片,RBI接口的上行工作时钟和下行工作时钟均为122.88MHz,只是相位相反,数据位宽为10位。SERDES接口的上行工作时钟和下行工作时钟均为1.2288GHz,位宽为1位。

122.88MHzDCM上行数据上行数据上行光口FPGA下行数据PMC7832下行数据光模块下行光口RBI接口SERDES接口

图4.32 光口通信原理图

由于进行高低温试验不能使用示波器,所以只能在常温测试时进行故障排除。先从接口时序进行分析,由于SERDES接口的工作频率太高,基于先易后难的原则,首先对RBI接口的上行链路时序进行测量,结果如下,其中绿线表示时钟,黄线表示数据。测试结果为时钟和数据的时序关系满足手册中定义的建立和保持时间要求。

时钟数据

图4.33 常温下的RBI接口时序图

本来测量RBI时序到此就结束了,但是在后续版本更新中,出现了一个在常

本文来源:https://www.bwwdw.com/article/2fuv.html

Top