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:31

ISE 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に入れました。
下記のところに入っているのでご自由にお使いくださいませ♪

https://github.com/aquaxis/aquaxis

mb_mcsのスクリプトはFedora 16で試したので、Windowsで動作するかはわかりません。
もし、わからないことがあれば@hidemi_ishiharaまでツイートしてくださいませ。
それなりに対応します。

それ以外はドキュメント生成までお待ちくださいませ。