Vivado WARNING:Multi-driven net Q with xth driver pin警告の原因と解消方法

649 ワード

この警告の原因は簡単です.多くは、次のような腐ったコードを作成しています.
reg a;

wire c,d;

always@(posedge clk, posedge rst)

begin

    if(rst)

        a<=0;

   else

        a<=1;

end

always@(posedge clk, posedge rst)

begin

    if(rst)

        a<=0;

   else

        a<=c^d;

end

以上から、変数aはalwaysブロックにまたがって現れ、すなわち2つ以上のaywaysブロックに現れていることがわかる.これでこの警告が表示されます.本や文献を読むときは、そう書かないことを強くお勧めします.1つのレジスタクラス変数の付与値(等号左値)は、1つのalwaysブロックにのみ表示され、等号右値として複数のalwaysブロックにまたがることができます.
除去の方法は簡単で、1つのalwaysブロック内の衝突変数の付与のみを保持することです.もしあなたの設計が2つのalwaysブロックに現れなければならないと思ったら、一般的にあなたの設計に不合理な点があることを説明します.ネット上には確かにalwaysブロックにまたがる衝突の解決策があるが、奇抜で徹底していないような気がする.