FC2カウンター FPGAの部屋 2006年11月

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

FPGAの部屋

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

ノロウイルスにやられました

月曜日の夜から朝にかけて7回吐いてしまった。とてもつらかった。最後に吐いた時には過呼吸で手足がしびれてしまった。火曜日の朝はふらふらになりながら医者に行ったら最近流行っているノロウイルスによる胃腸炎とのことだった。
吐き止めを飲んでやっと薬とポカリスエットを飲んだがまだ物は食えていない。昨日は一日気持ち悪く吐き止めを飲まないと薬やポカリも飲めなかった。今日は何か食えるといいのだが。。。
娘2人とばあちゃんもやられている。今年は大流行の年なのだろうか?
皆さんもノロウイルスに気をつけてください。予防には手洗いが基本だそうです。

(2006/11/30)何とか大丈夫になったようです。まだ肉や油っぽいものは食べていないので本調子ではありませんが、ほぼ体調が戻ったようです。(でも階段上がると息切れします。これは年のせい?)
  1. 2006年11月29日 06:05 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

PicoBlazeの命令用BRAMにプログラムをDATA2MEMでロードする

fpga-lab.orgさんでPicoBlaze™ JTAG Program LoaderでPicoBlazeの命令が入ってるBRAMにJTAG経由でプログラムをロードする方法が紹介されていた。私もうっかりしていたが今回大きなデザインでPicoBlazeをwatchdogとして利用することも考えているので論理合成、インプリメントの工程を飛ばしてPicoBlazeのプログラムを変更できるととても良い。JTAG Loaderも1つの解決策だが多分BSCANユニットを使うのでChipscopeと共用できない可能性がある。よく見るとKCPSM3.EXEが吐くファイルには.MEMもあるようだ。これだとこの前のDATA2MEMで.bitファイルを書き換えてプログラムをロードすることも出来そうなので、こっちでやってみることにした。
最初に.BMMファイルを書いて.BMMファイルと.MEMファイルをISEのプロジェクトに入れてみたがどうもTranslateで.BMMファイルがフォーマットエラーと言われてしまって通らない。
.BMMファイルの書き方がPicoBlazeの命令用BRAMはデータだけでなくパリティの領域も使っているのでいままでのRAMB16のインスタンスで良いのかどうか不安もあった。そこでXilinxのアンサーを調べてみると”アンサー♯21460 7.1i Data2MEM - デザインでパリティ ビットを使用する方法および 18 ビット データ幅のブロック RAM のサポート”があったのでこれを参考にして書いてみた。やはりTranslateで.BMMファイルがフォーマットエラーと言われてしまって通らなかった。次にやはりBRAMの位置固定をしなくちゃいけないのかと思って、.UCFと.BMMにLOC制約を書いてBRAMを固定した。それでも同じだった。どうもインスタンスがだめのような気がする。
どうもISEのプロジェクトに入れているとだめなので以前同様コマンドラインからやってみることにした。そうすると.UCFと.BMMにLOC制約を書いてBRAMを固定すれば書き換えることが出来た。
具体的には”スパルタン3EスターターキットのLCD表示回路4”でやったLCDの表示回路の表示を変えることにした。ここではLCDの上の行に1234と表示して下の行に5678と表示しているが、下の行に追加で12と表示することにした。つまりLCDの下の行の数字は567812となる。
ファイルなどは”スパルタン3EスターターキットのLCD表示回路5”にある。まずはISEプロジェクトのUCF(Test_LCD4HexDisp.ucf)にBRAMの位置固定情報を追加する。

INST "LCD4HexDisp_inst/instrom_inst/ram_1024_x_18" LOC = "RAMB16_X1Y6";


これで論理合成、インプリメント、Generate Programming Fileして.bitファイル(test_lcd4hexdisp.bit)を作っておく。
次にPicoBlazeのプログラムを書き換えるためにとりあえずdata2memというフォルダを作った。
そのフォルダにPicoBlaze関連のファイルとinstrom.psm、test_lcd4hexdisp.bitをコピーした。
instrom.psmを変更して.bitファイルを書き換える。具体的には新しいファイルをinstromn.psmとして次のように書き換える。
LCD_sample_1_061126.png

これをKCPSM3.EXEでアセンブルするとINSTROMN.MEMが出来る。そのフォルダの様子を下に示す。
LCD_sample_2_061126.png

INSTROMN.BMMを作る。

ADDRESS_SPACE picoblaze1 RAMB18 INDEX_ADDRESSING [0x00000000:0x000003FF]
BUS_BLOCK
LCD4HexDisp_inst/instrom_inst/ram_1024_x_18 [17:0] LOC = X1Y6;
END_BUS_BLOCK;
END_ADDRESS_SPACE;


ISEで出来たtest_lcd4hexdisp.bitとINSTROMN.MEM、INSTROMN.BMMから新しいPicoBlazeプログラムをロードしてみよう。”DATA2MEMの使い方”でやったようにDATA2MEM.EXEを使って.bitファイルのBRAMのプログラムを入れ替えてみよう。
<ISEインストールフォルダ>\bin\nt\data2mem -bm instromn.bmm -bd instromn.mem -p xc3s500e-4fg320 -bt test_lcd4hexdisp.bit
コマンドを実行するとtest_lcd4hexdisp_rp.bitが生成されてBRAMにプログラムがロードされた.bitファイルが生成された。
test_lcd4hexdisp.bitをiMPACTでSpartan3E Starter Kitのボードにダウンロードすると下のような表示になる。(元のまま)
LCD_sample_2_061126.png

次にtest_lcd4hexdisp_rp.bitをiMPACTでSpartan3E Starter Kitのボードにダウンロードすると下のような表示になる。(元の表示に12が追加された)
LCD_sample_3_061126.jpg

