tag 标签: 亚稳态

相关博文
  • 热度 4
    2021-3-16 11:57
    4505 次阅读|
    2 个评论
    Verilog基础--亚稳态简介
    在FPGA的系统中,如果数据传输不满足触发器的Tsu(建立时间)和Th(保持时间),或者复位过程中复位信号的释放不满足有效时钟沿的恢复时间(recovery time),就有可能产生亚稳态,此时触发器的输出端Q长时间处于震荡状态,且不等于输入端D,并且这种无用的输出可以沿信号通道上的各个触发器级联式传播下去。 下图为数字电路的高低电平和亚稳态区域: 亚稳态通常发生在 跨时钟域信号传输以及异步信号采集 上,其根本原因是: 时序上不满足触发器的建立与保持时间 。 1.跨时钟域信号传输,由于源寄存器时钟和目的寄存器的 时钟相移未知,所以源寄存器数据发出,可能在任何时间到达异步时钟域的目的寄存器,因此无法保证这些数据满足目的寄存器的建立时间Tsu和保持时间Th的要求。 2.异步信号采集上,异步信号可以在任何时间点到达目的寄存器,也无法保证满足目的寄存器的建立时间Tsu和保持时间Th的要求。 当数据在目的寄存器的Tsu-Th窗口发生变化时,即当数据的Tsu或Th不满足时,就有可能发生亚稳态的现象: 由图可知,当产生亚稳态后,Tco(时钟输出延迟)时间后会有个 Tmet(决断时间)的振荡时间段 ,当振荡结束回到稳定状态时为“0”或“1”,这个是随机的。因此会对后续电路的判断造成影响。 常用对亚稳态消除的三种方式: 1.对异步信号进行同步处理; 2.采用FIFO对跨时钟域数据通信进行缓冲设计; 3.对复位电路采用异步复位、同步释放方式处理; 下载视频
  • 热度 26
    2015-10-5 16:05
    1671 次阅读|
    0 个评论
    距离上次的博客已经有段时间了,这写些日子一直在调SDRAM的模块以及文档的书写,SDRAM的子模块比较多,包括init(初始化模块)、refresh(刷新模块)、write(写模块)、read(读模块),使用起来相比之前的USB控制模块、今天的GEN_FRAME(以下均表示为成帧模块)都稍显复杂一些。好了,接下来介绍我们今天的主角:成帧模块。成帧模块的作用有两个: 1.完成时钟域的转换 :将缓存到sdram中的数据读出发送给USB,sdram芯片可以达到的时钟频率范围大致为24MHZ-256MHZ,该时钟由FPGA给出,具体的时钟还要看FPGA稳定工作可以达到的时钟。另一方面,USB控制器的时钟有USB芯片给出,为48MHZ。数据在不同时钟域间的传输就要用到时钟域的转换。 2.给数据加下帧头: 发送数据之前,首先给数据加上一行帧头,表明我的一行数据开始发送,该帧头包含了图像的列信息,然后将加了帧头的数据发送给USB控制模块,由它通过USB芯片发给上位机。   (一)跨时钟域的转换 下面我们来谈谈今天主角中的主角: 跨时钟域的转换 1,不做时钟域的转换有什么危害?2.单bit的信号与多bit的信号的处理方式有何不同? 带着这两个疑问我们来看。我们在做项目的时候不免会遇到两个模块的时钟不同的情况,A用的时钟是48MHZ,B用到的时钟是133MHZ( 这里的48跟133只是说明时钟不同 )。 以 单bit的信号 为例,都以上升沿采样: A.现在有一个由133MHZ产生的脉冲信号(一个时钟周期)flag,通过接口传给A(48MHZ),A要检测到它,可是现象是,你133MHZ太快了(太短),A的上升沿根本采不到它(也有概率可以采得到)。 B.反过来呢?A(48MHZ)的信号传给B(133MHZ),由于A的时钟频率比B慢,根本不会存在B采不到A信号的情况,但是还会有问题(就是不能让你好好传),亚稳态。 解释一下亚稳态: a.概念:指触发器无法在某个规定时间段内达到一个可确认的状态。(是不是还是有点不懂,没事看下面)。 b.什么情况会导致亚稳态:在同步系统中,建立时间、保持时间不满足就可能会产生,此时的输出端(Q端)在有效的时钟沿之后比较长时间处于不确定状态,毛刺、振荡或者是一个固定的某一电压(却不是D端的电压),这段时间成为决断时间,之后稳定在0、1上,但是这是随机的,跟输入没有必然的关系。 说了这么多,什么意思?就是每个频率的时钟都有自己的一个规则(建立时间、保持时间),我的地盘听我的,到了我的地盘就要按我的规矩办事,你不按我的规则来可以,后果就是,我随便给你输出一个值,这个值是什么,看心情,用了这个数据出不出问题就不是我的事了。 c.如何解决:1.减低时钟频率。2.将寄存器打两拍再使用。 跨时钟域的处理        A比较惨,A的情况包含了B,即包含采不到的情况,又存在亚稳态的问题,下面给出A的处理过程。有没有发现今天的图非常少,先上图。   将数据打三拍,一共四个寄存器,通过一个or门,时钟域转换为48MHZ,再延时两拍得到稳定的标志位。通过or门产生的信号会有毛刺,打两拍还可以起到去毛刺的作用。                另外,多bit同频率,异相位的时钟域切换,使用双口ram进行同步(同频异相),不同频不同相时钟转换使用异步FIFO做同步。成帧模块用到了异步FIFO做处理。 (二)GEN_FRAME模块描述 1模块框图            1. SDRAM存储一帧数据后使能read_start信号,GEN_FRAME将帧头发给USB W_FIFO,同时SDRAM向GEN_FRAME的内部FIFO写入一行数据。 2. SDRAM写完一行数据后等待写下一行的命令(read_req),GEN_FRAME继续向USB W_FIFO写入数据(w_flag有效),直到写完一行后等待。当PC将W_FIFO中数据读完,即flag_C==0时,read_req有效。 3. 当read_req有效时,下一行开始传输,GEN_FRAME中的FIFO同时进行读写(SDRAM向GEN_FRAME中的FIFO中写,同时将GEN_FRAME中的数据读出到USB W_FIFO)。 4. 直到读完一帧图像后(即行计数row_cnt计满),read_req无效,w_flag无效,停止读写。 2接口定义   3关键信号时序      A) 读 GEN_frame 数据到 USB W_FIFO ①  Sdram 存完一帧数据后发送 read_start 信号,经夸时钟域处理后得到 read_start_48 ,在此信号后检测到 flag_C 为 0 (即 W_FIFO 为空),因此要将 read_start_48 做延展,得到 read_start_buf ,取它的下降沿为读一帧数据开始。 ②  检测到 read_start_buf 的下降沿后将 w_usb_flag_reg 拉高,同时 w_usb_cnt 开始计数,由于数据给出客观上延时一拍才能读到,所以讲使能信号延时一拍发出,即 w_usb_flag 。该信号为传入下一级的使能信号。 ③  一行数据读出后,继续检测 flag_C=0 时, F_read_req( 向 GEN FIFO 发送读请求 ) , r_fifo_en 与 w_usb_flag 一致,同时读出 fifo 中的数据 r_fifo_data 。 注意:根据同步 fifo 的经验,这里的 r_fifo_en 本应该提前数据一拍给出,但上面写到同时读出 fifo 数据。没错,根据代码发现,异步 fifo 的读使能 r_fifo_en 与读数据 r_fifo_data 居然是同一时刻给出来!!!!! ④  每读完一行数据我们的行计数 gen_cnt_row 要加一。这里的行计数是由 w_usb_flag_reg 的下降沿来触发目的是保证不要丢数据。 ⑤  最终 GEN_FRAME 输出数据 w_data 根据行号来选择, gen_cnt_row=0 选择 zhen_data ,否则选择 fifo_data 。 注意:这里面的 gen_cnt_row 要记到 row_cnt+1 (帧头)。 B)sdram 向 GEN_FRAME FIFO 中写数据 ①   利用 sdram 时钟检测 flag_C 的下降沿,产生 read_req ,并输出到 sdram 控制模块中。 ②  检测到 read_req 为高时, sdram 将数据传入 GEN 模块, cnt_data 开始计数,计数器由 SD_data_v 使能信号控制(读 sdram 被刷新打断,数据会被打断),计数到 499 停止。 ③  写入 fifo 的数据为 512 个 16bit 的数据,数据只有 500 个,所以要补 12 个 16bit 的数据零, cnt_12 从 cnt_data==499 时开始计数,计到 11 为止。 将 SD_data_v 与 cnt_12_flag 作或操作,时序赋值给 w_fifo_en 。数据时序赋值给 w_fifo_data 。分别为写入 fifo 的使能信号与数据信号。 
  • 热度 30
    2015-3-12 11:30
    1211 次阅读|
    0 个评论
    最近一直在看异步时钟域的亚稳态问题,有好多疑问   从简单的电平同步器开始,如上图。 假设clk2 = 1.5clk1(或者更高),用clk2来同步clk1的单bit data,假设data刚好在clk2的上升沿跳变(data在clk2的Tsu和Tth区间类跳变),这时产生亚稳态,导致reg1的输出震荡,输出的值Q1不固定,假设输出0(0是错误值,也有可能输出1正确值),结果导致本来在clk1里只有一个周期的低电平,经clk2同步后出现两个周期的低电平,这样第一级reg1的输出错误值会一直沿着reg2传递下去,这种同步错误应该是无法纠正的。 对于单bit的数据且有效电平只有原时钟域的一拍这种情况,可以用边沿检测 那么问题来了,对于单bit数据但是有效电平不只一拍的情况,假如FPGA作为IIC从机来接收sda过来的数据,我们应该怎么避免或者减少上面情况所带来的问题。
  • 热度 15
    2012-1-6 22:21
    1750 次阅读|
    1 个评论
      1. 应用背景 1.1亚稳态发生原因         在FPGA系统中,如果数据传输中不满足触发器的T su 和T h 不满足,或者复位过程中复位信号的释放相对于有效时钟沿的恢复时间(recovery time)不满足,就可能产生亚稳态,此时触发器输出端Q在有效时钟沿之后比较长的一段时间处于不确定的状态,在这段时间里Q端在0和1之间处于振荡状态,而不是等于数据输入端D的值。这段时间称为决断时间(resolution time)。经过resolution time之后Q端将稳定到0或1上,但是稳定到0或者1,是随机的,与输入没有必然的关系。 1.2亚稳态发生场合        只要系统中有异步元件,亚稳态就是无法避免的,亚稳态主要发生在异步信号检测、跨时钟域信号传输以及复位电路等常用设计中。 1.3亚稳态危害         由于产生亚稳态后,寄存器Q端输出在稳定下来之前可能是毛刺、振荡、固定的某一电压值。在信号传输中产生亚稳态就会导致与其相连其他数字部件将其作出不同的判断,有的判断到“1”有的判断到“0”,有的也进入了亚稳态,数字部件就会逻辑混乱。在复位电路中产生亚稳态可能会导致复位失败。怎么降低亚稳态发生的概率成了FPGA设计需要重视的一个注意事项。  2. 理论分析 2.1信号传输中的亚稳态        在同步系统中,输入信号总是系统时钟同步,能够达到寄存器的时序要求,所以亚稳态不会发生。亚稳态问题通常发生在一些跨时钟域信号传输以及异步信号采集上。 它们发生的原因如下: (1)在跨时钟域信号传输时,由于源寄存器时钟和目的寄存器时钟相移未知,所以源寄存器数据发出数据,数据可能在任何时间到达异步时钟域的目的寄存器,所以无法保证满足目的寄存器Tsu和Th的要求; (2)在异步信号采集中,由于异步信号可以在任意时间点到达目的寄存器,所以也无法保证满足目的寄存器Tsu和Th的要求;当数据在目的寄存器Tsu-Th时间窗口发生变化,也即当数据的建立时间或者保持时间不满足时,就可能发生亚稳态现象。如图3.1所示。                                                          图3.1  亚稳态产生示意图        由图可知,当产生亚稳态后Tco时间后会有Tmet(决断时间)的振荡时间段,当振荡结束回到稳定状态时为“0”或者“1”,这个是随机的。因此,会对后续电路判断造成影响。 2.2复位电路的亚稳态 2.2.1异步复位电路         在复位电路设计中,复位信号基本都是异步的,常用异步复位电路Verilog描述如下: always @(posedge clk or negedge rst_n) begin        if(!rst_n) a = 1’b0;        else         a = b; end 综合出来复位电路模型如图3.2所示: 图3.2  异步复位电路模型         如图3.3所示,为复位电路复位时序图。如果异步复位信号的撤销时间在Trecovery(恢复时间)和Tremoval(移除时间)之内,那势必造成亚稳态的产生,输出在时钟边沿的Tco后会产生振荡,振荡时间为Tmet(决断时间),最终稳定到“0”或者“1”,就会可能造成复位失败。 图3.3  异步复位时序 2.2.2同步复位电路的亚稳态         在复位电路中,由于复位信号是异步的,因此,有些设计采用同步复位电路进行复位,并且绝大多数资料对于同步复位电路都认为不会发生亚稳态,其实不然,同步电路也会发生亚稳态,只是几率小于异步复位电路。 如下面verilog代码对同步复位电路的描述。 always @(posedge clk) begin        if(!rst_n) a = 1’b0;        else         a = b; end 综合出硬件电路如图3.4所示。 图3.4  同步复位电路         在此,我们不讨论同步复位的消耗资源问题,只讨论同步复位的亚稳态产生情况。当输入端Din为高电平,而且复位信号的撤销时间在clk的Tsu和Th内时候,亚稳态就随之产生了。如图3.5时序所示,当复位撤销时间在clk的Tsu和Th内,输入数据为“1”,通过和输入数据相与后的数据也在clk的Tsu和Th内,因此,势必会造成类似异步信号采集的亚稳态情况。 图3.5  同步复位电路时序图 2.3亚稳态产生概率以及串扰概率         在实际的FPGA电路设计中,常常人们想的是怎么减少亚稳态对系统的影响,很少有人考虑怎么才能减少亚稳态发生几率,以及亚稳态串扰的概率问题。 2.3.1亚稳态发生概率         由上面分析得知,系统亚稳态发生的都是由于clk的Tsu和Th不满足,又或者是复位信号的移除和恢复时间不满足。常用FPGA器件的Tsu+Th约等于1ns,复位移除和恢复时间相加约等于1ns。         当异步信号不是一组数据,或者信号量较少,那就需要对异步信号进行同步处理,例如对一个异步脉冲信号进行采集,只要脉冲信号变化发生在时钟Tsu和Th窗口内,那就很可能会产生亚稳态,亚稳态产生的概率大概为:                           (公式3-1)         由公式3-1可以看出,随着clk频率的增加,亚稳态发生的几率是增加的。例如,为系统采用100M时钟对一个外部信号进行采集,采集时钟周期为10ns,那采集产生亚稳态的概率为:1ns/10ns = 10%同理采用300M时钟对一个外部信号进行采集,那产生亚稳态的概率为:1ns/3.3ns = 30%如果采用三相相位差为120°的时钟对一个外部信号进行采集,那产生亚稳态的概率接近90%        所以在异步信号采集过程中,要想减少亚稳态发生的概率:    (1) 降低系统工作时钟,增大系统周期,亚稳态概率就会减小;   (2)采用工艺更好的FPGA,也就是Tsu和Th时间较小的FPGA器件; 2.3.2亚稳态的串扰概率         使用异步信号进行使用的时候,好的设计都会对异步信号进行同步处理,同步一般采用多级D触发器级联处理,如图3.6所示,采用**D触发器对异步信号进行同步处理。 图3.6  **寄存器同步         这种模型大部分资料都说的是第一级寄存器产生亚稳态后,第二级寄存器稳定输出概率为90%,第三极寄存器稳定输出的概率为99%,如果亚稳态跟随电路一直传递下去,那就会另自我修护能力较弱的系统直接崩溃。接下来我们分析这种串扰的概率问题。如图3.7所示为一个正常第一级寄存器发生了亚稳态,第二级、第三极寄存器消除亚稳态时序模型。 图3.7  **寄存器消除亚稳态         由上图可以看出,当第一个寄存器发生亚稳态后,经过Tmet的振荡稳定后,第二级寄存器能采集到一个稳定的值。但是为什么第二级寄存器还是可能会产生亚稳态呢?由于振荡时间Tmet是受到很多因素影响的,所以Tmet时间又长有短,所以当Tmet时间长到大于一个采集周期后,那第二级寄存器就会采集到亚稳态。如图3.8所示。 图3.8  二级寄存器亚稳态         由上图可知,第二级也是一个亚稳态,所以在这种情况下,亚稳态产生了串扰,从第一级寄存器传到了第二级寄存器,同样也可能从第二级寄存器串扰到第**寄存器。这样会让设计逻辑判断出错,产生亚稳态传输,可能导致系统死机奔溃。 2.3.3亚稳态振荡时间Tmet         亚稳态震荡时间Tmet关系到后级寄存器的采集稳定问题,Tmet影响因素包括:器件的生产工艺、温度、环境以及寄存器采集到亚稳态离稳定态的时刻等。甚至某些特定条件,如干扰、辐射等都会造成Tmet增长。 3. 应用分析         有亚稳态产生,我们就要对亚稳态进行消除,常用对亚稳态消除有三种方式: (1)       对异步信号进行同步处理; (2)       采用FIFO对跨时钟域数据通信进行缓冲设计; (3)       对复位电路采用异步复位、同步释放方式处理。 3.1.1对异步信号进行同步提取边沿         在异步通信或者跨时钟域通信过程中,最常用的就是对异步信号进行同步提取边沿处理。对一个异步信号进行提取上升沿通常采用程序清单 4.1所示。 程序清单 4.1 双极寄存器提取边沿 input      sig_nsyn; wire        sig_nsyn_p; reg    sig_nsyn_r; always @(posedge clk or negedge rst_n) begin        if(!rst_n) sig_nsyn_r = 2’d0;        else         sig_nsyn_r = { sig_nsyn_r , sig_nsyn }; end   assign     sig_nsyn_p = sig_nsyn_r ~sig_nsyn_r ;        这种边沿提取方式对于一个稳定的系统是不合适的,例如:当第一级寄存器采集到亚稳态,那势必造成sig_nsyn_p输出亚稳态,这样就会对采用sig_nsyn_p的信号进行判断的电路造成影响,甚至判断出错误的值。        根据3.3.1小节的亚稳态产生概率,如果在100M时种下那第一级寄存器产生亚稳态的概率约为10%,随着系统采集频率升高,那产生亚稳态的概率也会随之上升。因此,在进行异步信号跨频提取边沿时候,一般采用多进行一级寄存器消除亚稳态,可能在系统稳定性要求高的情况下,采用更多级寄存器来消除亚稳态,如程序清单 4.2所示,即为采用4级寄存器消除亚稳态,相应的边沿信号产生的时间就晚了两个时钟周期。 程序清单 4.2 多级寄存器提取边沿信号 input      sig_nsyn; wire        sig_nsyn_p; reg    sig_nsyn_r; always @(posedge clk or negedge rst_n) begin        if(!rst_n) sig_nsyn_r = 2’d0;        else         sig_nsyn_r = { sig_nsyn_r , sig_nsyn }; end   assign     sig_nsyn_p = sig_nsyn_r ~sig_nsyn_r ; 3.1.2FIFO进行异步跨频数据处理         当数据流从一个时钟域到另一个时钟域的时候,绝大多数情况下都采用FIFO来作为中间缓冲,采用双时钟对数据缓冲,就可以避免亚稳态的发生。 3.1.3异步复位,同步释放         对于复位情况下的亚稳态,常常是由于恢复时间和移除时钟不满足造成的,因此,最常用的处理方式是采用异步复位、同步释放。常用电路模型如所示。采用第二级寄存器输出作为全局复位信号输出。 程序清单 4.3  异步复位处理 wire        sys_rst_n; reg   rst_r; always @(posedge clk or negedge rst_n) begin        if(!rst_n) rst_r = 2’d0;        else         rst_r = {rst_r , 1’b1}; end assign     sys_rst_n = rst_r ; 通过上面三种方式处理异步信号、异步数据、以及异步复位可有效的提高系统的稳定性。减少亚稳态的产生。
  • 热度 36
    2011-1-18 20:17
    4610 次阅读|
    0 个评论
    我们在芯片设计与调试中,一定曾经遇到过一些诡异的问题。比如芯片的某一部分莫名其妙的复位却并没有故障记录、比如有的问题上下电和复位表现不一。甚至在有的 FPGA 项目后期,每一次重布局布线都是对人品的考验,祈祷在下一个版本中, Voldemort 不会出现。根本原因是多方面的,但是不难发现亚稳态和毛刺的影子。 幸运的是,这些问题难以定位但容易在设计中避免,只需我们在设计中稍加关注即可避免。任何一个成熟的团队都应该有自己的“ checklist ”。最近的一次检视中,发现一个设计可能同时受亚稳态和毛刺影响。那个有 4 年经验的工程师漫不经心的说“如果完全照教科书做,的确应该像你说的那样”。与遵守规则同样重要的是对规则的理解。 1 亚稳态 1.1 亚稳态的定义 亚稳态是指触发器无法在某个规定时间段内达到一个确定的状态。当一个触发器进入亚稳态时,该触发器的输出何时能稳定以及会稳定在哪个状态都不能确定。在达到稳定之前的时间,触发器输出一些中间电平或者处于震荡状态,并且这种无用的输出电平可以沿着信号通路上级联的触发器传播下去。 1.2 亚稳态的产生机制 如果触发器的 setup time 、 hold time 不满足,就可能产生亚稳态,此时触发器的输出端 Q 在有效时钟沿之后比较长的一段时间处于不确定的状态,这段时间称为决断时间( resolution time )。经过 resolution time 之后 Q 端将稳定到 0 或者 1 ,但究竟是 0 还是 1 和输入没有关系。 图 1 是一个处于亚稳态的寄存器的输出的例子。 1.3 亚稳态的危害与避免 亚稳态会导致逻辑误判,如果发生亚稳态的部位对系统的稳定至关重要同时缺少防错机制,则可能导致系统崩溃(逻辑挂死)。 逻辑误判可以通过特殊设计减轻危害,例如异步 fifo 的 gray 设计。比发生部位本身的逻辑误判更严重的是亚稳态传递。亚稳态传递会扩大故障面,让问题变得复杂。 在完全同步的设计中, CAD 工具可以方便的分析每一个触发器的建立保持时间。理论上一个时序完全收敛的纯同步设计不会有亚稳态问题。和有赖于时序分析的完备性,例如所使用的 timing mode 与实际芯片及其工作条件的吻合度,实际时钟抖动、偏斜与预期是否一致等。扩大时序裕量可以降低亚稳态发生的概率。 当前一个数字芯片上往往有多个时钟域,时钟域之间的异步设计是必不可少的。只要系统中存在异步设计,则亚稳态无法避免,但我们可以尽量限制亚稳态的影响范围并通过特殊的逻辑设计容忍可能的逻辑误判。 1.3.1 缩小亚稳态的影响范围 a. “将异步输出寄存器的扇出限制为 1 ”           如图 2 所示,让异步输出寄存器的扇出为 1 相当于减少了异步路径的条数。 若异步信号有多个输出 , 则可能因为路径延迟和时钟偏斜导致有的寄存器采到有效值 , 有的寄存器进入不确定的状态,如图 2 和图 3 所示。                  b. “异步信号参与逻辑运算前先同步两拍” 如图 2 所示,异步信号直接参与逻辑运算可能会导致亚稳态传递,而先将其用 2 级寄存器同步则基本可以把亚稳态限制在这 2 级寄存器内。 经过两级触发器同步,在右边的输出将是同步的,而且该输出基本不存在亚稳态。其原理是即使第一个触发器的输出端存在亚稳态,经过一个 CLK 周期后,第二个触发器 D 端的电平仍未稳定的概率非常小,因此第二个触发器 Q 端基本不会产生亚稳态。值得注意的是,这会大大降低亚稳态的发生概率但是并不是说一定不会出现,如果是关键信号,在接下来的设计中采用防错设计依然是必要的。 1.3.2 通过设计容忍逻辑误判 通过设计容忍逻辑误判的典型例子是异步 fifo 的 gray 设计。 Fifo 中 ram 的读写地址是 0 、 1 、 2… 连续的,而相邻二进制数的格雷码只相差 1bit 。也就是,对读写地址来说,任何一个时钟沿只有一个 bit 跳变,而且这 1bit 出现暂时的逻辑误判无关紧要。 图 4 是常用的将总线数据传递到异步时钟域的例子。                            2 组合逻辑毛刺 2.1 概念 毛刺是一种形象的说法,它的产生归因于组合逻辑的竞争与冒险。 竞争:在组合逻辑中,信号经由不同的路径达到某一会合点的时间有先有后,这种现象称为竞争。 冒险:由于竞争而引起电路输出发生瞬间错误现象称为冒险。表现为输出端出现了设计预期之外的窄脉冲,常称其为毛刺。 2.2 毛刺的产生机制 组合逻辑的多个输入端到达某一汇合点的时间有先后,导致组合逻辑电路的输出出现瞬间错误。图 5 是一个动态冒险的例子,即使假设线延迟为 0 ,毛刺依然存在。关于动态冒险和静态冒险本文不作详细解析。                            1.3 针对毛刺的设计 与亚稳态不同,在我们的设计中,毛刺几乎是无法避免的。不过有一点相同的是,在一个纯同步的设计中,毛刺不会带来问题。因为针对寄存器的建立保持时间的时序分析是“全路径”的。也就是说,时序分析 EDA 工具会认为组合逻辑的输出 f 在它稳定的时刻才是有效的,保证不会在组合逻辑输出 f 为毛刺时采样。 当然,这并不是说我们可以高枕无忧了。在包含异步的设计中,毛刺依然可能带来严重的问题。让我们回到文章前面那个工程师遇到的问题吧。 他需要用 3 个信号组合运算产生一个复位信号,对一个小模块复位。他的 HDL 代码可以表示为图 6 中的电路,正确的做法读者应该早已经  知道了,这里就不给出答案了。                              两个基本概念竟然啰嗦了这么长,而且它还引出了另一个同样有意思的问题,复位。又是一个基础但却非常关键的问题。
