访问电脑版页面

导航:老古开发网手机版其他

FPGA设计中对输入信号寄存的研究(转)

导读:
关键字:
1.输入信号为什么要寄存
      一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。
      always @ (posedge inputs)
            begin
                     ...
            end
 
      2.所有信号都需要寄存两拍吗
      如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),必须寄存两拍。第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。
     
      如果这个输入信号来自于同一时钟域且需要用到跳变沿,需要寄存一拍。否则时序报告多半会报clock skew > data delay,造成建立/保持时间的冲突。
 
      总而言之,三条原则:
      1.全局时钟的跳变沿最可靠。
      2.来自异步时钟域的输入需要寄存一次以同步化,再寄存一次以减少亚稳态带来的影响。
      3.不需要用到跳变沿的来自同一时钟域的输入,没有必要对信号进行寄存。
      4.需要用到跳变沿的来自同一时钟域的输入,寄存一次即可。
 
      给出一个verilog模板:
      always @ (posedge Clk)           //不对输入信号进行寄存
      begin
            if (inputs)
            begin
                 ...
            end
            ...
      end
 
      always @ (posedge Clk)          //对输入信号寄存一拍
      begin
            inputs_reg <= inputs;
            if (inputs_reg == 1''b0 && inputs == 1''b1)
            begin
                 ...
           end
           ...
      end
 
      always @ (posedge Clk)         //对输入信号寄存两拍
      begin
            inputs_reg1 <= inputs;
            inputs_reg2 <= inputs_reg1;
            if (inputs_reg1 == 1''b1 && inputs_reg2 == 1''b0)
            begin
                 ...
            end
            ...
      end
来源:   作者:  2006/9/25 16:50:53
栏目: [ ]

相关阅读

安森美推出新的高功率图腾柱PFC控制器,满足具挑战的能效标准

动态功耗低至60μA/MHz!助力设备超长续航,首选国民技术低功耗MCU!