準備の準備
1-1.はじめに
本チュートリアルは、特電PCI Express評価ボードを使ったシステムの開発について説明します。
1-2.ベンダIDとデバイスIDを決める
特電PCI Express評価ボードを使った開発で最初にやるべきことは、PCIのベンダIDとデバイスIDを決めることです。
ベンダIDとデバイスIDは、それぞれ16bitの値で、PCIの規格団体(PCISIG)が管理しています。ベンダIDを得るにはPCISIGの会員にならなければなりません。なお、会費は1年間で00です。
ベンダIDは、本来はPCISIGから値を割り当ててもらわなければなりませんが、(社内や自宅など)閉じた範囲内で実験するのであれば、既存のIDとかぶらないように自由に設定すればよいでしょう。ただし、絶対に外部に流出しないよう気をつけてください。
また、特殊電子回路はベンダID 0x1BC8を割り当てられていますので、本ボードでサンプルデザインを動かす場合にはVID=1BC8、DID=1234を使用していただいて構いません。
1-3.サンプルVHDLコードにVIDとDIDを設定する
特電のホームページから、PCI Expressコアのサンプルデザイン「GPIOサンプル」をダウンロードします。
このファイルを解凍すると、main.vhdというファイルがあります。
テキストエディタでmain.vhdを開きます。85行目付近にベンダIDとプロダクトIDの設定箇所があります。
この場所に、先のベンダIDとデバイスIDを4桁の16進数で記入します。
constant customize_c : std_logic_vector(159 downto 0) :=
x"FF000000" -- [159:128] bar2 addr space (16MBytes)
& x"FFF00000" -- [127:96] bar1 addr space (1MBytes)
& x"FFFFC000" -- [95:64] bar0 addr space (16kBytes)
& x"110000" -- [63:40] class code
& x"01" -- [39:32] revision id
& x"1234" -- device id
& x"1BC8" ; -- vendor id
1-4.INFファイルにVID、DIDを設定する
特電のホームページから、PCI Expressの「汎用デバイスドライバ」をダウンロードします。
このファイルを解凍すると、中にtkdnpcie.infというファイルがあります。
テキストエディタでtkdnpcie.infを開きます。最終行にベンダIDとプロダクトIDの設定箇所があります。
この場所に、先のベンダIDとデバイスIDを4桁の16進数で記入してください。
[Strings]
TOKUDEN = "特殊電子回路株式会社"
NP1025A.DriverDesc = "NP1025A PCI Express 評価ボード"
Generic.DriverDesc = "PCI Express Generic Device Driver"
TokudenPcie.SvcDesc = "特電 PCI Express デバイスドライバ "
SERVICE_KERNEL_DRIVER=1
SERVICE_AUTO_START=2
SERVICE_DEMAND_START=3
SERVICE_DISABLED=4
SERVICE_ERROR_NORMAL=1
PCI_VEN_DEV_ID=PCI\VEN_1BC8&DEV_1234
1-5.XILINX WebPACK ISEをセットアップする
XILINX社のWebサイトからFPGAの開発ツールである「WebPACK ISE」をダウンロードします。
WebPACKは無償でダウンロードすることができます。最新バージョンは11です。当社ではISE 11を用いて開発・検証を行っています。WebPACKをダウンロード(数Gバイトあります)したら、インストールし、セットアップしてください。
1-6.サンプルデザインを論理合成する
特電PCI Expressコアのサンプルデザイン「GPIOサンプル」を解凍したら、そのフォルダの中にIPコアのネットリストファイル(pciecore.ngc)をコピーします。ネットリストファイルは、「IPコア」からダウンロードできます。
なお、GPIOサンプルの解凍先は、空白文字や日本語文字を含まないフォルダにしてください。そうしないと、WebPACKの動作に影響をきたす恐れがあります。
WebPACKを起動したら、その中にGPIOサンプルの中にあるプロジェクトファイル(fpga.ise)を開き、次の図のような画面が開きます。
画面左上のツリー表示の、main と書かれたところにカーソルを合わせます。
次に、「Generate Programming File」を右クリックし、Rerun Allを実行します。
上の操作を行うと、FPGAの論理合成と配置配線が行われます。
論理合成と配置配線には2~3分を要します。
もし途中でエラーが出てしまう場合は、
・ベンダIDとプロダクトIDは正しく設定されているか
・ネットリストファイル(pciecore.ngc)がプロジェクトのフォルダにコピーされているか
・プロジェクトのフォルダ名に、空白文字や日本語文字が含まれていないか
などを確認してください。
1-7. XILINX ISE11の設定オプションにご注意!
XILINX FPGAの開発を行うにはXILINX ISE (またはWebPack)が必要ですが、ISE11のデフォルトの設定では、I/O内のフリップフロップが使われる設定になっていません。このため、入出力のタイミングをきっちり作った正確に作ったつもりでも、予期しない遅延が入ってしまって、正確なタイミングを出せないことがあります。周辺ICとのインタフェースにおけるセットアップ・ホールドタイムの不足や、論理合成後のタイミングエラーを引き起こします。
具体的に言うと、
process(clk) begin if(clk'event and clk='1') then input_signal_X <= input_signal_X_ip; output_signal_X_op <= output_signal_X; end if; end process; |
のように書くと、input_signal_Xやoutput_signal_XにはIOB内のIFFやOFFが適用されることが期待されます。しかし、ISE11ではそうなりません。CLB内の通常のFFが使われてしまいます。
この問題を回避するには、Implement DesignのオプションでProcess Propertyを開き、
次にMap Propertiesタブを開いて、Pack I/O Registers/Latches into IOBsをFor Input and Outputsにします。
論理合成後のDesign Summaryで、IOB Propertiesを見たときに、IFF1やOFF1が使われいれば成功です。
貴方の設計したI/Oは、設計したとおりのタイミングで動くでしょう。
ISE11では、この設定をしないと、正しく動作しないデザインが出来上がってしまいます。
1-8.出来上がったファイルの確認
論理合成と配置配線が完了すると、あなたの決めたベンダID、デバイスIDの入ったBitStreamファイルが生成されます。
BitStreamファイルの名前はmain.bitです。
このファイルが出来上がったことを確認しておいてください。