FPGA设计中对输入信号的处理

1.输入信号为什么要寄存

一般来说,在全同步设计中,如果信号来自同一时钟域,各模块的输入不需要寄存。只要满足建立时间,保持时间的约束,可以保证在时钟上升沿到来时,输入信号已经稳定,可以采样得到正确的值。但是如果模块需要使用输入信号的跳变沿(比如帧同步信号),千万不要直接这样哦。

always @ (posedge inputs)
begin
...
end

2.所有信号都需要寄存两拍吗

如果这个输入信号来自异步时钟域(比如FPGA芯片外部的输入),必须寄存两拍。第一拍将输入信号同步化,同步化后的输出可能带来建立/保持时间的冲突,产生亚稳态。需要再寄存一拍,减少(注意是减少)亚稳态带来的影响。

如果这个输入信号来自于同一时钟域且需要用到跳变沿,需要寄存一拍。否则时序报告多半会报clock skew > data delay,造成建立/保持时间的冲突。

总而言之,五条原则:

1.全局时钟的跳变沿最可靠。
2.来自异步时钟域的输入需要寄存一次以同步化,再寄存一次以减少亚稳态带来的影响。
3.不需要用到跳变沿的来自同一时钟域的输入,没有必要对信号进行寄存。
4.需要用到跳变沿的来自同一时钟域的输入,寄存一次即可。
5.需要用到跳变沿的来自不同时钟域的输入,需要用到3个触发器,前两个用以同步,第3个触发器的输出和第2个的输出经过逻辑门来判断跳变沿。

给出一个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;
inputs_reg3 <= inputs_reg2;
if (inputs_reg2 == 1'b1 && inputs_reg3 == 1'b0)
begin
...
end
...
end

FPGA设计中对输入信号的处理_设计制作_测量仪表
73
30
0
97

相关资讯

  1. 1、《西虹市首富》没上映就惹众怒!影迷:不能为效果去侮辱球队!3953
  2. 2、2021贺岁片,它是第一爆款3825
  3. 3、7部喜剧片扎堆的2019春节档,谁才是真正的喜剧之王?3792
  4. 4、充沛到爆的人情味,是否会成为纪录片的下一个着力点?630
  5. 5、《司藤》白英是谁?她和司藤是什么关系?秦放的身世之谜被揭开997
  6. 6、杨坤队员起底:台上苦情又落泪台下专业又炒作1269
  7. 7、《八零九零》:幽默、温暖、治愈,年轻人视角下的养老故事真好看266
  8. 8、《正义联盟》导剪版提前一周上映3月18日在HBOmax播出3945
  9. 9、冯小刚不理解《战狼2》的票房,周星驰道出了其中的真相2280
  10. 10、曾因《天外飞仙》大红,因婚姻不幸患上抑郁症,如今发福变油腻!572
全部评论(0)
我也有话说
0
收藏
点赞
顶部