サイト内検索

こんにちは。

マクニカでインテル® FPGA 製品の技術サポートをしている インテル・F・ハナコ です。

 

論理回路においてレジスタを作成しても、Quartus® Prime でコンパイルすると最適化によりマージされ削除されてしまうことがあります。

これは Quartus Prime のコンパイラが積極的にリソースの最小化をしながら 無駄なリソースを削減した結果なので、基本的には良いことです♪

 

★ コンパイラの最適化により、削除やマージされたレジスタ情報の確認方法は

  こちらのページ の "削除やマージされたレジスタ情報の確認方法" を参照してください。

 

でもユーザーさんによっては、”最適化で削除されたレジスタをあえて残したい“ 状況や理由があったりします。

例えば…、(こちらをご覧ください。)

 

以前ご紹介した方法は、Quartus Prime のロジック・オプションを活用する方法 を紹介しました。

今回は、これらのオプションを HDL コードに直接アトリビュートとして埋め込む方法を紹介したいと思います。

適用するオプションは?

ここで使用するロジック・オプションは以下です。

 

Disable Register Merging オプション / Preserve Registers オプション / Preserve Fan-out Free Register Node オプション

 

そして、これらの使い分けポイントは、レジスタの信号が最終的にデバイスの出力ピンに影響(出力)しているかどうか です。

レジスタの信号がデバイスの出力ピンに対して…

レジスタを保持するために使用するオプション名

(Assignment Name)

影響している (出力されている)

Disable Register Merging

または Preserve Registers

影響していない (出力されていない)

Preserve Fan-out Free Register Node

アトリビュートの記述方法

例として、保持する対象のレジスタ名を my_reg とします。

Disable Register Merging オプション

VHDL

	signal my_reg : std_logic;
	attribute dont_merge : boolean;
	attribute dont_merge of my_reg : signal is true;

Verilog HDL

	reg my_reg /* synthesis dont_merge */;

Verilog-2001 / SystemVerilog

	(* dont_merge *) reg my_reg;

Preserve Registers オプション

VHDL

	signal my_reg : std_logic;
	attribute preserve : boolean;
	attribute preserve of my_reg : signal is true;

Verilog HDL※1

	reg my_reg /* synthesis preserve = 1 */;

Verilog-2001※1

	 (* preserve = 1 *) reg my_reg;

Notes (1)

・ preserve の後の “= 1” は省略することも可能です。

・ preserve は、他メーカーの合成ツールが適用する syn_preserve に換えても対応可能です。(互換あり)

Preserve Fan-out Free Register Node オプション

VHDL

	 signal my_reg: std_logic;
	 attribute noprune: boolean;
	 attribute noprune of my_reg: signal is true;

Verilog HDL※2

	 reg my_reg /* synthesis noprune = 1 */;

Verilog-2001 / SystemVerilog※2

	 (* noprune *) reg my_reg;

Notes (2)

・ syn_noprune の後の “= 1” は省略することも可能です。

・ syn_noprune は、他メーカーの合成ツールが適用する syn_noprune に換えても対応可能です。(互換あり)

 

 

以上、コンパイルで削除されたレジスタを保持する方法でした。

必要に応じてご利用ください。

 

なお HDL コードに直接オプションを埋め込む方法ではなく、Quartus Prime の Assignment Editor によりロジック・オプションで設定する方法は、こちらのページをご覧ください。

 

 

参考: Quartus Prime のオンラインヘルプ

Disable Register Merging オプション

Preserve Registers オプション

Preserve Fan-out Free Register Node オプション

おすすめ記事/資料はこちら

コンパイルで削除されたレジスタを保持する方法 (ロジック・オプション編)