Verilog设计-边沿检测

一、基本类型

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

二、设计思路

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

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

Verilog设计-边沿检测_第1张图片

图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个寄存器资源的边沿检测电路。

你可能感兴趣的:(Verilog设计,fpga开发,硬件工程)