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

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

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

Posedge用来作为时钟使用的。相当于触发器的时钟输入端。

要检测信号上升沿的话,可以采用以下方法:
always@(posedge clk or negedge rst)
if(!rst)
begin sign_1b <= 1'b0; sign_2b <= 1'b0; end
else
begin sign_1b <= sign; sign_2b <= sign_1b; end

always@(posedge clk or negedge rst)
if(!rst)
sign_pos <= 1'b0;
else if (sign_2b && !sign_1b)
sign_pos <= 1'b1;
else
sign_pos <= 1'b0;
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2016-06-12
Posedge用来作为时钟使用的。相当于触发器的时钟输入端。

要检测信号上升沿的话,可以采用以下方法:
always@(posedge clk or negedge rst)
if(!rst)
begin sign_1b <= 1'b0; sign_2b <= 1'b0; end
else
begin sign_1b <= sign; sign_2b <= sign_1b; end

always@(posedge clk or negedge rst)
if(!rst)
sign_pos <= 1'b0;
else if (sign_2b && !sign_1b)
sign_pos <= 1'b1;
else
sign_pos <= 1'b0;
第2个回答  2018-11-19
答:
  如果你是有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

相似回答