これでDATA2BRAMでPicoBlazeのプログラムを書き換えることが出来た。しかし、ISEプロジェクトにINSTROMN.MEM、INSTROMN.BMMを追加して書き換えることが出来なかった。.BMMファイルの書き方がいまいちよくわからない。Xilinxのサイトを検索しても詳しく書いていないし、まだ謎が多い。
情報を持っている方、情報をお待ちしています。
  1. 2006年11月26日 09:56 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:5

MITOUJTAGをインストールした

ET2006でいただいてきたMITOUJTAG体験版をインストールして試してみようとした。
ノートにインストールしてPlatform Cable USBでやってみようとしたらケーブルの項目になかった。今のノートパソコンはUSBしかないのでどうやら使えなさそうだった。試してみたかったのだがしょうがない。パラレルケーブルの使えるノートとパラレルケーブル4もあるので空いたら、そっちにインストールして試してみようと思う。でも早くやらないと体験期間の30日間がすぎてしまう。。。
  1. 2006年11月24日 21:14 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

息子の退院

今日の午前、息子が退院した。
以前にお世話になっていた整形外科の病棟にも車椅子で行ってあいさつをしてきた。いつもやさしかった看護士長さん、お世話になった看護士さんたちにあいさつをしてきた。みんな本当に喜んでくれたようだ。
精神科の看護士さん、先生方も色紙に寄せ書きをしてくれた。涙が出るほどうれしかった。担当の看護士さんも涙が出ていたようだ。医者の先生もほろりときてるような気がした。息子も本当にうれしかったようだ。看護士さん、先生方にエレベータまで見送ってもらって帰った。あまり良い思い出ではないけれど名残惜しいように感じてしまった。
その後私は仕事に行ったのだが、仕事から家に帰れるのがうれしかった。もう病院に行かなくても良いんだ!!
家に帰って夕食を家族全員でした。とてもうれしかった。
まだ、息子は学校に行けない。学校の先生とお医者さんと親で話し合って、どのように学校に戻すのか話し合ってから、だんだんと戻していくのだ。
来週は病院の外来で連れて行かなくてはならない。でも、入院しているよりは100倍良い。
  1. 2006年11月24日 20:54 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

ISEのプロパティを変更してFPGAの性能を変える

さて、もう1つわかっていないようだったのはISEのXSTやImplement Designのプロパティを変更してFPGAの性能を変えられる(見かけだけでも)ということだ。
やってみる前に"ISEのProperty display levelについて”を読んでProperty display levelをAdvancedにしてほしい。
そうしたらまずはXSTのプロパティの設定について見てみよう。最初にProcessesペインのSyntyesize-XSTを右クリックすると。Properties...の項目が出てくるのでそれを選択する。
ISE_properties_1_061123.png

Process Propertiesダイアログが出てくる。Synthesis OptionsのCategoryの中にOptimization GoalというProperty Nameがある。そのValueはプルダウンメニューでSpeedとAreaに設定することが出来る。Speedにすればスピード重視、Areaにすればデザインが占有する領域が少なくなるように論理合成する。
同様にOptimization EffortというProperty Nameがある。このValueはNormalとHighと設定することが出来る。Normalは論理合成に時間はかからないがそこそこの性能、Highは論理合成に時間はかかるが性能はNormalよりも良くなるということだ。(必ずしもそうならないこともあるが。。。)
ISE_properties_2_061123.png

Implement Designのプロパティを見てみよう。もうわかると思うがImplement Designを右クリックしてProperties...を選択する。Process Propertiesダイアログが開く。CategoryからMap Propertiesを選択するとOptimization Strategy(Cover Mode)がある。これはArea, Speed, Blance, Offに設定できる。意味は前と大体同じでAreaを優先してLUT数を少なくするか、Speedを優先してLUT数を増やすか、それともバランスが取れたのが良いか?それともオプティマイズをオフするかを選ぶ。
ISE_properties_3_061123.png

次に同じダイアログのCategoryからPlace & Route Propertiesを選択する。Place & Route Effort Level(Overall)はStandard, Medium, Highの3つがある。エフォートレベルを上げると性能は増すがコンパイル時間が長くかかる。もう1つはStarting Placer Cost Table (1-100)はコストテーブルを変更する。コストテーブルはいろいろな重み付けを変更するようだが、この値を変更するとインプリメント結果が変わる。
ISE_properties_4_061123.png

コストテープルによってインプリメント結果が変わるのでコストテーブルを変更して複数回インプリメントを実行するのがMulti Pass Place and Routeだ。これは以前"Multi Pass Place & Route"の使用方法"として書いたが、バージョンが変更になって場所が変わってしまった。今のバージョンでは先ほどのCategoryがPlace & Route Propertiesの1番最初のPlace And Route Modeをプルダウンメニューで変更しMulti Pass Place & Routeを選択することが出来る。これを選択するとNumber of PAR Iteration (0-100), Number of Results to Save (0-100), Save Results in Directory (dir will appended)を入力することが出来るようになる。

LED点灯やLCD表示、キー操作などは動作周波数は低くても良いのでエフォートレベルはどうでも良いが、周波数の高いDDR SDRAM回路、セットアップ時間のきついPCI66MHzなどはエフォートレベルを最高にしても厳しいことがある。その場合にはフロアプランナーで個別にクリティカルパスをつぶすか、もぐらたたきになる時にはデザインを修正するといった努力が必要になると思われる。
  1. 2006年11月23日 10:39 |
  2. Xilinx ISEについて
  3. | トラックバック:0
  4. | コメント:0

Constrains Editor

