FPGAの部屋

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

FPGAの部屋の有用と思われるコンテンツのまとめサイトを作りました。ご利用ください。 http://marsee101.web.fc2.com/index.html

2009年01月

”AKI-H8/3069FフラッシュマイコンLANボードでRedBoot起動”でRedBootは起動したが、Ubuntuでtftpd を起動してもネットワーク経由でelf ファイルをダウンロードすることが出来なかった。もう一度、環境を書くと、Windows XPを起動しているパソコン上にVMware Server を入れて、その上でUbuntu 8.04を動かしている。それで動かなかったので、同じVMware上のCentOS5.2でtftpd をインストールしてRedBootからネットワーク経由でelf ファイルをダウンロードすることが出来るか確かめてみた。
”[Linux]CentOSで手動で固定IPアドレスの設定を行う”というブログを検索して見つけたので、これを参考にしながら、まずはIPアドレスを固定することにした。
まずは/etc/sysconfig/network-scripts/ifcfg-eth0 を編集して、DHCPから固定アドレスに変更した。
eadf1ba4.png


これで/sbin/service network restart を実行してネットワークをリスタート。
/sbin/ifconfig -a で見てみたらちゃんと固定IPアドレスが設定されていた。
これでH8のRedBootのプロンプトからlcd_clock.elf をload してみたところ、やはりだめ。

どうしようかと思ったが、そういえばWindows 用のtftpd はないのかと探したところ、VectorでTFTPサーバプログラム TFTPDを発見。これをWindowsにインストールしてみることにした。
インストールし、tftpbootフォルダを作って、そこにlcd_clock.elf を置いた。H8ボードのRedBootプロンプトからload lcd_clock.elf を実行したがだめだった。(RedBootにはサーバーアドレスをWindowsに設定済み)
今度は”RedBootについて”を見てloadコマンドのオプションを検索して、-h のホストオプションを見つけた。これで直接WindowsのIPアドレスを指定してやってみた。

load -h 192.168.3.3 lcd_clock.elf


98409e70.png


そうしたら、やっとload できました。うれしい。。。すかさずgo するが、LCDに表示されない。
エーなんででしょう。そういえばこの前もLED付かなかったし。。。
回路図を見るともしかして、LCD-LED-DIPヘッダの1-2, 3-4 .... 23-24 とショートしないとLCDやLED、DIP SWがH8につながらない。。。それで設定ピンがいっぱい余っていたのか?
下の写真で黄色く囲ったヘッダに設定ピンが刺さっていない。
AKI_H8_9_090122.jpg

この設定ピンをすべて刺したらLCDがカウントした。
H8_RedBoot_2_090131.jpg

やっとうまく行きました。良かった。
結局、VMwareのLinuxからはtftpd でファイルをダウンロードできなかった。やはり何か設定がいるのだろうか?まあ、とりあえずこれでUbuntuでコンパイルしてSambaでWindows に持ってきて、H8ボードのRedBootでロードして起動という流れが出来た。

”ModelSimでタイミング・シミュレーション(Post-Routeシミュレーション)1”の続き

以前はTranscriptウインドウにコマンドでvsimコマンドを入れてシミュレーションしていたが、今回はGUIでやってみようと思う。
さて、シミュレーションをするためにSimulateメニューからStart Simulation...を選択。
Post-Route_simulation_7_090130.png

ダイアログが開くので、テストベンチ(DDRtest_tb) を選択。さらにglbl.v をインスタンシエーションするために、Design Unit(s) のwork.DDRtest_tb の脇にwork.glbl を自分で入力する。
46640790.png


次にLibraries タブをクリックしてSearch Libraries (-L) にsimprims_ver が入っていることを確認。simprims はタイミング・シミュレーション用のライブラリだ。論理シミュレーションだとunisim (この場合はVerilogのシミュレーションなのでunisim_ver) を替わりに入れる必要がある。
d43e36a6.png


次に遅延情報が書いてあるSDFファイルを設定しよう。SDFタブをクリックし、そこのAdd... ボタンをクリックする。
39b0a2ca.png


