kazu_1995’s diary

北の高専→大学生→院生→社会人のブログ

Terasic DE0ボードでのUSB通信②

前回記事の続きです. kazu1995.hatenablog.jp 今回は,前回記事で行ったJTAGの基本命令であるIDCODEの取得に加え, 自らが作成した命令を介してDE0に搭載している7セグメントLEDやLEDGの点滅操作, SWの状態取得,またFPGA内部にある数値の取得を行います.

1.事前準備

  1. JTAG通信に必要なD2XXドライバを入手します.FTDI社のWebサイトより入手可能です. 以下リンクよりWindows版を入手,i386フォルダにあるftd2xx.dllを使います(使い方は後ほど).
    D2XX Direct Drivers
  2. 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Ⅱを起動し,以下の操作を行います.

  1. File > New Project Wizardからプロジェクトを作成
  2. Page1: working directoryはお好みで指定,project nameはCycloneと入力*1
  3. Page2: Add Filesに配布しているCyclone.vhdを指定しadd
  4. Page3: Family > Cyclone Ⅲ,Available devices > EP3C16F484C7を指定*2
  5. Page4: EDA Tool Settingsはお好みで
  6. Page5: Finishでプロジェクトの完成です
  7. Assignments > Import Assignmentsから,Terasic社より入手したピン配置ファイル(DE0_TOP.qsf)を指定します
  8. Tools > MegaWizard Plug-In ManagerからMegafunctionsを作成します
  9. Page1: Create a new custom megafunction variationを選択
  10. Page2a: Virtual JTAGを選択し,What name do you want for the output file?の入力欄の末尾にvirtualjtagと入力*3
  11. page3: ここからVirtual JTAGの具体的設定を行います,How wide should the instruction register be? > 8を指定
  12. Finish(Page4~6は無視して構いません)
  13. Quartus Ⅱ IP Filesに関するメッセージボックスが出現したらYesをクリック
  14. あとはコンパイルしてDE0に.sofファイルを書き込みます


4.Visual Studioの操作

Visual Studioを起動し,以下の操作を行います.

  1. ファイル > 新規作成 > 既存のコードからプロジェクトを作成
  2. 作成するプロジェクトの種類 > Visual C#を選択
  3. ファイルの場所には先程ダウンロードしたソースファイルのあるフォルダを指定し,好きなプロジェクトの名前とを入力後,出力の種類にはコンソール アプリケーションを指定
  4. プロジェクトはこれで出来上がり
  5. プロジェクト > プロパティから,ビルドを開く
  6. プラットフォームターゲット > x86を選択,アンセーフコードの許可にチェックを入れる
  7. ビルドをし,生成される.exeファイルと同じディレクトリにD2XXドライバ,ftd2xx.dllを配置


5.USB通信を行う

DE0に書き込んだあと,Visual Studioを用いて生成した.exeファイルを実行してください. 無事に起動すると次のような画面が現れると思います. f:id:kazu_1995:20171118161231p:plain 色々試して遊んでみてください. f:id:kazu_1995:20171118163959j:plain ソースファイルの説明はまた改めて行います.感想や改良案など,お待ちしています.


(2017/11/20追記)
ソースコードC# 7.0対応(Visual Studio 2017~)で書いていたため一部修正しました.現在公開しているコードについてはC# 3.0対応(Visual Studio 2008~)となっています.

*1:top-level entityに関わってくるので,Cycloneにしてください.Cyclone以外にする場合配布している.vhdファイルに修正が必要です.

*2:Show in 'Available devices' listのName filterに16f484c7のように入力するとすぐ出てきます.

*3:ここも2.と同様,virtualjtagにしてください.