我是靠谱客的博主 呆萌热狗,最近开发中收集的这篇文章主要介绍Verilog设计(四):边沿检测时序分析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

 

最后

以上就是呆萌热狗为你收集整理的Verilog设计(四):边沿检测时序分析Verilog实现的全部内容,希望文章能够帮你解决Verilog设计(四):边沿检测时序分析Verilog实现所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(46)

评论列表共有 0 条评论

立即
投稿
返回
顶部