承担此问题我从Verilog代码中获得了X(未知值)的意外输出。
如果有人能告诉我出错的地方,请附上代码,我将不胜感激。
问题
模块代码
// Signal processing structure
module sps(in1,clk,rst,out1);
input clk,rst;
input signed [19:0] in1;
output reg signed [19:0] out1;
reg signed [19:0] w,w1;
always @(in1 or w or w1) begin
w <= in1 + w1;
out1 <= w + ~w1;
end
always @(posedge clk) begin
if(~rst)
w <= 0;
else begin
w1 <= w;
end
end
endmodule
testbench代码
// test sps
module testSps;
reg clk,rst;
reg [19:0] in1;
wire [19:0] out1;
sps sps1(in1,clk,rst,out1);
initial
begin
rst = 0;
clk = 0;
in1 = 20'b0000000000000000001;
#5 rst = 1;
#50 $stop;
end
always
#5 clk = ~clk;
endmodule
答案 0 :(得分:0)
您的设计中几乎没有观察到测试平台代码。
您尚未在测试平台中初始化clk
信号。请在测试平台的初始块的开头添加clk = 0
。
以下always
块看起来像是自我更新循环。因为w
位于敏感度列表中,并且正在块中更新。
always @(in1 or w or w1) begin
w <= in1 + w1;
out1 <= w + ~w1;
end
w
通过多个始终阻止来驱动。网应该只通过单个始终块来驱动。您可以将两个始终阻止组合以驱动w
,如下所示。您可能希望在第二个始终阻止中将w1
设置为0
。