如何创建正边缘检测器行为代码? [英] How to create positive edge detector behavioural code?

查看:5
本文介绍了如何创建正边缘检测器行为代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我目前正在尝试编写一个正边缘检测器,它会在每次检测到正边缘时更改其输出。我用门级建模成功地构建了一个,但现在我需要使用行为建模来构建它。我试着用这个地基建造它:

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

编译时,返回以下错误

错误:C:/Modeltech_pe_edu_10.4a/Examples/Pos Edge Detect。v(8):(vlog-2110)对网络的非法引用。

此错误意味着什么,以及如何正确使用always代码来检测输入脉冲和时钟脉冲上的正沿?

推荐答案

该错误意味着当您在always块中为out赋值时,不能将out声明为wire。您需要将out声明为reg。我在edaplayround上发布了您的模块,并在几个模拟器上对其进行了编译,其中一个模拟器产生了稍微具体一点的错误消息:

Out在此声明为Wire。

至少这会提示您使用wire有问题。

该行还有一个问题:

always @ (posedge in, posedge clk)

不会合成成触发器。

我认为您正在寻找一个模块,该模块将检测sig上的后沿并生成输出pe,该输出将是单时钟宽度脉冲,并且还将生成一个输出out,该输出将在每次看到sig上的后沿时切换。我假设您的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

这篇关于如何创建正边缘检测器行为代码?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