AR# 53546

Vivado 2012.x、Vivado 合成 - KEEP または syn_keep 属性を含むマルチビット レジスタが 3 つ以上のプロセスまたは always ブロック文にビット スライスで割り当てられると、Vivado 合成が複数のドライバーを生成する

説明

KEEP または syn_keep 属性を含むマルチビット レジスタが 3 つ以上のプロセスまたは always ブロック文にビット スライスで割り当てられると、Vivado 合成で複数のドライバーが生成されます。

これはなぜですか。

ソリューション

この問題の詳細は次のとおりです。

たとえば、ある HDL コードで 3 ビット レジスタ arst_d に KEEP または syn_keep 属性が継承されているとします。これは 3 つ以上のプロセスまたは always ブロック文にビット スライスの形で割り当てられています。Vivado 合成では次のようなマルチドライバーに関するクリティカル警告メッセージが表示されます。

CRITICAL WARNING: [Synth 8-3352] multi-driven net \u_fpga/u_proj/eth_switch_ctrl.u_glbl_rst_gp_reg_clk/arst_d [0] with 1st driver pin '\u_fpga/u_proj/eth_switch_ctrl.u_glbl_rst_gp_reg_clk/arst_d_reg[0]__0 /Q'

CRITICAL WARNING: [Synth 8-3352] multi-driven net \u_fpga/u_proj/eth_switch_ctrl.u_glbl_rst_gp_reg_clk/arst_d [0] with 2nd driver pin '\u_fpga/u_proj/eth_switch_ctrl.u_glbl_rst_gp_reg_clk/arst_d_reg[0] /Q'

この警告メッセージが表示されるのは、3 ビット レジスタ上の KEEP または syn_keep 属性が 3 つ以上のプロセスにビット スライスの形で割り当てられているため、このレジスタに対し解析を実行できなくなっているからです。これはマルチドライバーの状況になってしまっています。

この問題を回避するには、KEEP または syn_keep 属性をこのコードから削除します。これで複数ドライバーの競合を解決でき、このクリティカル警告メッセージは表示されなくなります。また、このコードを 1 つのプロセスまたは always ブロックに書き直すと複数のドライバーが生成されなくなります。これも回避策として利用できます。

この問題は 2013.1 VIvado 合成で修正されています。これらのクリティカル警告メッセージは生成されなくなっています。

AR# 53546
日付 06/21/2013
ステータス アクティブ
種類 既知の問題
ツール