信号处理结构模块的意外输出

时间:2016-12-07 15:32:07

标签: verilog hdl

承担此问题我从Verilog代码中获得了X(未知值)的意外输出。

如果有人能告诉我出错的地方,请附上代码,我将不胜感激。

  

问题

enter image description here

  

模块代码

// 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

1 个答案:

答案 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