Terasic DE0ボードでのUSB通信②
前回記事の続きです. kazu1995.hatenablog.jp 今回は,前回記事で行ったJTAGの基本命令であるIDCODEの取得に加え, 自らが作成した命令を介してDE0に搭載している7セグメントLEDやLEDGの点滅操作, SWの状態取得,またFPGA内部にある数値の取得を行います.
1.事前準備
- JTAG通信に必要なD2XXドライバを入手します.FTDI社のWebサイトより入手可能です.
以下リンクよりWindows版を入手,i386フォルダにあるftd2xx.dllを使います(使い方は後ほど).
D2XX Direct Drivers - DE0のピン配置ファイルを入手します.
自作することも可能ですが,今回は製造元であるTerasic社から入手したいと思います.
DE0製品ページのResources > DocumentsからDE0 Debounce Projectをダウンロードし,DE0_TOP_NewフォルダにあるDE0_TOP.qsfを使います(使い方は後ほど).
Terasic - All FPGA Main Boards - Cyclone III - Altera DE0 Board
2.ソースコード
以下サイトにて公開しています.Download ZIPをクリックすることでコードを一括ダウンロードすることができます.
Experimental code of Virtual JTAG ( http://kazu1995.hatenablog.jp/entry/2017/11/18/202718 ) · GitHub
3.QuartusⅡの操作
QuartusⅡを起動し,以下の操作を行います.
- File > New Project Wizardからプロジェクトを作成
- Page1: working directoryはお好みで指定,project nameはCycloneと入力*1
- Page2: Add Filesに配布しているCyclone.vhdを指定しadd
- Page3: Family > Cyclone Ⅲ,Available devices > EP3C16F484C7を指定*2
- Page4: EDA Tool Settingsはお好みで
- Page5: Finishでプロジェクトの完成です
- Assignments > Import Assignmentsから,Terasic社より入手したピン配置ファイル(DE0_TOP.qsf)を指定します
- Tools > MegaWizard Plug-In ManagerからMegafunctionsを作成します
- Page1: Create a new custom megafunction variationを選択
- Page2a: Virtual JTAGを選択し,What name do you want for the output file?の入力欄の末尾にvirtualjtagと入力*3
- page3: ここからVirtual JTAGの具体的設定を行います,How wide should the instruction register be? > 8を指定
- Finish(Page4~6は無視して構いません)
- Quartus Ⅱ IP Filesに関するメッセージボックスが出現したらYesをクリック
- あとはコンパイルしてDE0に.sofファイルを書き込みます
4.Visual Studioの操作
Visual Studioを起動し,以下の操作を行います.
- ファイル > 新規作成 > 既存のコードからプロジェクトを作成
- 作成するプロジェクトの種類 > Visual C#を選択
- ファイルの場所には先程ダウンロードしたソースファイルのあるフォルダを指定し,好きなプロジェクトの名前とを入力後,出力の種類にはコンソール アプリケーションを指定
- プロジェクトはこれで出来上がり
- プロジェクト > プロパティから,ビルドを開く
- プラットフォームターゲット > x86を選択,アンセーフコードの許可にチェックを入れる
- ビルドをし,生成される.exeファイルと同じディレクトリにD2XXドライバ,ftd2xx.dllを配置
5.USB通信を行う
DE0に書き込んだあと,Visual Studioを用いて生成した.exeファイルを実行してください. 無事に起動すると次のような画面が現れると思います. 色々試して遊んでみてください. ソースファイルの説明はまた改めて行います.感想や改良案など,お待ちしています.
(2017/11/20追記)
ソースコードをC# 7.0対応(Visual Studio 2017~)で書いていたため一部修正しました.現在公開しているコードについてはC# 3.0対応(Visual Studio 2008~)となっています.