MicroBlaze+LANって、いる?
January 28, 2012 01:45:13ここ2ヶ月ぐらいほぼ終電の日々が続いている。
終電近くに帰っても、MicroBlazeとか作ってたりするからまだ余力があったりして・・・(苦笑)
あいかわらず、タスクが多すぎて何が優先順が高いのかわからない日々が続いている。
なんかいいタスクマネージャー無いかな?
ToDo管理とも言うけど・・・(^-^;
以前は自分用のToDoマネジャーを作ろうと思ったけど、そんな暇ないしねぇ。
こう忙しい方がいろいろと何かと作れたりするんですなあ。
暇な方が意外とダラケたり・・・
MicroBlazeは一旦、落ち着いたのでMicroBlazeでLANを動かしたいなんて欲しい人いるだろうか?
SMSCやVitesseとかのEthernet PHYがFPGAに付いていて、LANをどうしても動かしたいって人がいたら作ってみましょうか?
作るなら、せめて実機は欲しいけど・・・
TCPのプロトコルスタックを作るところまではしないけど、UDPだけでいいなら、1日あれば、デバッグ完了まで進められるかな?
もちろん、ハード上で物理的な間違いがなければの話だけど・・・
MircoBlaze MCSで遊ぶ手順
January 27, 2012 13:01:00改めて手順を登録した。
でも、リアルタイムで表示されない。
なんでだろう?(^-^;
MicroBlaze MCSで遊ぶ手順
January 27, 2012 12:59:31ISE 13.4 WebPackのCoreGenで生成できるMicroBlaze MCS+gccでクロスコンパイルしてソフトウェアをシミュレーションするまでの手順です。
環境はFedora 16 64bitです。
Windowsの環境では試していませんのでやってみたい方は挑戦してください。
cygwin辺りでできるのではないかと思います。
●MicroBlazeの生成
まずは本命のMicroBlazeを生成します。
ISE 13.4 WebPackでMicroBlazeを作るためだけのプロジェクトを作成し、CoreGenでMicroBlazeを生成します。
これは時間がかかりますが、気長に待って作りましょう。
Interupt、タイマー、I/Oは好みで付けます。
サンプルプログラムでは、下記のMicroBlazeの環境を使用しますので、手っ取り早くサンプルでシミュレーションしてみたい人は下記のように合わせてください。
(未記入は設定していないという事です)
ファイル名:mb_mcs
MCS
Path to Core Instance:mb_mcs
Input Clock Frequency(MHz):100.0
Memory Size:65KB
Enable IO Bus: On
UART
Enable Receiver: On
Enable Transmitter: On
Degine Baud Rate: 115200
Number of Data Bits: 8
FIT
Use Timer: On
Number of Clock Between Strobes: 6216
Generate Interrupt: On
PIT1
Use Timer: On
Number ob Bits for Timer: 32
Shall Counter Value Be Readable: On
Define Prescaler: External
Generate Interrupt: On
GPO1
Use GPO: On
Number of Bits: 32
GPI1
Use GPI: On
Number of Bits: 32
Interrupts
Use External Interrupts: On
Number of External Interrupts: 0x0000
Positive or Negative External Interrups: 0xFFFF
注意はUARTの分周比はここで埋め込まれるので実際に使用するときはCPU周波数を使用したい周波数に合わせなければいけません。
MicroBlazeを生成するとプロジェクトのディレクトリの下にipcore_dirというディレクトリができています。
ここに「mb_mcs.v」というVerilogのネットリストが出来上がっています。
ここではこのファイルを使用して、シミュレーションからインプリメントまで行います。
●環境生成スクリプトとサンプルのダウンロード
MicroBlazeやクロスコンパイル環境の生成スクリプトやサンプルなどを下記のgithubからcheckoutします。
% git clone https://github.com/aquaxis/aquaxis.git
又はWebブラウザで下記にアクセスして、ダウンロードしてください。
http://github.com/aquaxis
特にgithubについて明記しませんが、わからない人はWebで調べましょう。
% cd aquaxis/MicroBlaze
●クロスコンパイラの生成
まずは、クロスコンパイラを生成します。
先日、アップロードしたスクリプトで生成済みなら、ここは飛ばします。
クロスコンパイラは「/usr/microbale」にインストールするので最初にディレクトリを作っておいて、パーミッションも設定しておきます。
% su
% make /usr/microblaze
% chmod 777 /usr/microblaze
% exit
下記のようにCrossCompilerのディレクトリに移動してから、クロスコンパイラ生成スクリプトを実行します。
スクリプトは実行するとインターネットからコンパイラをダウンロードしてきて、インストールするので大変時間がかかります。
% cd CrossCompile
% ./make_microblaze_gcc
% export PATH=$PATH:/usr/microblaze
●MicroBlazeの解体とRAMの生成
CoreGenで生成したMicroBlazeを使いやすいように解体して再生成します。
% cd MicroBlazeMCS
% cp ~/hogehoge/ipcores/mb_mcs.v .
% perl ./make_mb_mcs.pl
これで下記の3つのファイルが出来上がります。
mb_mcs_new.v // 新しいMicroBlazeのネットリスト
mb_mcs_ram.v // MicroBlazeのインストラクション&データRAM
mb_mcs_ram.bmm // BMMファイル
入力したいファイル名やモジュール名、出力ファイル名、RAMのサイズなどを変更したい場合はmake_mb_mcs.plの下記のところを変更してください。
# 必要に応じて変更すること
$ORG_SOURCE = "mb_mcs.v"; # CoreGenで生成したMB_MCSのファイル名
$NEW_SOURCE = "mb_mcs_new.v"; # 新しく生成するMB_MCSのファイル名
$MODULE_NAME = "mb_mcs"; # モジュール名
$MB_RAM_SIZE = 64; # インストラクションRAMのサイズ: 4, 8, 16, 32, 64
RAMのサイズについては現状、RAMのサイズは8KBと4KBには未対応なので使用しないでください。
●サンプルプログラムのコンパイル
次にソフトウェアを準備します。
ディレクトリを移動し、コンパイルします。
% cd ../CrossCompile/Sample/HelloWorld
% make
無事、HelloWorldが出来上がったら、これをシミュレーションする場所にコピーします。
% cp HelloWorld ../../../MicroBlazeMCS/
●シミュレーションモデルの生成
シミュレーションはコマンドラインでシミュレーションモデルを生成します。
シミュレーションをするためにディレクトリを移動します。
% cd ../../../MicroBlazeMCS/
シミュレーションを行うために、makeします。
% make
ディレクトリを移動後、makeすることでHelloWorldのプログラムをシミュレーションで使える形に変換します。
変換後、シミュレーションモデルを生成します。
成功すると「program.v」と「tb_mb_mcs」が出来上がります。
「program.v」がプログラムの初期データです。
「tb_mb_mcs」がシミュレーションモデルになります。
●シミュレーション
下記のようにシミュレーションを実行します。
% ./tb_mb_mcs
コマンドプロンプトが出てきたら、「run all」でシミュレーションを実行します。
ISim> run all
Project NavigatorからiSimを実行した時に開くGUIベースの波形画面は、下記のように実行するとウィンドウが開きます。
% ./tb_mb_mcs -gui
●インプリメント
インプリメントは下記の4つのファイルを使用します。
mb_mcs_new.v
mb_mcs_ram.v
program.v
ISEでインプリメントしてください。
PlanAheadでインプリメントすると、なぜかprogram.vがSyntax Errorになります。
これはXilinxのバグだと思います。
複数のMicroBlazeを実装したい場合は、「mb_mcs_ram」と「program.v」をうまく分けることで、対応することできます。
mb_mcsのシミュレーション手順
January 26, 2012 07:40:26ソースコードが貼り付けられなかったから、手順も一緒にアップできてなかった。
まず、ISE WebPackでプロジェクトを作成します。
次に普通にCoreGenでMicroBlaze MCSを生成します。
UART、I/O、GPIOやInterruptなどは好みで付けてください。
生成できるまでに時間がかかることでしょう。
できるまで、気長に待ちましょう♪
ここでは、作成したモジュール名をmb_mcsとします。
プロジェクトのディレクトリの下にipcode_dirというディレクトリがあるのでここを覗いてください。
mb_mcs.vが出来上がっています。
これを使用します。
githugから落としてきたファイルのあるディレクトリにmb_mcs.vをコピーします。
CoreGenが生成したネットリストを解体して再構成するスクリプトを実行します。
ここでやるのはCoreGenが生成したネットリストからRAMを取り外し、都合のいいように新しいRAMをくっつけます。
% perl ./make_mb_mcs.pl
下記の3つのファイルが生成されます。
mb_mcs.new.v
mb_mcs_ram.v
mb_mcs_ram.bmm
下記のファイルはシミュレーション用に用意しておきます。
tb_mb_mcs.v
tb_mb_mcs.prj
task_uart.v
ELFファイルの変換とシミュレーションの実行ファイルを生成します。
% make
ソフトはprogram.vにデータが生成されます。
コマンドライン上でシミュレーションモデルを実行します。
% ./tb_mb_mcs
ISim> run 3ms
インプリメントは下記の3つのファイルを使います。
mb_mcs.new.v
mb_mcs_ram.v
program.v
これら、3つのファイルをプロジェクトから見える部分に置きます。
新しいプロジェクトを作成して、これらのファイルを登録します。
そして、インプリメントします。
あとはご自由にお使いくださいませ♪
詳しいことは、ツイッターで聞いて下さいませ。
mb_mcsのスクリプトをgithubにアップ
January 26, 2012 02:21:09スクリプトとか、ブログに貼り付けることが出来なかったので、githubに入れました。
下記のところに入っているのでご自由にお使いくださいませ♪
mb_mcsのスクリプトはFedora 16で試したので、Windowsで動作するかはわかりません。
もし、わからないことがあれば@hidemi_ishiharaまでツイートしてくださいませ。
それなりに対応します。
それ以外はドキュメント生成までお待ちくださいませ。