相关资源
  • 所需E币: 5
    时间: 2023-2-11 13:58
    大小: 1.17MB
    上传者: ZHUANG
    FPGA供电网络工作在亚稳态的解决方案研究
  • 所需E币: 5
    时间: 2019-12-25 16:12
    大小: 140.76KB
    上传者: 2iot
    异步FIFO结构及FPGA设计……
  • 所需E币: 3
    时间: 2019-12-25 09:56
    大小: 164.35KB
    上传者: rdg1993
    MetastableResponseIn5-VLogicCircuits……
  • 所需E币: 4
    时间: 2020-1-4 12:50
    大小: 309.85KB
    上传者: wsu_w_hotmail.com
    异步FIFO是一种不同时钟域之间传递数据的常用方法.本文提出一种新颖的异步FIFO设计方案.此方案避免了使用大量的同步寄存器,减小了芯片面积并且提高了工作频率.DC综合的结果表明,用此方法设计的FIFO性能有了显著提高.……
  • 所需E币: 4
    时间: 2020-1-4 12:52
    大小: 301.7KB
    上传者: 二不过三
    在实际工作中常常遇到由异步时钟产生亚稳态的问题.针对这个问题阐述了几种解决方案,其中异步FIFO应用更广泛.在FIFO中关键的问题是标志位的产生,提出了一种新的异步比较产生空满标志位,然后再利用锁存器实现标志位与时钟的同步,同时在Cadence的EDA平台上实现了逻辑仿真和时序仿真.异步时钟亚稳态及FIFo标志位的产生徐世伟,刘严严,刘红侠(西安电子科技大学微电子学院,陕西西安710071)摘要:在实际工作中常常遇到由异步时钟产生亚稳态的问题。针对这个问题阐述了几种解决方案,其中异步FIFO应用更广泛。在FIFO中关键的问题是标志位的产生,提出了一种新的异步比较产生空满标志位,然后再利用锁存器实现标志位与时钟的同步,同时在Cadence的EDA平台上实现了逻辑仿真和时序仿真。关键词:异步FIF0亚稳态格雷码绳解法随着信息技术的飞速发展,特别是在二十世纪90年代以后,美国在南斯拉夫战争和两次海湾战争中成功地运用了电子战、信息战,以及近年来我国在航天航空事业方面的高速发展,使我国开始重视和发展信息技术。与此同时对高速、大容量、高可靠性的静态存储器的需求越来越多,对军用的数据存储器的设计也提出了更高的要求。目前军用计算机传输数据的最快方式――DMA方式的传输速率最大也只是在5Mbps以下。对于几十Mbps的超高速采样速率,往往是上一次数据还没有被计算机读取,下一次的采集过程就结束了。因此采图1异步时钟和亚稳态用传统的计算机传输处理数据的方法,显然会造成数据步信号的概率。对于多个触发器的输出所组成的写地的丢失与混乱。所以对于快速采集,慢速处理的系统必……
  • 所需E币: 4
    时间: 2020-1-4 12:55
    大小: 185.92KB
    上传者: 978461154_qq
    提出了一种采用FPGA实现自适应同步器的设计.该同步器利用采样时钟与输入数据的周期特性,预测时钟与数据的相位关系,自适应地选择时钟上升沿或下降沿锁存,使数据变化避开时钟沿的亚稳态窗,降低出现亚稳态的概率.该同步器设计选用Xilinx公司的FPGA,应用Synplify综合工具和ISE提供的约束功能,仅用16个SLICE资源.白适应同步器的FPGA实现张国星,高俊峰(中国科学院电子学研究所,北京100080)摘要:提出了一种采用FPGA实现自适应同步器的设计。该同步器利用采样时钟与输入数据的周期特性,预测时钟与数据的相位关系,自适应地选择时钟上升沿或下降沿锁存,使数据变化避开时钟沿的亚稳态窗,降低出现亚稳态的概率。该同步器设计选用xiliIlX公司的FPGA,应用Synplify综合工具和ISE提供的约束功能,仅用16个SUCE资源。关键词:自适应同步器亚稳态FPGA在许多高速数据采集系统中,数据正确锁存是设计115MHz185MHz者必须要面对的问题。特别是在内部时钟与外部时钟采时钟l时钟一地用同一个时钟源的基于FPGA的高速数据采集系统中,由于走线延时、器件延时、FPGA输入管脚延时,导致n.GA输入数据与FPGA内部时钟的相对相位关系不确定;在时钟频率可变的情况下,相对相位关系还会随频率变化。在FPGA内部……
  • 所需E币: 5
    时间: 2020-1-4 23:18
    大小: 145.51KB
    上传者: 238112554_qq
    同步异步复位与亚稳态……
  • 所需E币: 4
    时间: 2020-1-5 21:38
    大小: 1.25MB
    上传者: 16245458_qq.com
    数字通信系统设计关注的一个主要问题是误码率(BER)。ADC噪声对系统BER的影响可以分析得出,但前提是该噪声须为高斯噪声。遗憾的是,ADC可能存在非高斯误码,简单分析根本无法预测其对BER的贡献。在数字示波器等仪表应用中,误码率也可能造成问题,尤其是当器件工作于“单发”模式时,或者当器件尝试捕获偶尔出现的瞬变脉冲时。误码可能被误解为瞬变脉冲,从而导致错误的结果。本指南介绍ADC中可能贡献误差率的基本因素,减少问题的办法,以及BER的测量方法。MT-011TUTORIAL找出那些难以琢磨、稍纵即逝的ADC闪码和亚稳状态作者:WaltKester简介数字通信系统设计关注的一个主要问题是误码率(BER)。ADC噪声对系统BER的影响可以分析得出,但前提是该噪声须为高斯噪声。遗憾的是,ADC可能存在非高斯误码,简单分析根本无法预测其对BER的贡献。在数字示波器等仪表应用中,误码率也可能造成问题,尤其是当器件工作于“单发”模式时,或者当器件尝试捕获偶尔出现的瞬变脉冲时。误码可能被误解为瞬变脉冲,从而导致错误的结果。本指南介绍ADC中可能贡献误差率的基本因素,减少问题的办法,以及BER的测量方法。闪码、误码、跳码(RABBITS)或飞码(FLYERS)随机噪声,无论来源于何处,都会产生有限概率的误差(与预期输出的偏差)。但在描述误码源之前,我们需要定义什么是ADC误差或者“闪码”(sparklecode)。在ADC之前或者内部产生的噪声可以通过传统方法进行分析。在大多数情况下,ADC噪声呈高斯分布,表现为ADC的分辨率(量化噪声)与ADC内部产生的额外噪声(折合到输入端噪声)的函数。ADC跳码指无法归因于ADC有效高斯噪声、与预期输出之间的任何偏差。图1所示为当一个低幅正弦波被施加给一个存在误码的ADC时,被夸大了的输出情况。图中未显示ADC的高斯噪声。……
  • 所需E币: 4
    时间: 2019-12-24 21:58
    大小: 794.38KB
    上传者: rdg1993
    本白皮书介绍FPGA中的压稳态,为什么会出现这一现象,它是怎样导致设计失败的。介绍怎样计算压稳态MTBF,重点是对结果造成影响的各种器件和设计参数。白皮书理解FPGA中的压稳态本白皮书介绍FPGA中的压稳态,为什么会出现这一现象,它是怎样导致设计失败的。介绍怎样计算压稳态MTBF,重点是对结果造成影响的各种器件和设计参数。引言当信号在不相关或者异步时钟域之间传送时,会出现压稳态,它是导致包括FPGA在内的数字器件系统失败的一种现象。本白皮书介绍FPGA中的压稳态,解释为什么会出现这一现象,讨论它是怎样导致设计失败的。通过计算压稳态导致的平均故障间隔时间(MTBF),设计人员知道是否应采取措施来降低这类失败的概率。本白皮书解释怎样利用各种设计和器件参数来计算MTBF,FPGA供应商和设计人员怎样提高MTBF。可以通过设计方法和优化措施来降低出现压稳态失败的概率,从而提高系统可靠性。什么是压稳态?FPGA等数字器件中的所有寄存器都有确定的信号时序要求,使每一个寄存器能够正确的采集输入数据,产生输出信号。为保证能够可靠的工作,寄存器输入必须在时钟沿之前稳定一段时间(寄存器建立时间,即tSU),在时钟沿之后也要保持稳定一段时间(寄存器保持时间,即tH)。一定的时钟至输出延时(tCO)之后,寄存器输出有效。如果信号转换不能满足寄存器的tSU或者tH要求,寄存器输出就有可能进入压稳态。在压稳态中,寄存器输出在高电平和低电平状态之间徘徊一段时间,这意味着,输出延时超出设定的tCO之后才能转换到确定的高电平或者低电平状态……