2008/08/12(火)[ISE] 久しぶりのHDL, WebPackISE, 初めてのFPGA
WebPackISE v10.1sp2上で, Verilog記述を行い, おもちゃを作ろうとしている.久しぶりにHDLに触れたのと, CPLDとは規模が違いすぎるので, 真面目に検証しておこうと思う.途中ツールの使い方や設計自体に問題がありそうなので, メモを記しておくことにする.
識者の方にツッコミを入れてもらえると非常にありがたい...
また, 検索したりアンサーを探したり, 本を見たりと参照先がややこしくなっているので,可能な限りリンクを貼って残したいと思います. リンク先が消える可能性もあるから,せめてローカルには保存しておきたいと思うけれども, blog形式だと管理が面倒ですよねぇ...とりあえず, FPGAの部屋のまとめサイトは外せなさそうです.ほかにもあるけれど, 今開いているページだけ貼っておきました.
タイミング制約(timing constraints)について
Synthesize - XST
ISEWebPackにて, Synthesisを行ってレポートを見る.なんだかタイミング間に合ってないような書き方されているが, Synthesisだけで判断しないほうがいいのかな.だんだんとイヤになってきたしw.
summaryは以下のとおり. 結果としてClockは127MHzまでokよと言われていると考えていいのだろうか.
Timing Summary: --------------- Speed Grade: -4 Minimum period: 7.824ns (Maximum Frequency: 127.815MHz) Minimum input arrival time before clock: 9.067ns Maximum output required time after clock: 11.857ns Maximum combinational path delay: 14.951ns
Detailを少し引用してみるが, この遅延が支配して, 上限が確定してしまっているように見受けられる. DCMで2逞倍にしたクロックで内部ロジックをまわしているのだけれども, 100MHz想定だからOK??配置配線完了すると, route timeとか logic timeに変動があるかもしれないけれど. setup time/hold timeを加味した上での値, と見ていいのかしらねぇ?
Timing constraint: Default period analysis for Clock 'CLKOUT_DCM1/CLKFX_BUF' Clock period: 7.824ns (frequency: 127.815MHz) Total number of paths / destination ports: 10190 / 330 .... (4.609ns logic, 3.215ns route)
まぁ, こう書いてあることだし, とりあえず保留...
TIMING REPORT NOTE: THESE TIMING NUMBERS ARE ONLY A SYNTHESIS ESTIMATE. FOR ACCURATE TIMING INFORMATION PLEASE REFER TO THE TRACE REPORT GENERATED AFTER PLACE-and-ROUTE.
Implement Design / Translate
Checking Constraint Associations... WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_5 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...>. WARNING:NgdBuild:1011 - The constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...> is overridden by the constraint <TIMESPEC TS_CLKOUT_DCM1_CLKFX_BUF_6 = PERIOD "CLKOUT_DCM1_CLKFX...>.
検索した. 1011は場所かな? と判断して, メッセージ部分をAND指定すればOK. *1
アンサーに登録されている, 10.1 NGDBUILD - 制約の優先順位での問題というのが該当しそうだ. 抽出した部分, 長すぎてはしょられてしまっているので, 制約が読み取れないけれど...
しかし, ucfでは該当しそうな制約条件を記述していない. CLKFXは DCMの出力クロックだと思われる. FPGAの部屋では, DCM入力クロックの制約事項を記述しておけば, 出力クロックの制約を自動生成するようだ, と書かれていた.
少し気がかりだが, 致命的ではなさそうなのでおいておこう...
Place and Route Report
ここが気になる英文. 英語赤点できたのと, 仕事でも添削してもらわないと送れないレベルの儂惨状*2
WARNING:Route:455 - CLK Net:CLKFX_OUT may have excessive skew because 0 CLK pins and 2 NON_CLK pins failed to route using a CLK template. => ~は, 極端なスキューを持つ. NON_CLK pin2つがCLK temlateを使った配線で失敗している(?)
なんか調子悪そうにみえる... のだけれど.
大きすぎて引用をためらったが, ヘンにはしょるのもよろしくなさそうなので貼り付け.
Derived Constraint Report Derived Constraints for TS_clk_in +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ | | Period | Actual Period | Timing Errors | Paths Analyzed | | Constraint | Requirement |-------------+-------------|-------------+-------------|-------------+-------------| | | | Direct | Derivative | Direct | Derivative | Direct | Derivative | +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+ |TS_clk_in | 20.000ns| 4.972ns| 19.983ns| 0| 0| 336| 10214| | TS_CLKOUT_DCM1_CLKFX_BUF | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_0 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_1 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_2 | 6.667ns| 6.661ns| N/A| 0| 0| 10214| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_3 | 6.667ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_4 | 5.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_5 | 10.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_6 | 10.000ns| N/A| N/A| 0| 0| 0| 0| | TS_CLKOUT_DCM1_CLKFX_BUF_7 | 10.000ns| N/A| N/A| 0| 0| 0| 0| +-------------------------------+-------------+-------------+-------------+-------------+-------------+-------------+-------------+
おそらく自動生成された制約だろう. DCM入力50MHz(20nSec)に対して, x2の100MHz(10nSec)という制約が...
おかしいやん.. 6.6nSecとか5nSecて, 3倍4倍じゃね?しかも負荷ぶら下がってるし.見方が悪いのかナァ. それにしてもErrorの項はゼロだしなぁ...
動くものと信じて検証しておきますか. シミュレータでの確認がまだだったりします...
DCMのリセット
なひたふ先生のblogにて、Spartan3E DCMからクロックが出てこないというエントリがありました. DCMの使用例を探していてヒットしたのです.
ここにあるように, 入力クロックが心配であれば, DCMの出力が安定してなければ再度リセットを行うような回路を入れるべきという提案に賛同します.コメント欄で いくら先生も引っかかったようですので, 先人の経験をありがたく授受しようかと思います.
で, この回路は比較的簡単に実装できたので, module testの練習(思い出し)を兼ねて実施. XSTを使い, パターンをふって, 17mSec程度まわしたら アプリケーションが落ちた...しかもメモリをガメたまま. ファイルもロックしたまま. \(^o^)/
ModelSimだと遅いから, とりあえずの動作確認としてXSTを使ったのが敗因か?本気でHDLで遊ぶなら, Veritakの購入も考えたほうがいいのかしら...下手なゲームソフトを買うより安いものネェ. その上実用的だし:)
本日の結論
reportの見方が判らないが, エラーとして明示されていないので, とりあえず疑問点を挙げて記録したから満足.検証を済ませてマイコンとの配線を済ませるつもりだったが全く進捗が無い. これはかなり厄介だ...
N:TMに途中成果を持っていけない臭いがぷんぷんするぜ...