FC2カウンター FPGAの部屋 Chipscope Pro Core Inserterを入れる際の便利なオプション
FC2ブログ

FPGAやCPLDの話題やFPGA用のツールの話題などです。 マニアックです。 日記も書きます。

FPGAの部屋

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。Xilinx ISEの初心者の方には、FPGAリテラシーおよびチュートリアルのページをお勧めいたします。

Chipscope Pro Core Inserterを入れる際の便利なオプション

筑波大学の武内さんからコメントでとても良い情報をいただいた。ありがとうございます。
それはChipScope Pro 11.1で(* KEEP_HIERARCHY = "TRUE" *)をmoduleの前に宣言して、Verilogのmoduleごとに階層をキープして、Chipscopeで観察する信号を見つけやすく、しかも信号がなくならないようにしていた。しかし、Synthesis のオプションの -netlist_hierarchy を Rebuildにしたら選択できるようにならないか?というコメントを頂いた。やってみたら、empty信号は無くなってしまったが、Core Inserterから階層が見えて、とても信号にプローブをかけやすくなった。

XSTのプロパティの -netlist_hierarchyのデフォルト値は、As Optimizedになっている。
Core_Inserter_Tips_1_100611.png

async_fifo_rise, async_fifo_fallモジュールの(* KEEP_HIERARCHY = "TRUE" *)を削除して階層をキープを外す。その状態で、Core Inserterを起動し、Select Netダイアログを表示すると、Structure/Netsには、モジュールで階層をキープしたモジュールが並んでいて、async_fifo_rise, async_fifo_fallモジュールの階層は無くなっている。その結果として、Data Signals のNet Selecionsには、赤い表示が現れている。
Core_Inserter_Tips_2_100611.png

ここで、XSTのプロパティの -netlist_hierarchyの値をAs OptimizedからRebuiltに変更した。これで、Core Inserterを起動し、Select Netダイアログを表示すると、Structure/Netsには、階層をキープしていないモジュールも階層化されていて、とても見やすい。 async_fifo_fallモジュールにemptyの信号名は論理合成されてなくなっていたが、とても見やすくなった。(注:(* KEEP_HIERARCHY = "TRUE" *)でモジュールで階層をキープした時とネット名は同じに見えてもSelect Netダイアログでは赤い表示になっています。再度、ネット名を指定する必要があるようです)
Core_Inserter_Tips_3_100611.png

Chipscopeをかけない状態で、インプリメントの品質を比べてみたが、わずかにRebuiltの方が良かったくらいで、どちらも遜色はなかった。全部の階層をキープしてしまうとインプリメントの品質が落ちてしまうことが多いので、Rebuiltにしておくのはとても良いと思った。

最後の元ネタの筑波大学の武内さんの”Synthesis オプションの設定”をご紹介しておく。
#本当になんで、このオプションがデフォルトじゃないんだろうか?

ここまで、書いてきてなんだが?HELPを読んでいるうちにKeep Hierarchy = Softとどこな違うのかな?と疑問になってきた。どちらもネットリストのNGCファイルに階層的なネットリストを出力するんじゃないか?と思ってきた。なにか情報をお持ちの方は教えてください。(結局、階層的なネットリストが出力されるのだったら、一緒じゃないか?とその時は思ったのですが、下の結果でも、よくわからない結果が出ているので、削除します)

DDR2_burst_testプロジェクトで、XSTプロパティのKeep Hierarchyとnetlist_hierarchyをいろいろ変更した際のTS_ddr2_sdram_cont_inst_dcm_module_inst_clk_node_0のminimum periodの変化をAnalyze Post-Place & Route Static Timingで測定してみたので、下に結果を示す。(async_fifo_rise, async_fifo_fallモジュールの(* KEEP_HIERARCHY = "TRUE" *)は削除してある)
Keep Hierarchy netlist_hierarchy minimum period
NO       As Optimaized   6.960 nsec
NO       Rebuilt      7.175, 6.666, 6.746 nsec(値が一定しない?)
SOFT      As Optimaized   6.744 nsec
SOFT      Rebuilt      6.673 nsec
YES       As Optimaized   6.597 nsec
YES       Rebuilt      6.624 nsec

それぞれ結果が違うようだ?もっと詳しく調査する必要があると思う。
Keep Hierarchy=NO, netlist_hierarchy=Rebuitは他の値に切り替えた後で、もう一度この値に戻したときのTS_ddr2_sdram_cont_inst_dcm_module_inst_clk_node_0のminimum periodの値が一定しない。ISEのバージョンは11.5を使用している。

