Vivado WARNING:Multi-driven net Q with xth driver pin警告の原因と解消方法
649 ワード
この警告の原因は簡単です.多くは、次のような腐ったコードを作成しています.
以上から、変数aはalwaysブロックにまたがって現れ、すなわち2つ以上のaywaysブロックに現れていることがわかる.これでこの警告が表示されます.本や文献を読むときは、そう書かないことを強くお勧めします.1つのレジスタクラス変数の付与値(等号左値)は、1つのalwaysブロックにのみ表示され、等号右値として複数のalwaysブロックにまたがることができます.
除去の方法は簡単で、1つのalwaysブロック内の衝突変数の付与のみを保持することです.もしあなたの設計が2つのalwaysブロックに現れなければならないと思ったら、一般的にあなたの設計に不合理な点があることを説明します.ネット上には確かにalwaysブロックにまたがる衝突の解決策があるが、奇抜で徹底していないような気がする.
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ブロックにまたがる衝突の解決策があるが、奇抜で徹底していないような気がする.