正边缘检测器Verilog行为代码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了正边缘检测器Verilog行为代码相关的知识,希望对你有一定的参考价值。

我目前正在尝试编写一个上升沿检测器,每次检测到上升沿时都会更改其输出。我成功地使用门级建模来构建一个,但是现在我需要使用行为建模来构建它。我尝试使用此基础构建它:

module pos_edge_det ( input sig,           
                      input clk,            
                      output pe);          

    reg   sig_dly;                         


  always @ (posedge clk) begin
    sig_dly <= sig;
  end

  assign pe = sig & ~sig_dly;            
endmodule 

所以,我尝试编写一个代码,使其在输入上检测到的每个上升沿中,输出总是反转

module posedgedet(in, out, clk, res);
input wire in,clk,res;
output wire out;

always @ (posedge in, posedge clk)
begin
out <= ~out;
end

endmodule

编译时,它返回以下错误

** Error: C:/Modeltech_pe_edu_10.4a/examples/pos edge detect.v(8): (vlog-2110) Illegal reference to net "out".

此错误是什么意思,以及您如何正确地使用Always码来检测输入和时钟脉冲的上升沿?

答案

该错误表示在out块中分配wire时无法将其声明为always。您需要将out声明为reg

此行也有问题:

always @ (posedge in, posedge clk)

不会被合成为触发器。

[我认为您正在寻找一个模块,该模块将检测sig上的posege并生成输出pe,该输出将是一个单时钟宽度的脉冲,并且还会生成一个输出out,该输出将在每次sig上的posege时切换被看到。我假设您的res信号已重置。

module pos_edge_det (
    input sig,           
    input clk,            
    input res,            
    output pe,
    output reg out
);          

    reg sig_dly;                         

    always @ (posedge clk or posedge res) begin
        if (res) begin
            sig_dly <= 0;
        end else begin
            sig_dly <= sig;
        end
    end

    assign pe = sig & ~sig_dly;            

    always @ (posedge clk or posedge res) begin
        if (res) begin
            out <= 0;
        end else if (pe) begin
            out <= ~out;
        end
    end
endmodule 


module tb;

reg clk, res, sig;
wire pe, out;

initial begin
    clk = 0;
    forever #5 clk =~clk;
end

pos_edge_det dut (
        // Inputs:
    .clk  (clk),
    .res  (res),
    .sig  (sig),
        // Outputs:
    .out  (out),
    .pe   (pe)
);

initial begin
    sig = 0;
    res = 1;
    #20 res = 0;
    repeat (10) #30 sig = ~sig;
    #5 $finish;
end

endmodule

以上是关于正边缘检测器Verilog行为代码的主要内容,如果未能解决你的问题,请参考以下文章

在Verilog中进行信号边缘检测的正确方法

verilog hdl中有了posedge和negedge为啥还要用脉冲边沿检测?。

三帧差,边缘检测,FPGA基于FPGA的三帧差+边缘检测的Verilog实现

Notepad++编辑器——Verilog代码片段直接编译

12mmaction2 行为识别商用级别X3D复现 demo实现 检测自己的视频 Expanding Architecturesfor Efficient Video Recognition(代码片段

序列检测器(两种设计方法和四种检测模式|verilog代码|Testbench|仿真结果)