FC2カウンター FPGAの部屋 2006年01月12日
FC2ブログ

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

FPGAの部屋

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

Xilinx 社製FPGA を搭載したPCI ボードのシミュレーション1

2年ほど前に書いた技術報告があるので載せます。シミュレーションについて書いてますが、独りよがりな所も目立つ気がします。4部作くらいかな?です。
ーーーーーーーーーーーーーーーーーーーーーーーー

1. はじめに
 私はXilinx 社のFPGA(Field Programmable Gate Array)を使用して、論理回路を作製している。規模の比較的大きい回路を開発する際、まず機能モジュールに回路を分割し、機能モジュールごとに回路を作成する。次に機能モジュールを組み合わせて全体の回路を完成させるという手順を取る。仕様通りに動作する回路を作製するためには、各手順ごとに回路が動くかどうかをテストする工程が必要となる。まずは、分割された機能モジュール単位でシミュレーションを行う。このような、機能モジュール単位のシミュレーションは、簡単な入力信号に対して、仕様どおりに出力が出てくるかを確認する。この時に、入出力信号を規定するのがテストベンチと呼ばれるファイルである。テストベンチは通常ハードウェア記述言語(HDL)で書かれている。直接HDL でテストベンチを書くのは難しいので、グラフィカルにテストベンチを生成するツールが存在する。後でそのツールの1 つであるXilinx 社のHDL Bencher を紹介する。
 次に機能検証の終わった機能モジュールを組み合わせて、目的の回路を作り上げる。その回路に対してシミュレーションで動作を確認する。これを全体シミュレーションと呼ぶことにする。全体シミュレーションでも先ほどのツールを使用することは出来るが、複雑な手順を必要とするシミュレーションには不適である。
 複雑なシミュレーションを実現する場合には、シミュレーション用モデルを作りこんで、検証すると便利である。その場合、シミュレーション用モデルの複雑さのレベルが問題になる。余り複雑なモデルであると、検証する回路よりも複雑になってしまうことがある。検証スピードは、複雑なモデルの方が簡単なモデルよりも遅くなる。本稿では、比較的実行スピードの速い簡単なモデルを用いた回路のシミュレーションについて述べる。

2. 対象回路
 今回検証に使用するのは、ネットワークカード(NI)のFPGA に実装した回路である。これを以降NI FPGA 回路と呼ぶことにする。NI はホストコンピュータの64 ビット66MHzPCI バスに挿して使用するPCI カードである。NI はホストコンピュータのデータをPCI バス越しに吸い上げて、LVDS(Low Voltage Differential Interface)信号で、他のコンピュータに転送する。NI はPowerPC プロセッサ、LVDS、64 ビット66MHzPCI バス、FLASH ROM、SDRAM、NI FPGA 回路、CPLD で構成されている。図1にNI のブロック図を示す。NI FPGA 回路は、ほとんどすべてのデバイスを制御している。よって、NI FPGA 回路をシミュレーションする場合には、それらのモデルを接続しなければならない。今回は回路、モデルともVHDL(VHSIC Hardware Description Language) で実装した。
sim_zu1_060113.png

図 1 NIのブロック図

3. HDL Bencher を使用した機能モジュールの回路シミュレーション
 Xilinx のツールISE6.1i に統合されているHDL Bencher を使用したSDRAM制御回路の回路検証例を示す。
SDRAM制御回路はすべてVHDL で書かれている。HDL Bencher は入力信号をグラフィカルに編集して、VHDL のテストベンチを生成するツールである。このツールを使用すると、簡単にテストベンチを生成することが出来る。HDL Bencher の起動時にクロックがどの信号なのかを指定する。指定したクロックに対して入力信号のセットアップ時間と、出力信号の出力時間を設定する。次に入出力波形がタイミングチャートで表示され、波形入力モードとなる。図2 にHDL Bencher の画面を示す。
sim_zu2_060113.png

図 2 HDL Bencher表示

図2 で上から4 つまでの右向きの青色の箱は入力、下から4 つまでの左向きの黄色の箱は出力を表す。図2 のように、入力波形をタイミングチャートでグラフィカルに編集して、VHDL のテストベンチ記述を生成する。図2では、405000psec でglobal_cmd に00800001、cmd に1 を入力している。その後、420000psec でcmd を0 に戻している。これはSDRAM制御回路に対する1 ロングワードのリード要求である。
 テストベンチは入力波形を記述したVHDL ファイルである。HDL Bencher から出力されたテストベンチは、入力の1 から0、0 から1 の変位が時間を追って書かれている。テストベンチと実際の回路(ここではSDRAM制御回路)を波形シミュレータModelSim でコンパイル、シミュレーションして、入力波形に対する出力波形の様子を確認する。出力波形を図3 に示す。HDL Bencher で入力した入力信号に対する出力信号をタイミングチャートで見ることが出来る。
sim_zu3_060113.png

図 3 ModelSimによるシミュレーション波形

図3 の時刻405nsec のときにcmd が1になって、SDRAM 制御回路へのコマンド入力となる。global_cmdとlocal_cmd はSDRAM制御回路へアドレスや動作モードを通知するために使用される。その後、SDRAM制御回路は415nsec でACTIVATE コマンド、445nsec でREAD コマンドをSDRAM に対して出力し、SDRAMリードを行う。その後、プリチャージコマンドを475nsec に発行して、SDRAMリードサイクルを終了する。
 このように、実際にFPGA に回路をダウンロードして、ロジックアナライザで確認することなく、回路の動作状況を確認できる。図3 の段階でのシミュレーションは論理シミュレーションと呼ばれる。
 FPGA の開発手順は、VHDL などのHDL ファイルや回路図を元に、論理合成、配置配線を行ってFPGAの構造に合わせた回路に変換し、それをFPGA にダウンロードする。その際に、HDL ファイルや回路図の回路がそのまま最終回路になるわけではない。ツールがFPGA 独自の回路方式に合わせるために、中間の論理を変更する。そのために、自分で定義したノードが消されていることがある。論理合成後にシミュレーションを行うと、前述した理由でノードが消されている場合があるため回路の動作の解析が難しい。
 論理シミュレーションでは、論理合成する前のソースファイルに対してシミュレーションを行うので、論理合成によって消されたノードはなく、自分で定義したすべての信号を見ることができる。これは、バグの発見をより容易にする。
  1. 2006年01月12日 23:49 |
  2. シミュレーション
  3. | トラックバック:0
  4. | コメント:4