今日は4年生にModelSim単体のシミュレーションの仕方、今まで作ってきたボードのFPGAの構造、ISEの使い方について一通り説明した。その時に知らないというので驚いたことが2つあった。1つはConstrains Editorを知らなかったことだ。このブログでも紹介したことがあるがもう一度紹介しようと思う。
ISE8系ではピン配置やIOSTANDARD、出力電流などの制約はPACEで行うが、タイミング関係の制約はConstraints Editorで行う。どちらのツールの制約もUCFファイルに書き込まれることになる。タイミング関係の制約とは動作周波数(クリティカルパスの遅延時間)、入力のクロックからセットアップ時間、出力のクロックからの出力時間などである。
まずはConstrains Editorを起動してみよう。ISEのProcessesペインのUser Constrainsを展開してCreate Timing Constrainsをダブルクリックする。
Constraints_Editor_1_061122.png

Constrains Editorが起動する。
Constraints_Editor_2_061122.png

動作周波数(クリティカルパスの遅延時間)、入力のクロックからセットアップ時間、出力のクロックからの出力時間の設定の仕方は
”UCFの書き方2”を見てほしい。ここではConstraints Editorを制約エディタと書いてある。
”スパルタン3スタータキットでのISE8.1iのチュートリアル5(インプリメンテーション編)”にも動作周波数(クリティカルパスの遅延時間)の入力の仕方が書いてある。
”IOBの入力用FFを活用する”ではConstraints Editorを使用してIOBにレジスタを入れる制約を書いた。
  1. 2006年11月22日 21:58 |
  2. UCFの書き方
  3. | トラックバック:0
  4. | コメント:0

紅葉(朝焼け)

parking_061122.jpg

昨日朝出勤した時の朝焼けの紅葉が見事なので写真を取ってみた。携帯の写真なのであまり色が良くないが見事だった。関東の平地でもきれいに紅葉してきたようだ。
そういえば息子が大分良くなって、ある程度椅子に座れるようになったので今週の木曜日に退院することになった。4ヶ月あまりの入院だったが急に良くなって退院することになり非常にうれしい。
  1. 2006年11月22日 21:27 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

SDRAM動作不良

周波数の偏差はプロトコル側とLVDS側の動作周波数に明確な差をつけて動作するようになった。
SDR SDRAMの読み書きが1ビット反転する状況は変わらない。どうやらSDRAMの根本かダンピング抵抗当たりでとなりのデータビットとショートしているようだ。それでオール0とオール1の読み書きは大丈夫でも、0x55555555や0xaaaaaaaaは1bit間違ってしまうのだろう。業者に送り返して手直しを依頼しようと思う。しかし、3枚作ったうちの2枚がこんな状態で、正常の基板が1枚のみでは非常に困る
最初にブログに公開した時はかなり規則的に誤るビットがずれているように思えたのだが、それはSDRAMテストプログラムのバグだったようだ。
  1. 2006年11月21日 22:36 |
  2. プリント基板の作成過程
  3. | トラックバック:0
  4. | コメント:0

息子の病状(11月18日)

今週も息子は病院から外泊で帰ってきた。
今回は風呂に入ったり、パソコンを見るために20分くらい椅子に座ったりすることが出来た。寝たきりだったので偉大な進歩だ。規則に縛られた病院に帰りたくないため必死で頑張っているようだ。
トイレにいけたり、10分ほどトイレにいければ退院とお医者さんに言われているので、それはクリアしそうだが、もう少し良ると良いな。。。
今は風呂に連れて行くにしても2人がかりで抱えている。そうか、パソコンチェアに腰掛けさせてごろごろ押していけばよいのか。。。

仕事のほうはメモリ関係でまだわけがわからずおかしいのと、各ボードの微妙なクロック周波数の偏差でおかしい状態になっている。クロック周波数の偏差の方はこの週末で対処できたはずだ。
  1. 2006年11月20日 06:27 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

ET2006に行ってきました

ET2006_061116.jpg

今日は午後からですがET2006に行ってきました。
なつたんさん、なふたふさん丁寧な説明ありがとうございました。
後はVirtex-5LXTなどを見てきました。やはりVirtex-5LXTのPCI ExpressボードはUSから1枚しか来ていないそうです。本当にサンプル品ということでしょう。PCI Expressの動作はPIOでですが見られました。その他あまり見ていませんが、メンターグラフィクスのC言語の合成ツールも説明してもらいました。なかなか良さそうでしたが値段が凄いので買えませんね。。。
なひたふさんのCQ出版社での講演も聴いてきました。10日程度でスペクトラムアナライザを作ってしまったのにびっくり。MITOUJTAGもかなり便利そうですが、ちょっとほしい機能がありませんでした。バージョンアップの予定有りとのことなので今後のバージョンアップを期待します。
AVNETのブースにも行ってきました。ESECで名刺をもらったO氏はいらしたのですが対応中でお話できませんでした。お世話になっているM氏にも会えるかな?と思っていたのですが、お見かけできなくて残念です。同じ日にCQ出版社で講演があったのでいらしたとは思うのですが。。。
帰りのTXの秋葉原駅に歴代intelプロセッサチップの下がったクリスマスツリーを発見し写真を撮ってきました。
intel_chip_1_061116.jpg

intel_chip_2_061116.jpg

  1. 2006年11月16日 22:34 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

PSoC® World Tour

PSoC® World Tourに申し込みました。”PSoC®及びCapSenseを使う製品設計に必要なツールは全てご提供させて頂きます”とのことでCコンパイラのライセンスとCapSenseが魅力です。
CypressのPSoC® World Tourのページには申し込みのリンクがありますが、リンクが間違っていて申し込みできません。PSoC World Tourでブログ検索したらedyさんのページがヒットして、そこで申し込みのページを知りました。
今すぐどうこうということはないのですが、アナログ回路をFPGAのように書き換えできるのが魅力です。
  1. 2006年11月15日 09:41 |
  2. PSoC
  3. | トラックバック:0
  4. | コメント:0

