QuartusIIで最適化によるレジスタの削除を抑止 その2
FPGAの部屋 DDR2 SDRAMコントローラのインプリメントテスト2(動作周波数の確保2)のコメント欄にお返事。
XSTなり、QuartusIIのオプションで制御すると全体にオプションが適用されてしまいます。marsee さんの言われるとおり、それは設計者の意図するところでは無かったりします。回路全体のFANOUTを1に設定するのは全く意味が無いのですが、レジスタを保存するならそれほど全体に影響しないという違いもあります。あらためて考えると面白い。
XSTでFANOUTの数を自力で制御するなら(* equivalent_register_removal = "no" *) でも行けますね。こちらこそ勉強になりました。ありがとうございます。
で、それアルテラでできるよ、という話。
reg [7:0] r ;
reg [7:0] outp /* synthesis preserve = 1 */;
always @ (posedge clk)begin
r <= {inp, inp, inp, inp, inp, inp, inp, inp};
outp <= r;
end
このように、/* synthesis preserve = 1 */をつけることで、レジスタを最適化から守ることができます。この状態で、Remove Duplicate RegistersをONにすると、rは最適化され1つになりますが、outpは最適化が抑止されます。
大成功
The comments to this entry are closed.
Comments
こんにちは。
アルテラでもできるんですね? アルテラはあまり知りません。
DDR2 SDRAMコントローラをやっている際の副産物といいますか?タイミングをアジャストしていく軌跡を書いています。まだ、トライステートバッファに出力イネーブルを入れるFFがうまくIOBに入りません。
とりあえず、シミュレーションだけでもうまくいったので公開しようかな?と思っています。
Posted by: marsee | 2008.02.03 08:23 PM
marsee さん、こんにちは
この手の知識はDDR周りでしか使わないのですが、知らないとにっちもさっちも行かなくなります。
> とりあえず、シミュレーションだけでもうまくいったので公開しようかな?と思っています。
ぜひ、公開してください。楽しみに待っています。
Posted by: なつたん | 2008.02.04 07:40 AM