2016-03-31 10 views
0

結果をチェックしてフラグを設定する単純な8ビットパリティチェックモジュールがあります。値が割り当てられても、Verilogモジュールの出力はXです。

このモジュールの出力は常にXですが、私の人生の理由は分かりません。ここでは、コードは次のようになります。

module parity8 (p, low8); 

    output p; 
    input [7:0] low8; 

    wire [3:0] pchka; 
    wire [1:0] pchkb; 
    wire parity_bar; 

    xor2$ xora0 (pchka[0], low8[0], low8[1]), 
     xora1 (pchka[1], low8[2], low8[3]), 
     xora2 (pchka[2], low8[4], low8[5]), 
     xora3 (pchka[3], low8[6], low8[7]), 

     xorb0 (pchkb[0], pchka[0], pchka[1]), 
     xorb1 (pchkb[1], pchka[2], pchka[3]), 

     xorp (parity_bar, pchkb[0], pchkb[1]); 

    inv1$ pinv (p, parity_bar); 

endmodule 

parity_barは常に正しい値を持っている、と私は最後の行にPを交換し、別のワイヤPTESTを、作ってみました。 PTESTは、正しい値を有していたので、私は、追加しようとした:

assign p = ptest; 

をさらにモジュールの出力は、依然としてXであっても、P = 1'b1のを割り当てる試みました。それは変わらなかった。うまくいけば、これは何か明白ではありません、あなたの助けをありがとう。

+0

他のモジュールの 'p'に別のドライバがあり、テストベンチの' reg'として定義されているように聞こえます。サブモジュールの出力はワイヤタイプに接続し、他のドライバは使用しないでください。 – Greg

+0

それかもしれません。パリティ8を呼び出すモジュールでは、フラグベクトルを0(非常に新しいverilog)に初期化する最良の方法がわからなかったので、私はしました: assign flags = 32'b0; これは問題ではないと思った理由は、フラグを計算して別のビットを駆動するために同様のタスクを実行する他のモジュールがあることです。彼らはうまく動作します。とにかく、私はそのビットにドライバを取り出して、それが動作するかどうか知ってもらうよ。ありがとう – Xionraseri

+0

テストベンチのコードを追加することはできますか? –

答えて

0

Gregが指摘しているように、問題はpがすべての0を割り当てられたビットベクトルで少し動いていることでした。同じビットベクトルでビットを駆動するモジュールがいくつかあるので、私はこれを却下しました。私は、割り当て値とモジュールによって生成された値が同じでない場合にのみ問題が発生すると考えています。

関連する問題