(2010/06/12:追記)
いろいろ、”XST netlist_hierarchy Rebuilt”のキーワードで調べてみました。-netlist_hierarchy=Rebuiltはやはり、XSTで階層をフラットにして論理合成してから、階層を元のように構築するようです。ここからは私の意見ですが、ネットリストに階層を再構築しているので、完全にフラットになったネットリストとはインプリメント段階での入力されるネットリストが違うため、インプリメント結果が異なっているのだと思います。
いずれにせよ。少し結果のminimum periodが安定しない不思議はありますが、合成結果はnetlist_hierarchy=Rebuitにした方が概ね良いようですし、デフォルトでKeep Hierarchy=NO, netlist_hierarchy=Rebuitにした方が良い気がします。考えてみると、論理合成で、合成結果が良くなるように階層をまたいで最適化してから、階層を再構築するんですから、後でのフロアプランもしやすいし(PlanAheadのマニュアルにもこのオプションの記述が出てきます)、MAPもP&Rもやりやすいんじゃないでしょうか?それでインプリメント結果が良いのかもしれません(私の推測です)。

  1. 2010年06月11日 13:14 |
  2. Chipscope
  3. | トラックバック:0
  4. | コメント:5

コメント

「Keep Hierarchy = Softとどこが違うのか」についてですが、ヘルプの文面だけからすると netlist_hierarchy = Rebuit の設定は、合成される回路には影響を及ぼさないのではないでしょうか?KEEP_HIERARCHY = "SOFT" では階層構造を越えた最適化を抑制することになるので、合成結果が影響を受けることになるのだと思います。

合成時に階層が失われると、ソースコード上で異なる名前を持つ複数の信号線が、実際には同じネット名を持つことになりますが、netlist_hierarchy = Rebuit では、元の信号名から合成後のネットを参照できるようにネットリストを再生成する、ということで、実際の最適化は階層を越えて行われるはずです。
  1. 2010/06/11(金) 15:15:38 |
  2. URL |
  3. takeuchi #-
  4. [ 編集 ]

こんにちは。

>netlist_hierarchy = Rebuit の設定は、合成される回路には影響を及ぼさないのではないでしょうか?
そう思ったのですが、もし、Rebuiltした合成結果がインプリメンテーションに渡されるとわからないかな?と思いました。
実際に同じプロジェクトで、Keep Hierarchyとnetlist_hierarchyをいろいろ変更して、やってみたのですが、それぞれの結果が一致しませんでした。
もし、netlist_hierarchy = Rebuitが、合成される回路には影響を及ぼさないとすると、Keep Hierarchy=NOで、netlist_hierarchy=As Optimaizedのインプリメント結果とKeep Hierarchy=NOで、netlist_hierarchy=Rebuiltのインプリメント結果はおなじになるはずです。でも、そうなりませんでした。これは、netlist_hierarchy の設定もインプリメント結果に影響を及ぼすということを示していないでしょうか?
  1. 2010/06/11(金) 16:44:14 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

netlist_hierarchy の値で合成結果が影響を受ける原因は、もしかするとコード中や ucf に書かれた制約のおよぶ範囲が、ネットの名称が変わることにより変化したため、ということは考えられないでしょうか?

まだネットを識別する名称が合成途中のどの段階でどのように付けられているのか、制約がどの段階でどの範囲に影響を及ぼすのか、理解できていないので想像なのですが、やはりヘルプのあの記述からすると、このオプションで合成に影響が出るのはおかしいように思うので、可能性として思い浮かんだというだけなのですが。。。
  1. 2010/06/11(金) 18:44:16 |
  2. URL |
  3. takeuchi #-
  4. [ 編集 ]

コメントありがとうございます。

確かにUCFが変わることはあるかもしれませんが、それだと、Translateでエラーが出るはずですね?範囲が変わることはあるかもしれませんが?エリア制約はかけていないはずです。TIG制約もエラーが出ていないのでかけていません。範囲が変わることは無いとは思います。
今は、家なので、家でもやってみようと思いますが、家のは少し制約を変えてしまったので、同じ結果にならない可能性もあります。
  1. 2010/06/11(金) 19:28:58 |
  2. URL |
  3. marsee #aouVx48I
  4. [ 編集 ]

家でもやってみました。
家のプロジェクトのDDR2クロックのノード名はTS_ddr2_sdram_cont_inst_dcm_module_inst_clk_nodeでした。少し書き換えているのかもしれません。一部配線を固定してあります。

Keep Hierarchy netlist_hierarchy minimum period
ISE11.5
No         As Optimized   6.831nsec
No         Rebuilt     6.786nsec

ISE12.1
No         As Optimized   6.662nsec
No         Rebuilt       6.600nsec

でした。やはり少し違っています。
ちょっと良くわからないので、申し訳ありませんが、保留にします。
  1. 2010/06/11(金) 20:33:51 |
  2. URL |
  3. marsee #f1oWVgn2
  4. [ 編集 ]

コメントの投稿


管理者にだけ表示を許可する

トラックバック URL
https://marsee101.blog.fc2.com/tb.php/1497-1c522c1a
この記事にトラックバックする(FC2ブログユーザー)