DATA2MEMの使い方

プロジェクトをISEでインプリメントし、Generate Programming Filesで.bitファイル(iMPACTでFPGAへダウンロードするためのファイル)を作成する。FPGA内にプロセッサを組み込むとき、またはFPGA内に外部プロセッサのブートコードなどを格納する場合がある。その場合にコアジェネレータで生成したRAMへプログラムをCOEファイルなどで記述するかBRAMプリミティブのINITでプログラムを書くことが出来る。この場合にはシミュレーションで実際のRAMの値を入れたシミュレーションが出来てとても便利である。しかしながら、値を変更すると論理合成からやり直しとなり、プロジェクトの全工程が数時間かかるプロジェクトではプログラムを修正するたびに数時間かかることになる。(もちろんインクリメンタルシンセシスなどを設定していれば別だと思う)
そこでシミュレーションが必要ない状況では、DATA2MEMを使用して出来上がった.bitファイルにプログラムをロードすると時間が相当短縮できる。
そのためには、まずはGCCかなにかでELFファイルを生成する。これは専門でないので生成の仕方は良く知らないがROMイメージにしなければいけないだろう。.bitファイルにあるFPGA内部のブロックRAMの初期化コードにELFファイルのプログラムをロードし、新たな.bitファイルにする。
私の場合は4ビット幅のブロックRAMプリミティブのRAMB16_S4を16個並べて64bit幅にしている。
UCFにそのブロックRAMプリミティブのインスタンスをどこのRAMBにアサインするかを指定する。

INST "rami/IntRami/INTRAMCORE_GEN.0.IntRamCorei/IntRamCore0" LOC = "RAMB16_X9Y14";
INST "rami/IntRami/INTRAMCORE_GEN.0.IntRamCorei/IntRamCore1" LOC = "RAMB16_X10Y14";
INST "rami/IntRami/INTRAMCORE_GEN.1.IntRamCorei/IntRamCore0" LOC = "RAMB16_X10Y18";
INST "rami/IntRami/INTRAMCORE_GEN.1.IntRamCorei/IntRamCore1" LOC = "RAMB16_X10Y15";
INST "rami/IntRami/INTRAMCORE_GEN.2.IntRamCorei/IntRamCore0" LOC = "RAMB16_X9Y16";
INST "rami/IntRami/INTRAMCORE_GEN.2.IntRamCorei/IntRamCore1" LOC = "RAMB16_X8Y16";
INST "rami/IntRami/INTRAMCORE_GEN.3.IntRamCorei/IntRamCore0" LOC = "RAMB16_X8Y18";
INST "rami/IntRami/INTRAMCORE_GEN.3.IntRamCorei/IntRamCore1" LOC = "RAMB16_X8Y17";
INST "rami/IntRami/INTRAMCORE_GEN.4.IntRamCorei/IntRamCore0" LOC = "RAMB16_X9Y15";
INST "rami/IntRami/INTRAMCORE_GEN.4.IntRamCorei/IntRamCore1" LOC = "RAMB16_X11Y15";
INST "rami/IntRami/INTRAMCORE_GEN.5.IntRamCorei/IntRamCore0" LOC = "RAMB16_X8Y15";
INST "rami/IntRami/INTRAMCORE_GEN.5.IntRamCorei/IntRamCore1" LOC = "RAMB16_X11Y16";
INST "rami/IntRami/INTRAMCORE_GEN.6.IntRamCorei/IntRamCore0" LOC = "RAMB16_X10Y16";
INST "rami/IntRami/INTRAMCORE_GEN.6.IntRamCorei/IntRamCore1" LOC = "RAMB16_X11Y17";
INST "rami/IntRami/INTRAMCORE_GEN.7.IntRamCorei/IntRamCore0" LOC = "RAMB16_X10Y17";
INST "rami/IntRami/INTRAMCORE_GEN.7.IntRamCorei/IntRamCore1" LOC = "RAMB16_X9Y17";


このインスタンスはSynplify Proの例である。
この制約を付加したUCFでインプリメントした後にDATA2MEMで.bitファイルを書き換えるわけだが、その前にBMMファイルを作成しなければならない。下に例を示すが、RAMエリアの大きさ、RAMがFPGA内のどのブロックRAMにアサインされているかを書く。大体UCFと同様だ。ただし[0:3]の様にビットの位置を書くのを忘れずに。

ADDRESS_BLOCK dram_controller RAMB16 [0x00000000:0x00007FFF]
// Define the block map for the lower 32k, CPU address 0x00000000 - 0x00007FFF
BUS_BLOCK
rami/IntRami/INTRAMCORE_GEN.0.IntRamCorei/IntRamCore0 [0:3] LOC = X9Y14;
rami/IntRami/INTRAMCORE_GEN.0.IntRamCorei/IntRamCore1 [4:7] LOC = X10Y14;
rami/IntRami/INTRAMCORE_GEN.1.IntRamCorei/IntRamCore0 [8:11] LOC = X10Y18;
rami/IntRami/INTRAMCORE_GEN.1.IntRamCorei/IntRamCore1 [12:15] LOC = X10Y15;
rami/IntRami/INTRAMCORE_GEN.2.IntRamCorei/IntRamCore0 [16:19] LOC = X9Y16;
rami/IntRami/INTRAMCORE_GEN.2.IntRamCorei/IntRamCore1 [20:23] LOC = X8Y16;
rami/IntRami/INTRAMCORE_GEN.3.IntRamCorei/IntRamCore0 [24:27] LOC = X8Y18;
rami/IntRami/INTRAMCORE_GEN.3.IntRamCorei/IntRamCore1 [28:31] LOC = X8Y17;
rami/IntRami/INTRAMCORE_GEN.4.IntRamCorei/IntRamCore0 [32:35] LOC = X9Y15;
rami/IntRami/INTRAMCORE_GEN.4.IntRamCorei/IntRamCore1 [36:39] LOC = X11Y15;
rami/IntRami/INTRAMCORE_GEN.5.IntRamCorei/IntRamCore0 [40:43] LOC = X8Y15;
rami/IntRami/INTRAMCORE_GEN.5.IntRamCorei/IntRamCore1 [44:47] LOC = X11Y16;
rami/IntRami/INTRAMCORE_GEN.6.IntRamCorei/IntRamCore0 [48:51] LOC = X10Y16;
rami/IntRami/INTRAMCORE_GEN.6.IntRamCorei/IntRamCore1 [52:55] LOC = X11Y17;
rami/IntRami/INTRAMCORE_GEN.7.IntRamCorei/IntRamCore0 [56:59] LOC = X10Y17;
rami/IntRami/INTRAMCORE_GEN.7.IntRamCorei/IntRamCore1 [60:63] LOC = X9Y17;

