Verilog设计-边沿检测

一、基本类型

边沿检测的类型包括上升沿检测,下降沿检测,以及对上升沿和下降沿都进行检测。

二、设计思路

边沿检测功能简单,信号也不复杂,因此可以用真值表加卡诺图化简的方法进行设计。

表2-1 边沿检测真值表
上一拍(a)当前拍 (b)上升沿输出值(f1)下降沿输出值(f2)边沿输出值(f3)
00000
01101
10010
11001

图2-1 边沿检测卡诺图化简

三、veriog设计

module edgedetect(
    input  clk,
    input  rst_n,
    input  data_in,
    output posedge_detect,
    output negedge_detect,
    output edge_detect);

/* 写法1
reg a,b;

always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
        a <= 1'b0;
    else
        a <= data_in;
end

always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
        b <= 1'b0;
    else
        b <= a;
end

assign posedge_detect = ~a & b;
assign negedge_detect = a & ~b;
assign edge_detect  = a ^ b; 
*/

//写法2
reg [1:0] D;

always@(posedge clk or negedge rst_n) begin
    if(!rst_n)
        D <= 2'b0;
    else
        D <= {D0, data_in};
end

assign posedge_detect = ~DO & D1;
assign negedge_detect = D0 & ~D1;
assign edge_detect  = D0 ^ D1;

endmodule

上述写法1中用到了两个1位寄存器,写法2中用到了个两位的寄存器,两者用到的寄存器资源相同。此外还有一种只用1个寄存器的方法,就是将数据只打一拍,将打拍过的值与新传来的值进行同样的逻辑操作,便可得到只用1个寄存器资源的边沿检测电路。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值