月曜日, 10月 15, 2007

LatticeMico32 シミュレーション

前回の続き

で、今回はシミュレーションまでやってみる。

ちなみにこの内容はDesignWaveMagazineの2007年10月号の記事を参考にしています。

RTL,テストベンチのコードはそのCD-ROMに収録されているものを使用していますのでお持ちでない方はあしからず。

まずシステムの構成ですが、プロセッサのコアと命令用およびデータ用のSRAM関連のほかにUARTインタフェースモジュールとLED制御用のレジスタがあります。

記事によると、まずスタートアップ後にUARTからmessage("This is a message from Mico32 processor.\n")が出力されます。
その後、UARTに関しては受信したキャラクタをそのまま送り返すようになっています。

また、LEDは約0.5秒ごとに2つのLEDが点灯・消灯を繰り返すとのこと。

ModelSimで約1秒間のシミュレーションを行った結果の波形は次のようになりました。



確かに2つのLED(ledの下位2ビット)が約0.5秒間隔で点灯と消灯を繰り返している模様。

次に先頭の部分を拡大。



詳細は確認していませんが、UARTがなにやら送信していることがわかります。

次にその少し後を拡大。



受信したコードをそのまま送信していることが確認できます。

というわけで、シミュレーションでなんとなく動作していることもわかりました。

ちなみに今回、ModelSim XE Starter とModelSim PE とで実行時間の比較を行いました。

結果は1,009,312,600nsのシミュレーションに対して、実行時間が

XE Starter・・・2921.70seconds
PE ・・・1024.16seconds


PCのスペックは
OS : Microsoft Windows XP SP2
CPU: Intel(R) Core(TM)2 CPU 6400 @ 2.13GHz
RAM: 2.75GByte

です。

Xilinxのサイトによると、10000行以下のデザインであればXE staterの実行速度はPEの30%とのことなので大体そのとおりになっているようです。

ただ、10000行を超えるとXE starterの性能はガタ落ちのようなので実際にプロセッサを組み込んでシミュレーションを行う場合はもっと上のグレードか他のシミュレータを選んだほうがよさそうです。

今回のデザインでコメントを除いた行数は大体8,500行ぐらいでした。

ただ1点気になるのは、DWMの記事ではボーレートを50MHzのクロック入力で115,200bpsに設定してあると書いてあるのですが(そしてソースコード上のパラメータもそうなっている)、テストベンチのクロックの周期は4000としてあります。
タイムスケールが設定されていないのでよくわかりませんがpsだとすると25MHz。
これは単純なミス?

たぶん実際は50MHz入れてやればよいのでしょう。

今日はここまで。

次回は実際にFPGAに実装して動作確認をしてみようと思います。

0 件のコメント: