2016-12-07 11 views
-1

この問題は、私のVerilogコードからX(Unknown Value)の予期せぬ出力が発生しています。信号処理構造モジュールの予期しない出力

誰かが私に間違っている場所を教えてもらえれば分かりますが、コードが添付されています。

問題

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 

テストベンチ・コード

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

2つの別個の常時ブロックに「w」を割り当てないでください。また、第1のalwaysブロックで非ブロック(<=)割り当てを使用しないでください。 – toolic

+0

@toolicに感謝していただきありがとうございます。なぜこれが当てはまるのかを指定する質問への回答はありますか?私は何が起こっているのかをもっと理解するためにこれを望みます! –

答えて

0

&テストベンチコードではほとんど観察されません。

  • clk信号は、テストベンチで初期化されていません。テストベンチの最初のブロックの先頭にclk = 0を追加してください。

  • 以下のalwaysブロックは私にとっては自己更新ループに見えます。感度リストにはwがあり、ブロック内でも更新されています。

    always @(in1 or w or w1) begin 
        w <= in1 + w1; 
        out1 <= w + ~w1; 
    end 
    
  • wは、複数の常時ブロックによって駆動される。ネットは単一の常時ブロックのみで駆動する必要があります。両方の常時ブロックを結合して、wを以下のように駆動することができます。 2番目の常時ブロックのw10に設定することができますか?

関連する問題