補足 - directiveとattribute
合成制約をdirectiveやattributeと呼んでいるが、Synplifyではこの2つを区別している。
(1) directive コンパイラ指示子
RTL記述を解析して中間形式(論理式のようなもの?)に変換する段階にかかる合成制約
RTL記述中に書かなければならない
(2) attribute 属性
中間形式から各種FPGAのセル(FF,LUT,RAM,DSP,IO)にマッピングする段階にかかる合成制約
RTL記述中に書く他に、制約ファイル(.sdc)に書いてもよい
ここでとりあげた合成制約について区別を示すと大体感じがわかる。
合成制約 |
意味 |
Directive/Attribute |
syn_noprune |
出力が未使用のFFを削除しない |
D |
syn_preserve |
冗長なFFを削除しない |
D |
syn_keep |
信号を保持する |
D |
syn_replicate |
FFの複製をしない |
A |
syn_useioff |
IOセルのレジスタにパッキングする |
A |
syn_encoding |
FSMのエンコーディングを指定する |
A |
syn_ramstyle |
RAMをマッピングするセルを指定する |
A |
syn_multstyle |
乗算器をマッピングするセルを指定する |
A |
制約は論理合成後の配置配線する段階でもかかる。特に論理合成をサードパーティのツールで実行する場合、RTL記述中に合成制約を書いてあっても、配置配線するFPGAツールへ制約が受け渡されないと、配置配線で信号やFFが削除されてしまうので注意。
◇
なお、合成制約(* *)は論理合成ツールから見ればコンパイラ指示子だが、シミュレータから見れば
`define等がコンパイラ指示子
(* *)は属性
なので、何と呼ぶかは主語によって変わる。