END_BUS_BLOCK;
END_ADDRESS_BLOCK;


これで.bitファイルと.bmmファイルが出来たのでDATA2MEMをコマンドラインから使用してみよう。コマンドラインから以下のコマンドを入力する。
(ISEインストールフォルダ)\bin\nt\data2mem -bm test.bmm -bd test.elf -p (FPGAの型番) -bt test.bit
そうするとtest_rp.bitという.bitファイルが出来ると思う。
今回はコマンドラインから行ったが、ISEに.bmmファイルと.elfファイルを入れておくと自動的にやってくれると思う。(いつのバージョンだったか、実際に入れて試したことがあったがうまく行かなかったために、今でもコマンドラインからdata2memを実行している。ISE8.2iでは大丈夫かもしれない。未確認)
  1. 2006年11月13日 22:29 |
  2. その他のXilinxのツールについて
  3. | トラックバック:0
  4. | コメント:5

息子が外泊で家に帰ってきました

FPGAの話題が少なくて申し訳ないが、病院に入院している息子の話題です。
息子が土日に外泊で病院から家に帰って来ました。
足も地面に着くと痛いということで病院から車まではストレッチャーで、車から自宅のリビングまでは抱えてつれてきました。
ほぼ4ヶ月ぶりの自宅です。庭もレンガで舗装してきれいになっていて、新築している隣の家も大分出来上がっています。環境が変わっていることに驚いていました。家ではリビングに布団を引いて家族で話や一緒に食事が出来るようにしました。
家だと時間で消灯することもないため、いらいらすることがなく穏やかに過ごせたようです。
食事はマクドナルド、大好きなタンドリーチキン、病院では食べられないラーメンなど。
4ヶ月ぶりの自宅を満喫したようです。もう病院に戻りたくないといっていましたが、まだうつ伏せ又は横向き寝たきりの状態です。トイレも尿瓶と差し込み便器なので、自分でトイレにいけるようになってから退院してほしいと言いました。そういうと面白くないようでうなっていました。
日曜日の3時半頃、こんどはタオルケットを担架代わりにして車に息子を乗せて病院に帰りました。
やはり家族が全員そろって団欒できるというのは、何物にも変えがたい良いことなんだなと思いました。
また外泊を重ねることで”良くなって家に帰ろう”というモチベーションがあがって早く退院できることを望みます。
  1. 2006年11月12日 22:25 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

名刺を作りました

11月16日のET2006に持っていくために”FPGAの部屋”の名刺を作りました。(10枚だけですけど、どうせそんなに配りません)
本名と所属が入った名刺はもちろんありますが、この名刺もお知り合いの方やブログでおなじみの方に配りたいと思っています。
(最初は名刺の画像を貼っていたのですが、まずいと思い削除しました。もらってからのお楽しみ。というほどのものでもありませんが。。。)
  1. 2006年11月11日 17:12 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:4

日記(2006年11月9日)

3連休にブログを夢中で書いてしまったので、肩こりがひどくなりマッサージのおじさんのところへ行ってしまった。もう若くないし、あまり夢中になって書かないようにしなくては。。。どうも書き始めて完了しないと気がすまないので困る。

最近、このブログにhttp://jun.artcompsci.org/journal/journal.htmlからのアクセスが非常に多い。どうしたのかと思ったら国立天文台の牧野先生の日記のページに書かれていたようだ。
私もインプレスで見たのだが、牧野先生はGRAPE-DRプロセッサを開発されているそうだ。
すごいプロセッサと思ったが、やはり汎用にするにはメモリ帯域が少々足りないのかもしれない。

最近はいろいろ雑用でなかなかFPGAやれていない。いろいろやることはあるのだが、ISE8.2iもなにかおかしいし。。。
具体的には
8.2i ISE - パッケージ ファイルを不正に使用すると、「WARNING:ProjectMgmt - Problems were detected in the project file during open」という警告メッセージが表示される”でプロジェクトの履歴が残らないで、いつ開いてもチェックマークが消えちゃうとか、
8.1 PACE - 「ERROR:HDLParsers:3014 Library unit package_file is not available in library work」というエラー メッセージが表示される”とかに悩まされている。
このエラーはVHDLのentityに下のように書いてあるためパッケージをはずせないので回避できない。

sdram_a : out std_logic_vector(SDRAM_DEV_ADDR_WIDTH downto 0); -- SDRAM address
sdram_ba : out std_logic_vector(1 downto 0); -- bank address

  1. 2006年11月09日 13:24 |
  2. その他のFPGAの話題
  3. | トラックバック:0
  4. | コメント:0

