电子元器件论坛
直播中

五斤麻辣油

8年用户 1261经验值
擅长:电源/新能源
私信 关注

使用Verilog如何设计一个上升沿检测器呢?

设计一个模块:当输入信号端(位宽1位)出现上升沿跳变时,执行相应操作?请问该如何实现检测该上升沿检测?

疑问1:可以使用posedge+端口名称来实现上升沿检测吗?我看了好多程序中posedge后面都跟的是时钟?

回帖(1)

哔哔哔-

2023-5-10 10:39:44
答:
  如果你是有clk的同步时序电路,那么不允许使用posedge + 端口名称的方式来生成边沿检测
电路。

  所谓边沿检测就是对前一个clock状态和目前clock状态的比较,如果是由0变为1,能够检测
到上升沿,则称为上升沿检测电路(posedge edge detection circuit),若是由1变为0,能够
检测到下降沿,则被称为下降沿检测电路(negedge edge dttection circuit),能够同时检测
上升沿与下降沿的电路称为双沿检测电路(double edge detection)。

照这个原理,下面的代码是一个上升沿检测电路,巧妙运用了非阻塞赋值自动产生寄存器的
特性。下降沿检测电路只需把 pedge <= in & ~d_last; 改为 pedge <= ~in & d_last;
即可。双沿检测电路只需把 pedge <= in & ~d_last; 改为 pedge <= in ^ d_last;
(异或)即可。

module top_module(
       input clk,
       input [7:0] in,
       output reg [7:0] pedge);
      
       reg [7:0] d_last;     
                     
       always @(posedge clk) begin
         d_last <= in; // 保存上一个状态
         pedge <= in & ~d_last; //in的数据变化后有上升沿时,pedge变1
       end
      
endmodule
举报

更多回帖

发帖
×
20
完善资料,
赚取积分