2016-07-08 2 views
0

serializerdeserializerの2つのモジュールを作成していますが、の出力をdeserializerの入力に接続しようとしています。 しかし、私は珍しい問題があり、私が定義した温度変数は変わらず、x値を持っています。どのような体はこれで私を助けることができますか?Verilog - 2つのモジュールを接続するワイヤのX値

これはserializer定義です:

module serializer (clk, validInput, inputData, outputData, validOutput); 

    input clk, validInput; 
    input [0:9] inputData; 
    output reg outputData; 
    output reg validOutput; 

とそこその後いくつかのコードとdeserializerは次のようになります。

module deserializer(input clk, inputBit, validInput, 
        output reg validOutput, 
        output reg [0:9] outputData); 

とコントローラのコードは次のとおりです。

module controller( input clk, validInput, 
        input [0:9] inputData, 
        output [0:9] outputData, 
        output validOutput); 
    wire tmpValid = 1, tmpData = 1; 



    deserializer dsrilz(
     .clk(clk), 
     .inputBit(tmpData), 
     .validInput(tmpValid), 
     .validOutput(validOutput), 
     .outputData(outputData)); 

    serializer srilz (
     .clk(clk), 
     .validInput(validInput), 
     .inputData(inputData), 
     .outputData(tmpData), 
     .validOutput(tmpValid)); 

endmodule 

問題は私がtmpDataからに変わるときですを最初に与えた値(controllerの値が1のときにゼロを与える)以外の値に設定すると、0以外になるとxになります。 私はそれを解決するために何をすべきか身体は知っていますか?

答えて

1

wire tmpValid = 1, tmpData = 1;は、ネットを初期化しません。連続割り当てを適用します。

wireは、複数のドライバを持つことができます。ドライバが競合するデータ(少なくとも1つのドライバと1つのドライバ)を送信すると、ネットはXになります。

シンプルなソリューション。変更wire tmpValid = 1, tmpData = 1;からwire tmpValid, tmpData;

1

私が正しく理解していれば、(outputDataポートから)シリアライザからtmpDataを駆動していますが、コントローラ内部でtmpData信号も初期化しています。言い換えれば、同じ強さの複数のドライバーを作成していますが、両方とも1を駆動している間に1に解決されますが、逆の値を駆動しているときにはxに解決されます。

シリアライザ内でoutputDataとvalidOutputを初期化し、tmpValidまたはtmpDataの初期値をコントローラに与えないでください。

wire tmpValid, tmpData; 
関連する問題