久しぶりに県西総合公園に行った

kennsei_061106.jpg

昨日は一番下の娘が行きたいといったので、久しぶりに県西総合公園にうちの奥さんと3人で行った。娘が遊具で遊んでいる間に公園の中をうちの奥さんと散歩していた。(写真はうちの奥さんです)久しぶりに歩き、運動になって良かった。落ちているどんぐりやきれいな葉っぱなどを集めた。
次に途中の明野の筑西市の市役所で文化祭をやっていたので見に行ってきた。奥さんと娘はクリスマスリース作りをした。なかなかうまく出来た。
出店が出ていたのでたこ焼きとかき氷を買おうとしたのだが、カキ氷は買ったが、たこ焼きはいかにもまずそうで蝿もたかっていたので止めたのだった。
午後からアピタに出かけておいしい銀だこ(たこ焼き)を買ってきた。息子の入院している病院に持っていって食べたがやはりおいしかった。息子も満足したようだ。
  1. 2006年11月06日 06:05 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

DDR SDRAMコントローラのシミュレーション2(シミュレーションスクリプト)

今度はStart Simulationしてシミュレーションしてみよう。ModelSimのGUIを使いながら、それを参考にして便利なDOファイルを作っていく。
まずはSimulateメニュー -> Start Simulation...を選択する。
DDR_SIM_18_061105.png

Start Simulationダイアログが開くのでworkライブラリの+をクリックして展開する。
workライブラリの中のddrtest_sim_top_cfgを選択する。
Resolutionをpsに指定する。
これでOKボタンをクリックする。
DDR_SIM_19_061105.png

そうするとシミュレーションがスタートし、デザインがロードされて下のような画面になったと思う。
DDR_SIM_20_061105.png

ここでTranscriptペインの表示をコマンド発行時点まで戻してみよう。そうすると
vsim -t ps work.ddrtest_sim_top_cfg
というコマンドを発行しているのがわかると思う。
シミュレーションのスクリプトを記述するファイルをsim.doという名前でテキストエディタで新規作成してこのコマンドを追加しよう。
DDR_SIM_21_061105.png

次にWaveウインドウを表示しよう。Viewメニュー -> Debug Windows -> Waveを選択。
DDR_SIM_22_061105.png

Waveウインドウが開く。Transcriptペインにはview waveコマンドが発行されているのがわかる。
DDR_SIM_23_061105.png

view waveコマンドもsim.doに追加する。Objectペインで右クリックしてAdd to Wave -> Signals in Regionを選択する。
DDR_SIM_24_061105.png

