Verilog设计(四):边沿检测

关于边沿检测,应该很容易想要时钟的边沿,一般情况下,可以很容易得到时钟的上升沿。对于时序逻辑中,常用触发器进行设计,其时钟端cp就是边沿敏感的。在同步设计中,我们以时钟的上升沿作为参考,这时候要是想要得到另外一个信号的上升沿怎么办呢?

边沿检测应该verilog设计或说数字电路设计中很基础且很常用的设计,比如启动信号的检测、数据有效信号的检测、将边沿信号转成脉冲信号等等(这里的边沿检测),反正就是很基础很常用。

时序分析

  设计的时候,一般是先有时序。要检测dat_i信号的边沿,首先会将dat_i进行打拍,先打一拍进行本地同步,在再打一拍用于逻辑运算生成脉冲。这里打2拍一般就够了,也有三拍处理的,再多也没必要。

图1:信号打拍

上升沿检测:对data_r[1]取反得到~data_r[1],然后与data_r[0]相或即可得到pos_edge上升沿脉冲。

图2:上升沿检测脉冲

下降沿检测:

 

图3:下降沿检测脉冲
图4:信号沿脉冲

 

Verilog实现

module Edge_Detect(
                clk_i    
              , rst_n_i
              , dat_i
              , pos_edge
              , neg_edge
              , data_edge
);

input       clk_i    ;
input       rst_n_i  ;
input       dat_i    ;
output reg  pos_edge ;
output reg  neg_edge ;
output reg  data_edge;

//相当于对dat_i 打两拍, data_r[0] data_r[1]
always @(posedge clk or negedge rst_n)
begin
    if(rst_n == 1'b0)begin
         data_r <= 2'b00;
    end
    else begin
         data_r <= {data_r[0], dat_i};
    end
end

assign  pos_edge = ~data_r[1] & data_r[0];  //上升沿
assign  neg_edge = data_r[1] & ~data_r[0];  //下降沿
assign  data_edge = pos_edge | neg_edge;    //数据沿

endmodule

 

  • 18
    点赞
  • 112
    收藏
    觉得还不错? 一键收藏
  • 8
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值