ADD SDF Entryダイアログが開くので、Brows... ボタンを選んで、SDFファイルを選択して、Apply to Reasion にはSDFファイルと組になっているVerilogファイルのモジュールのインスタンス階層及びインスタンス名を入れる。つまり下のリストだったら /DDRtest_inst を入力する。

    DDRtest DDRtest_inst(
        .clk(clk),
        .reset(reset),
        .led(led),
        
        .sd_a(ddr_address),


Post-Route_simulation_11_090130.png

これでOKボタンをクリックすると、Start Simulation ダイアログにSDFファイルがセットされる。
97342171.png


これでOKをクリックすると、シミュレーションの準備完了。デザインがロードされるので、viewメニューからwaveを選択して、wave ウインドウを出して、見たい信号をwaveウインドウに追加する。そして、SimulateメニューからRun -> Run -All すればシミュレーション波形を見ることが出来る。私のマシンで、DDR SDRAMコントローラを250us シミュレーションするのに、約60分くらいかかってしまった。
下の図でピンクの四角で囲ったIDDR2レジスタのセットアップエラーも出てしまった。エラーの部分にはwaveウインドウの一番上に下向き赤三角が付くようだ。これは、SDRAMにWRITEしている時に入力のDDR FFがセットアップエラーを起こしているようだ。それならば問題ない。
2番目のカーソルからはなぜか出力がXになってしまっている。これはこれからトラブルシュートする予定だ。
9f270578.png

今までは、Post-Routeシミュレーション(タイミング・シミュレーション)をしたことがなかったが、ある目的でModelSim XE3 Starterでやってみることにした。シミュレーションは論理シミュレーションをしてTiming Analyzerで静的にタイミングを確認していたし、面倒で不定値になることがある遅延シミュレーションをしなくても動作していた。それにModelSim Starter で遅延シミュレーションをすると簡単に1万行の制限を越えて極端に遅くなってしまう。
とりあえずテストベンチがすでにあるDDR SDRAMコントローラのバーストテストでやってみることにする。
まずはISEからやる方法はというと、Project NavigaterのSourceウインドウのSource for : でPost-Route Simulationを選択する。
Post-Route_simulation_1_090130.png

Sourceウインドウにテストベンチ(DDRtest_tb) が表示されるので、これをクリックする。下のProcesses ウインドウにSimulate Post-Place & Route Model が表示されるのでそれをダブルクックする。これでタイミング・シミュレーションが出来るはず。
Post-Route_simulation_2_090130.png

これでよいのだが、今回はModelSim単体で遅延シミュレーションをすることにした。Implement Design -> Place & Route の下にあるGenerate Post-Route Simukation Model をダブルクリックして、Post-Route Simukation Model を生成する。
Post-Route_simulation_3_090130.png

そうするとISEのプロジェクトがあるフォルダのnetgen\par フォルダにDDRtest_timesim.v とddrtest_timesim.sdf が生成される。
c6591723.png


これをModelSimのプロジェクトを作成したフォルダにコピーする。
b16a884f.png


DDRtest_timesim.v にddrtest_timesim.sdf へのパスを書いてある部分を修正する。

initial $sdf_annotate("netgen/par/ddrtest_timesim.sdf");


があるので、パスの部分を消去する。

initial $sdf_annotate("ddrtest_timesim.sdf");


DDRtest_timesim.v とglbl.v, DDRtest_tb.v, ddr.v をAdd to Project -> Existing File... でプロジェクトに加える。
Post-Route_simulation_6_090130.png

ちなみにglbl.v はXilinxのunisim_ver, simprims_verなどのライブラリに入っているプリミティブをシミュレーションするときに必要なファイルだ。glbl.v は、プリミティブのグローバル セット/リセット信号とグローバル トライステート信号を接続する。詳しくは”6537 - シミュレーション、UniSim、SimPrim - Verilog シミュレーションで glbl.v モジュールを使用する方法 ”を参照のこと。
DDRtest_tb.v はテストベンチ。ddr.v はマイクロン社のDDR SDRAMモデル。
これで役者がそろったのでタイミング・シミュレーションをすることが出来る。

”ModelSimでタイミング・シミュレーション(Post-Routeシミュレーション)2”に続く

今日、Interface2009年3月号を購入した。今月の特集は”はじめてのマイコン活用基礎の基礎”だった。真空管、トランジスタ、TTL(といってもHCなのでCMOS)から書いてあって、本当に基礎の基礎からのようだった。この辺は読んでいないが、なひたふさんの”徹底解説作ればわかるPCI Express(第3回) 100MHzを超える信号を扱うロジックのFPGAへの実装法”は興味深く読ませてもらった。
Xilinx社のFPGAでまともなインターフェース回路を作るためのエッセンスが詰まっていると思う。特にDCMのDESKEW_ADJUST属性の違いはなんだろうと思っていても、検証したことがなかったので、興味深く読ませていただいた。
VALID制約は、私のブログの”VALID制約”で書いたことがある。
最後にtxclk とそのtxclkでサンプルされるべきデータ(txdata) の制約だが、OFFSET_OUT_AFTERで制約をかけても、worst caseは制約できるのだが、best case は制約できない。よって、制約上でtxdataとtxclkの差が2nsあっても、txclkがもしかしたら2ns速い事もあって、その場合は制約違反にならないんじゃないか?と思う。だから私は、クロックとデータの遅延の値はTiming Analyzerで確認することにしている。クロックもデータも大体IOBにマップしてあるので、一度確認しておけば変動はほとんどないが。。。これは、IOBのDDRレジスタで出力するクロックとデータの相対的なタイミング関係を制約に書ければよいと思っていた。調べてみたのだが、調べた限りではそういう制約はないようだ。
後、180度位相のクロックの件だが、スライスにはクロックのインバータが用意されているので、180度位相のクロックが必要な場合は、私はそれを使うようにしている。クロックバッファももったいないし、スキューも少ないだろうと思うので。。。
いろいろ書いてしまったが、なひたふさんの記事は良くまとまっている、とてもよい記事だと思う。

Notepad++ の?メニューからUpdate Notepadd++ を選んでアップデートがなかったので、ずっとNoptepad++のアップデートがないと思っていたのだが、久しぶりにVeritakのページを見に行ったら、NPP++プラグインUNICODE用をリリースしたというお知らせを見た。そこにはNPP++ 5.1からUNICODEに対応していると書いてある。なに?NPP++ 5.1 ということは、私が使っているのはNPP++ 5.03 なのでアップデートがあるということ???
実際に、NPP++のページを見に行ったらバージョン5.1.4があった。そうか5.0 から5.1にあがる時には?メニューからUpdate Notepadd++ を選んでアップデートを確認しても表示されないんだと思った。早速ダウンロードしてインストールした。VeritakのNPP++プラグインUNICODE用もダウンロードしてインストールした。
インストールして試してみると、以前の”2ペインで編集しているのだが、その状態で文字列を選択すると、Netepad++のCPU負荷が50%(つまり1つのCPUを占有)してしまう”というバグ?も解消しているようだ。アップデートした甲斐があった。

今日は、一応、職場に行ったのですが、体調がいまいちなのと、周りの人にうつしてはまずいということで、帰宅。。。ということになり、結局、休暇となりました。

↑このページのトップヘ