waveウインドウにテストベンチのsignalが追加される。実行コマンドはadd wave sim:/testbench/*だが、ここは別の方法でスクリプトを記述したほうが良いのでsim.doには追加しないことにする。
DDR_SIM_25_061105.png

waveウインドウをクリックしてから、Fileメニュー -> Saveを選択する。
DDR_SIM_26_061105.png

Save Formatダイアログが開く。Waveウインドウのフォーマットをwave.doとしてセーブするためにOKボタンをクリック。
DDR_SIM_27_061105.png

これでwave.doファイルに監視する信号をwaveウインドウに追加するコマンドが書かれた。wave.doの一部を紹介すると下のようになる。

onerror {resume}
quietly WaveActivateNextPane {} 0
add wave -noupdate -format Logic /testbench/clk
add wave -noupdate -format Logic /testbench/reset
add wave -noupdate -format Literal /testbench/lcd_d
add wave -noupdate -format Logic /testbench/lcd_rs
add wave -noupdate -format Logic /testbench/lcd_rw


waveウインドウに信号を追加するスクリプトをsim.doで使うためにsim.doにdo {wave.do}を追加する。
15usシミュレーションするためにTranscriptペインでrun 15usを入力すると15us間シミュレーションすることが出来る。さらにsim.doにも追加しよう。
DDR_SIM_28_061105.png

シミュレーション後のwaveウインドウを示すとカーソルの後ろがDDR SDRAMリードなのだがXになって赤くなっている部分がある。これがなぞである。
DDR_SIM_29_061105.png

Writeの時に1000とEFFFを書き込んでいる。(ちなみにRadixをHexadecimalに変更してある)
DDR_SIM_30_061105.png

だがReadの時にはXXXXと1000が読めてしまう。これは明らかにおかしい。
DDR_SIM_31_061105.png

MicronのVHDLモデルでやった時にはちゃんと1000とEFFFが読めたのだが。。。
DDR_SIM_31_061105.png

これはどうしてそうなのかわからないが、1つ考えられるのはエルピーダ社のDDR SDRAMの使い方のマニュアルの62ページの図8-4 ライト・サイクルでTdqssのminとmax値での違いが書いてある。FMFのDDR SDRAMのVHDLモデルはTdqssのminで出来ているとするとつじつまが合うと思うのだがどうだろうか?
今のところFMFのDDR SDRAMのVHDLモデルをデバックする気はないのでこれまでとする。何か気がついたとことがあったら教えてください。
今回の方法ではなく違う方法で正しくシミュレーションしようと思っている。それはまた後ほど。。。

話を戻すとsim.doのすべてはこうなった。

vsim -t ps work.ddrtest_sim_top_cfg
view wave
do {wave.do}
run 15us


これでコンパイルする時にはTranscriptペインでdo compile.do、シミュレーションする時にはdo sim.doすればよい。
更に下に示す様ににall.doをつくりdo all.doするとコンパイルしシミュレーションする。

do {compile.do}
do {sim.do}


さらにもう1つ。信号を追加した時に再度シミュレーションするスクリプトresim.doも作ってはどうか?

restart -f
run 15us



(2010/01/29:追記)
g14さんからメールで情報をいただきました。その一部を貼っておきます。g14さん、情報ありがとうございました。

VHDLのシミュレーションがうまくいかないとの事ですが。。。
(以下、すでにお気づきかもしれません)

TdqssはDDRのグレードによっては0.75~1.25xTckになります。
設計ではTdqss=1.25xTckとなっていて、これに対してはギリギリのようです。

ちなみに、テストベンチを次のように変更して
sdram_clk <= transport ddr_clk after 3 * delay_time;
sdram_clkb <= transport ddr_clkb after 3 * delay_time;
無理やりTdqss=Tckとすると正しく動作しました。
同様にしてざっと調べたところ、モデルはTdqss=0.8xTck, 1xTckでは動作しますが、
1.1xTckでは動作しませんでした。

以上、ご参考まで。

  1. 2006年11月05日 13:41 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

DDR SDRAMコントローラのシミュレーション1(コンパイルスクリプト)

前回でDDR SDRAMモデルを使うためのFMFライブラリの準備が出来たので、今度はDDR SDRAMモデルを使って実際にDDR SDRAMコントローラのシミュレーションをしてみる。
最初に前回ダウンロードしてもらったDDRtest_IP_061102.ZIPにはPicoBlaze本体が欠けているのでkcpsm3.vhdをダウンロードして追加してほしい。
DDRtest_IP_061102.ZIPはバグがあったのでもう一度ダウンロードしてください。ddr_controller/ddr_sdram_cont.vhdだけ取り替えればOKです。なお例によって保証はありません。自己責任でお使いください。プロジェクトやファイルは個人的に実験するのみで、商用に使用することや再配布は禁止します。)
尚、controllerはModelSim XE �/Starter 6.1eのVHDLバージョンでコンパイル済みのライブラリを使用していますのでこのバージョンのModelSimでないとシミュレーションが出来ません。

Free Model FoundryMT46V16M16のVHDLで書かれたシミュレーションモデルをダウンロードして、前回のgen_utils.vhdのように55~56行目を

USE IEEE.VITAL_primitives.ALL;
USE IEEE.VITAL_timing.ALL;



LIBRARY VITAL2000; USE VITAL2000.VITAL_primitives.ALL;
USE VITAL2000.VITAL_timing.ALL;


に変更しないとエラーが出るので変更した。
前回と同様にModelSimのプロジェクトを作成しよう。ずはModelSim XE �/Starter 6.1eを起動する。起動したらFileメニュー -> New -> Project...を選ぶ。
DDR_SIM_1_061102.png

現在のプロジェクト閉じるけど、続けますか?というダイアログが出るのでOKボタンをクリック。
DDR_SIM_2_061102.png

Create Projectダイアログが出る。Project Nameをfmfに、Project LocationのBrowse...ボタンをクリックしてDDRtest_IP\simurationを指定する。ここではProject NameをDDRtest、Default Library Nameをworkとした。
DDR_SIM_12_061104.png

ここでAdd items to the Projectダイアログが出るが、今回はTranscriptペインでのコマンドおよびコマンドスクリプトでやってみようと思うので Add items to the ProjectダイアログをCloseボタンで閉じる。
次に前回のFMFライブラリとソースがないcontroller.ngcのライブラリをライブラリリストに登録しよう。FMFライブラリについては前回の続きでやっている場合は登録されているかもしれない。その場合はFMFライブラリの登録は飛ばしてほしい。
FMFライブラリは登録しなくてもWorkspaceペインのLibraryタブをクリックすると登録されているようだ。カレントフォルダにあるからだと思うが、されていないときはWorkspaceペインのLibraryタブをクリックした状態で右クリックからUpdataすると登録されると思う。
DDR_SIM_14_061104.png

次にcontroller.ngcのライブラリをライブラリリストに登録しよう。Workspaceペインで右クリックして、New -> Library...を選択する。
DDR_SIM_13_061104.png

Create a New Libraryダイアログが開く。Createセクションのa map to an exiting libraryをラジオボタンで選択。Library Name:にcontorller_sim、Library Map to:に./fmfを入力する。Library Map to:はBrowse...ボタンを選んでファイル選択ダイアログからLibraryを選択しても良いが絶対パスになってしまう。
DDR_SIM_15_061104.png
controller_simライブラリが作成されてライブラリリストに登録される。
DDR_SIM_16_061104.png

次にテキストエディタでコンパイル用のDOファイル(compile.do)を作る。

# Compile.do
# DDR SDRAM Controller
vcom -work work -93 -explicit ../ddr_controller/ddr_controller_pack_sim.vhd
vcom -work work -93 -explicit ../ddr_controller/addr_fifo.vhd
vcom -work work -93 -explicit ../ddr_controller/rddata_fifo.vhd
vcom -work work -93 -explicit ../ddr_controller/wrdata_fifo.vhd
vcom -work work -93 -explicit ../ddr_controller/dcm_module.vhd
vcom -work work -93 -explicit ../ddr_controller/write_data_module.vhd
vcom -work work -93 -explicit ../ddr_controller/read_data_module.vhd
vcom -work work -93 -explicit ../ddr_controller/ddr_sdram_cont.vhd

#PicoBlaze, LCD
vcom -work work -93 -explicit ../LCD_Display_pack.vhd
vcom -work work -93 -explicit ../swdiv.vhd
vcom -work work -93 -explicit ../instrom.vhd
vcom -work work -93 -explicit ../kcpsm3.vhd
vcom -work work -93 -explicit ../lcdopesm.vhd
vcom -work work -93 -explicit ../LCD_operation.vhd
vcom -work work -93 -explicit ../LCD4HexDisp.vhd

# rot_enc input
vcom -work work -93 -explicit ../rotsw_sm.vhd
vcom -work work -93 -explicit ../rot_enc_cont.vhd
vcom -work work -93 -explicit ../in4hexsm.vhd
vcom -work work -93 -explicit ../input_4hex_val.vhd
vcom -work work -93 -explicit ../input_4hex_top.vhd

vcom -work work -93 -explicit ../Test_LCD4HexDisp.vhd

vcom -work work -93 -explicit ../dcm100.vhd
vcom -work work -93 -explicit ../DDRtest.vhd

vcom -work work -93 -explicit mt46v16m16.vhd
vcom -work work -93 -explicit DDRtest_tb.vhd


ModelSimのTranscriptペインでdo compile.doとコマンドを入力するとファイルが順にコンパイルされる。
DDR_SIM_17_061104.png

とりあえずDDR SDRAMコントローラのシミュレーション1(コンパイルスクリプト)はここまで。
  1. 2006年11月04日 08:32 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0

エスティマルシーダのショックアブソーバーを交換

11年乗ったエスティマルシーダを乗っています。最近どうもコーナーや段差でフワつくので、いつもお世話になっているスタンドのおじさんに相談したら、後ろのショックアブソーバーを交換しようということになった。
あまり後ろ2本だけ変えるのはどうかな?と思っていたが、いつもお世話になっているスタンドのオジサンなのでその通りにやってみることにした。
カヤバのショック2本で工賃込みで25,200円だったが、劇的に変わってしまった。コーナーでロールしないし、よく曲がる。曲がる時にだいぶ早くアクセルONできる。コーナーが楽。
今日赤信号で出てくる車がいて急ブレーキをかけたがフワつかない。とても気に入っている。スタンドのおじさんありがとう。
  1. 2006年11月03日 22:26 |
  2. 日記
  3. | トラックバック:0
  4. | コメント:0

DDR SDRAMコントローラのシミュレーション(FMFライブラリを作る)

Free Model FoundryMT46V16M16のVHDLで書かれたシミュレーションモデルを使用してDDR SDRAMコントローラのシミュレーションをしようと思う。まだ、完全には動作してなくてデータの半分がXになっているが、シミュレーションの仕方やDDR SDRAMのタイミングを説明するために公開しようと思う。どこが悪いかわかった方は教えてください。
まずはModelSim XE�/Starter 6.1e用のcontrollerのコンパイル済みライブラリが入ったDDRtest_IP_061102.ZIPを落としてほしい。
(なお例によって保証はありません。自己責任でお使いください。プロジェクトやファイルは個人的に実験するのみで、商用に使用することや再配布は禁止します。)
最初にFMFライブラリをコンパイルしてModelSimのライブラリに追加してmt46v16m16.vhdをコンパイル出来る環境を整えよう。これは他の場合にも生かすことが出来るはずだ。
mt46v16m16.vhdを見るとFMFライブラリのgen_utilsとconversionsを使用している。よって、少なくともgen_utils.vhdとconversions.vhdをコンパイルしてFMFライブラリを作成しようと思う。
最初にFMF Packages Directoryからgen_utils.vhdとconversions.vhdを落としてDDRtest_IP\simurationフォルダの下にコピーしよう。そうしたらgen_utils.vhdの23~24行目

USE IEEE.VITAL_primitives.ALL;
USE IEEE.VITAL_timing.ALL;



LIBRARY VITAL2000; USE VITAL2000.VITAL_primitives.ALL;
USE VITAL2000.VITAL_timing.ALL;


に変更したほうが良いようなので変更することをお勧めします。(mt46v16m16.vhdはこうしないとコンパイルが通らなかったのでこうしています。)
次に、FMFプロジェクトを作成してライブラリ名をFMFにする。まずはModelSim XE �/Starter 6.1eを起動する。起動したらFileメニュー -> New -> Project...を選ぶ。
DDR_SIM_1_061102.png

現在のプロジェクト閉じるけど、続けますか?というダイアログが出るのでOKボタンをクリック。
DDR_SIM_2_061102.png

Create Projectダイアログが出る。Project Nameをfmfに、Project LocationのBrowse...ボタンをクリックしてDDRtest_IP\simurationを指定する。Default Library Nameにfmfを指定する。これでOKボタンをクリック。
DDR_SIM_3_061102.png

Add items to the Projectダイアログが出るのでAdd Existiong Fileをクリック。
DDR_SIM_4_061102.png

Add file to Projectダイアログが開くのでFile NameのBrowse...ボタンをクリックしてプロジェクトにHDLファイルを追加する。
DDR_SIM_5_061102.png

Select files to add to porjectダイアログが開くのでconvesins.vhdとgen_utils.vhdを選択し、開く(O)ボタンをクリック。
DDR_SIM_6_061102.png

Add file to Projectダイアログが再び開きFile Nameの項目にファイル名が入っているのでOKボタンをクリック。
DDR_SIM_7_061102.png

ModelSimに戻るとconvesins.vhdとgen_utils.vhdがWorkspaceペインのProjectタブに表示されているのに気づくと思う。
DDR_SIM_8_061102.png

次にこれらのファイルをコンパイルしてみよう。ModelSimのWorkspaceペインで右クリックするとメニューが出てくる。そこからCompile -> Compile Order...を選択する。
DDR_SIM_9_061102.png

Compile Orderダイアログが開く。下のAuto Generateボタンをクリックする。
DDR_SIM_10_061102.png

自動的にコンパイルしてくれる。ModelSimに戻るとWorkspaceペインのStatusフィールドにチェックマークがついているのが見えると思う。
DDR_SIM_11_061102.png

これでライブラリのコンパイルは終了した。次はDDR SDRAMコントローラのシミュレーションプロジェクトを作成してfmfライブラリをライブラリ群に追加することにする。
  1. 2006年11月03日 17:02 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:0