【发布时间】:2018-09-30 06:38:53
【问题描述】:
我做了一个计数器模块,我似乎无法掌握计数器模块和测试台模块的初始块的执行顺序。
据我所知,我认为在verilog中,总是会先执行初始块。
在这种情况下,我将执行 testbench 模块并假设 initial 块
对于testbench_counter 将首先执行。
接下来,我认为计数器模块C 将被执行,x_in 的值将更新为temp,而无需#1 模块C 中的延迟。
但是没有#1,或者将initial 更改为always@(x_in) 我看到redline。
所以问题是
计数器模块
C的initial块是否会在测试台的initial块之前首先执行?如果我使用
always@(x_in),为什么它会起作用?
提前致谢。
计数器代码
`timescale 1ns/1ns
module counter(x_in,clk,y_out);
input [31:0] x_in;
input clk;
output [31:0] y_out;
reg [31:0] y_out;
reg [31:0] temp;
initial begin
#1 temp=x_in;
end
always@(posedge clk) begin
temp<=temp+1;
y_out<=temp;
end
endmodule
测试台代码
`timescale 1ns/1ns
module testbench_conter();
wire [31:0]y_out;
wire [31:0]temp;
reg [31:0]x_in;
reg clk;
counter C(x_in,clk,y_out);
always begin
#5 clk=~clk;
end
initial begin
clk=1'b0;
x_in=32'd0;
#0
#10000
$stop;
end
endmodule
【问题讨论】:
标签: verilog