FC2ブログ

[Quartus][TimeQuest]no_clock原因調査(1)

NEEKで以下の設定をしても、まだcheck_timingでno_clockが存在する。

   ・create_clock で外部オシレータ入力にクロック設定。
   ・create_clock でaltera_reserved_tckにクロック設定。
   ・derive_clocks -period 10 で適当に100MHzの速度で設定。
   ・derive_pll_clocks

これらの設定の後、TimeQuest上で、
   check_timing -include no_clock
と実行すると、以下のようなInfoが出る。つまりこれらが、クロックが伝播してないFFという事だ。

Info: cycloneIII_embedded_evaluation_kit_standard_sopc_instance|the_ddr_sdram|ddr_sdram_controller_phy_inst|ddr_sdram_phy_inst|ddr_sdram_phy_alt_mem_phy_inst|clk|pll|altpll_component|auto_generated|pll_lock_sync No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|PTOI8526 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|IIEL2272_1 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|QLOC3757 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[18] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|IIEL2272_2 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|LAFY5161[0] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|LAFY5161[0]~0 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|LAFY5161[0]~1 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_7 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[17] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_6 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[14] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[15] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[16] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[7] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[8] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[9] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[7] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[11] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[1] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[6] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[5] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[8] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_5 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[12] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[13] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[10] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[11] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[6] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[4] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[5] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[1] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[2] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[0] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[3] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[2] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[10] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[0] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[4] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|TWMW7206|CLIA8751[9] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_4 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|AJQA6937|CLIA8751[3] No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_3 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_2 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_1 No clock feeds this register's clock port.
Info: nabboc|pzdyqx_impl_inst|\cycloneiii_WCRO7487_gen_0:cycloneiii_WCRO7487_gen_1|EPEO2888_0 No clock feeds this register's clock port.



Synopsys社のPrimeTimeでは、all_faninというコマンドがあって、指定したFFのクロックピンから
バックトレースして、順序回路(FF、Latch、SRAMなど)か外部入力ポートまでトレースしてくれる。
そして、それらを表示する事が出来るので、つまり、その外部ポートや内部ピンにcreate_clock(外部ポートの場合)、
もしくはcreate_generated_clock(内部ピンの場合)を設定すれば、クロックを伝播させて、no_clockが消える。

QuartusはSynopsys社のSDCフォーマットを対応しているし、PrimeTimeのある程度類似のAPIも組み込まれている。

http://www.altera.com/literature/manual/mnl_sdctmq.pdf

このPDFのPDF page57に、get_faninsというコマンドがあり、これを使って同じ事が出来るのでは?と期待。
以下流れでトライ。PDFの「Description」に書いてある通り、このコマンドで返るコレクションはnodeとの事。

コレクションとは、配列のこと。
PrimeTimeでは、論理回路中の各オブジェクトを、それぞれ、cell、pin、net、clock、path、などと
分類しており、各コマンドで返されるコレクションは、これらのいずれかの配列になる。
例えば先のall_faninコマンドで、-startpoints_onlyのオプションを付けた場合、返るコレクションは、
外部入力ポートか順序回路のピン。
だから、

get_port [all_fanin -startpoints_only -to ]


と書いてやれば、ポートオブジェクトがGET出来るし、get_portの代わりに、get_pinを使えばピンオブジェクト
がGET出来る。

さて、本題のTimeQuestの方だが。
とりあえず、get_faninsでGETしたnodeコレクションを、foreach_in_collectionでイテレートしてやり、
各オブジェクト毎に、名前を表示してやると・・・

foreach_in_collection hoge [get_fanins nabboc|pzdyqx_impl_inst|PTOI8526] { puts [get_node_info -name $hoge] }
nabboc|pzdyqx_impl_inst|PTOI8526
nabboc|pzdyqx_impl_inst|IIEL2272_1
nabboc|pzdyqx_impl_inst|QLOC3757
nabboc|pzdyqx_impl_inst|XWDE0671[2]



なんですか?この名前。
馴染みが無いので、どのピンがクロック設定すべきピンか分からん。
試しに、全nodeに以下のやり方でcreate_clockして見たが、

create_clock -period 10 -name hoge_clk4 nabboc|pzdyqx_impl_inst|PTOI8526



no_clockの数は47から減らなかった。
nodeにcreate_clockってやった記憶無いが、report_clockで存在してたから成功したようだ。
すると、そもそもget_faninsの使い方が何か間違ってるのかな?
スポンサーサイト



カレンダー
09 | 2011/10 | 11
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 - - - - -
累積訪問者
現在の訪問者
現在の閲覧者数:
最新記事
最新トラックバック
最新コメント
月別アーカイブ
カテゴリ
プロフィール

bobgosso

Author:bobgosso
FPGAのブログへようこそ!

検索フォーム
RSSリンクの表示
リンク
ブロとも申請フォーム

この人とブロともになる

QRコード
QRコード