verilog 检测上升沿和下降沿的一种方法

2019-07-16 00:17发布

各位好,有个问题像大家请教一下,检测上升沿和下降沿的 ,当检测到上升沿时


out 输出1,检测到下降沿时out 输出0,用的以下的代码,
但是用逻辑分析仪查看波形如下,out 输出1延迟了两个时钟周期20ns,请问下有


没有好的代码方法让这个延迟时间短一点,测量了别人的延迟只有5ns




  1. reg sig_in0;
  2. reg sig_in1;

  3. wire rising_edge;
  4. wire falling_edge;

  5. assign  rising_edge  = ~sig_in0 &  sig_in1;
  6. assign  falling_edge =  sig_in0 & ~sig_in1;

  7. always@(posedge clk) begin
  8.       sig_in0 <= sig_in1;
  9.       sig_in1 <= mcu_sig_3 ;
  10. end

  11. always @(posedge clk)  begin
  12.        if( falling_edge_3)
  13.            out <= 0;         
  14.         else if(rising_edge_3)
  15.            out <= 1;   
  16. end
复制代码



友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
8条回答
glace12123
1楼-- · 2019-07-16 03:14
你的比较方法不对,这种边沿检测法,用的是时序电路,最小时间当然是1个时钟周期,你说的5ns,估计是组合逻辑的延时吧,这是不能比较的。
比如
always @(posedge  mcu_sig_3 or negedge rst_n)
begin
   if(!rst_n)
      out <= 0;
   else
      out <= 1;
end

这个从判断mcu_sig_3上升沿,到out输出,就快, 几ns而已,就是一个选择器的输出延时而已。。。。但这种方法没有意思,FPGA设计的边沿判断,都是采用2级寄存器打拍的方法,只要系统设计合理,不在乎那两个时钟周期。
BN冰凝
2楼-- · 2019-07-16 06:01
 精彩回答 2  元偷偷看……
lilong135984
3楼-- · 2019-07-16 09:43
你的延时肯定是两个时钟周期啊,产生rising_edge或者falling_edge需要一个时钟周期,检测它们然后产生输出由需要一个周期。
jjj0701
4楼-- · 2019-07-16 12:43
posedge 和 negedge  本身就是类似边沿检测的功能
高视
5楼-- · 2019-07-16 13:16
规范设计时,还得用时钟采样打拍
风魔小象
6楼-- · 2019-07-16 15:26
学习学习

一周热门 更多>