如何创建正边缘检测器行为代码? [英] How to create positive edge detector behavioural code?
本文介绍了如何创建正边缘检测器行为代码?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
我目前正在尝试编写一个正边缘检测器,它会在每次检测到正边缘时更改其输出。我用门级建模成功地构建了一个,但现在我需要使用行为建模来构建它。我试着用这个地基建造它:
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屋!
查看全文