FC2カウンター FPGAの部屋 PicoBlazeの命令用BRAMにプログラムをDATA2MEMでロードする
FC2ブログ

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

FPGAの部屋

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

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

コメント

こんにちは。とりあえず、いくつか試してみました。合成するときのオプションを調べてみると、bmmファイルを読み込むのはNGDBuild、memファイルを読み込むのはBitGenのようです。
Implement DesignのプロパティのOhter Ngdbuild Command Line Optionsに-bm ほにゃ.bmmと入力してやると、bmmファイルが反映されるみたいです。
memファイルを書き換えただけだと、BitGenを再実行してくれないので、手動で Rerunしてやる必要があります(ISEってお馬鹿><)。
とりあえず、うちではこんな感じでそれっぽいことができましたが、もうちょっと何かあるのではないかと思います。
  1. 2006/11/29(水) 00:36:15 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

コメントありがとうございます。
Implement DesignのプロパティのOhter Ngdbuild Command Line Optionsに-bm ほにゃ.bmmと入力してやらなくても.bmmがNGDBuildでフォーマットエラーでした。
.memは.bitファイルを書き換えるのでBItGenですよね。
たしかソフトウェアでローダーでロードするオブジェクトモジュールは例えばブランチのアドレスなどはラベルがついていますよね。.bitファイルをテキストエディタで見るとラベルらしいものは見えませんでした。
なのでISEでLOC制約を指定しない場合はなんらかのその他のファイルを使用するのではないかと思っています。つまりDATA2MEMだけではその他のファイルを参照しない限りLOC制約(絶対位置の指定)をつけないと.bitファイルを書き換えられないのではないでしょうか?

Implement DesignのプロパティのOhter Ngdbuild Command Line Optionsに-bm ほにゃ.bmmと入力してやってみたいとおもいます。ありがとうございました。
  1. 2006/11/29(水) 05:55:32 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

-bmはなくてもいけました。
昨日やったことは8bit×2kのromを順に読み出しながらLEDに表示するというものです。ブロックRAMの位置は一旦合成してから、FPGAエディターのアトリビュートで見つけて、ucfファイルに反映させました。
今日は管理人様のプロジェクトをダウンロードして↑と同じようにやってみました。何が違うのかいまいち不明ですが、一応ISEの中からできています。
  1. 2006/11/30(木) 00:43:45 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

こんにちは。いろいろ試してもらえてありがとうございます。
私のところではだめですね。コマンドラインでやることにします。
ありがとうございました。
  1. 2006/11/30(木) 22:31:28 |
  2. URL |
  3. marsee #-
  4. [ 編集 ]

少なくともbmmファイルとucfへの追加分は上のものをコピペしただけですので、内容に問題はないと思います。
こちらこそ、おつきあいいただきありがとうございました。
  1. 2006/12/02(土) 07:22:23 |
  2. URL |
  3. Sim #mQop/nM.
  4. [ 編集 ]

コメントの投稿


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

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