
こんにちは。
マクニカでインテル® FPGA 製品の技術サポートをしている インテル・F・ハナコ です。
論理回路においてレジスタを作成しても、Quartus® Prime でコンパイルすると最適化によりマージされ削除されてしまうことがあります。
これは Quartus Prime のコンパイラが積極的にリソースの最小化をしながら 無駄なリソースを削減した結果なので、基本的には良いことです♪
★ コンパイラの最適化により、削除やマージされたレジスタ情報の確認方法は こちらをクリック。
でもユーザーさんによっては、”最適化で削除されたレジスタをあえて残したい“ 状況や理由があったりします。
例えば、
・ 自作した複製レジスタを残したい (オプションやタイミング制約の設定に関係するため、など)

あるいは
・ 下位モジュールの未使用ポートに接続されたレジスタを残したい (設計途中におけるデバッグ目的、など)

などなど、状況や理由は様々です。
そんなときは、Quartus Prime で ロジック・オプション を使ってください。
ロジック・オプションの設定方法
ここで使用するロジック・オプションは以下です。
[A] Disable Register Merging オプション = On か Preserve Registers オプション = On
または
[B] Preserve Fan-out Free Register Node オプション = On
いずれも、Assignment Editor で目的のレジスタに対してセットします。

そして、この[A]、[B]の使い分けポイントは、レジスタの信号が最終的にデバイスの出力ピンに影響(出力)しているかどうか です。
レジスタの信号がデバイスの出力ピンに対して… |
レジスタを保持するために使用するオプション名 (Assignment Name) |
設定値 (Value) |
影響している (出力されている) |
[A] Disable Register Merging または Preserve Registers |
On |
影響していない (出力されていない) | [B] Preserve Fan-out Free Register Node |
On |
また、いずれもコンパイルより削除されたノードであるため、Assignment Editor でノード(To 欄)を選出する際には、Node Finder の Filter において “Registers: pre-synthesis” を選択すると見つけられます。(Named 欄にキーワード+ワイルドカードを入力すれば、さらにヒット率アップ!)

その後、Assignment Editor の Assignment Name 欄にオプション名を選択し、Value に設定値を選択すれば OK です。
削除やマージされたレジスタ情報の確認方法
Quartus Prime のコンパイラにより削除あるいはマージされたレジスタは、下記のコンパイル・レポートで確認できます。
削除された理由もわかりますよ。
コンパイル・レポート内 Analysis & Synthesis フォルダ > Optimization Results フォルダ > Register Statistics フォルダ > Registers Removed During Synthesis

以上、コンパイルで削除されたレジスタを保持する方法でした。
必要に応じてご利用ください。
なお ロジック・オプションではなく、HDL コードに直接オプションを埋め込む方法は、こちらのページをご覧ください。
参考: Quartus Prime のオンラインヘルプ
・Disable Register Merging オプション
・Preserve Fan-out Free Register Node オプション