我的2x4解码器代码:
`timescale 1ns/100ps
module decoder(in,out);
input [1:0]in;
output [3:0]out;
reg [3:0]out;
always@(in)
begin
case(in)
2'b00:out = 4'b0001;
2'b01:out = 4'b0010;
2'b10:out = 4'b0100;
2'b11:out = 4'b1000;
default:out = 4'b1111;
endcase
end
endmodule
// **我已经编写了2x4解码器和测试平台的行为代码。我在输出中看到的只是它向我显示输出为11 ...这是0011.我希望看到输出随着输入的变化而不断变化。
can any body show my mistake ??**
一段代码//
`timescale 1ns / 100ps
module decoder_t;
reg [1:0]in;
wire [3:0] out;
decoder decoder1 ( .in(in),.out(out) );
initial
begin
#10 in=2'b00;
#10 in=2'b01;
#10 in=2'b10;
#10 in=2'b11;
#10 $stop;
end
endmodule
答案 0 :(得分:2)
Verilog按预期运行。最佳猜测是用户在in
而不是之前观察out
和$stop
的值。我的建议是添加$monitor
语句来报告值更改。
例如,在$monitor("%t: in:%b out:%b", $realtime, in, out);
之前的#10 in=2'b00;
添加 0: in:xx out:xxxx
100: in:00 out:0001
200: in:01 out:0010
300: in:10 out:0100
400: in:11 out:1000
。然后日志文件将包含以下内容:
$dumpfile("dump.vcd"); $dumpvars;
更新:波形转储
假设您正在转储到所有版本的IEEE Std 1364和IEEE Std 1800中定义的标准值更改转储(VCD)文件。在驱动刺激之前添加#10 in=2'b00;
(即$dump*
之前)。请参阅IEEE Std 1364-1995第15节(第18节,更新版本的IEEE 1364)或IEEE Std 1800-2012 (available for free from IEEE)第21.7节,以查看所有$dumpvars
系统任务的使用情况。
如果您使用其他工具生成波形,请参阅手册。在推动刺激之前需要调用系统任务的可能性的97%,就像$monitor.
和{{1}}