編集履歴一覧に戻る
lyricalmagicalのアイコン画像

lyricalmagical が 2025年04月07日00時15分17秒 に編集

初版

タイトルの変更

+

[FPGA]Efinix TrionでLチカ

タグの変更

+

Lチカ

+

Efinix

+

Trion

+

秋月電子

記事種類の変更

+

セットアップや使用方法

Lチカの変更

Lチカが設定されました

ライセンスの変更

+

(CC BY-NC 4+) Creative Commons Attribution-NonCommercial CC BY-NC version 4.0 or later

本文の変更

+

秋月で結構安く買えるFPGA Trion T8を触ってみました。 [秋月電子:T8F81 DIP化モジュールキット](https://akizukidenshi.com/catalog/g/g129595/) ※チップへの書き込みは、FT232HLが必要です。秋月であれば下記になります。 [FT232HL ハイスピードUSBシリアル変換モジュール](https://akizukidenshi.com/catalog/g/g106503/) ## 目標 ツールの初期セットアップと使い方を覚えてボード上のLEDをLチカさせる ## 概要 秋月のボードにはTrion T8シリーズ(T8F81C2X)が乗っています。 TrionはEfinix社のローエンドに分類されるFPGAで、結構お安く買えます。 ## 関連ソフトセットアップ 開発環境を準備します。 まず、下記でユーザー登録をします。 [https://www.efinixinc.com/support/account.php?do=create](https://www.efinixinc.com/support/account.php?do=create) 必要なソフトは下記からダウンロードします。 ダウンロードの際に、Free Efinity License申請も必要です。申請は即通ります。 [https://www.efinixinc.com/support/efinity.php](https://www.efinixinc.com/support/efinity.php) - [Efinity IDE Full Release 2024.2.294](https://www.efinixinc.com/dl/efinity-2024.2.294-windows-x64.msi) 特にこれといって選ぶ選択肢もなくそのままインストール。 - [Efinity Patch efinity-2024.2.294.4.15-windows-x64-patch](https://www.efinixinc.com/dl/efinity-2024.2.294.4.15-windows-x64-patch.zip) 展開して「run.bat」を実行。 ## 動かす 基本的には秋月の[チュートリアル](https://akizukidenshi.com/goodsaffix/AE-T8F81-DIP40%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB_1.2.5.pdf)を参考にLチカしてみます。 ### プロジェクトの作成 まずはプロジェクトを作成します。 Fileメニュ→Create Project...を選びます。 ![キャプションを入力できます](https://camo.elchika.com/190e658d07722ac3be69add9110e4c72f256e2e4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f39613461316532612d653938352d343938652d613866382d623732663962393931663364/) 次に、Project名(Projectタブ:Name)を変更します。 また、DeviceがT8F81、Timing ModelがC2となっていることを確認してください。 ![キャプションを入力できます](https://camo.elchika.com/a48e009abee43d492f12a2913674666a73776e2b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f66346332626132392d336539392d343862372d623335352d373661393433336333643662/) ### ソースコードの作成 Projectタブ→Designを右クリック→Createを選択し、その次のウィンドウでファイル名(elchika_top)を指定し、OKします。 ![キャプションを入力できます](https://camo.elchika.com/58cbbd0b43ab1ba0f202500ce10768b7cbf2ca98/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f64376634363532372d363133642d346266622d613963612d353237333031323966336466/) ![キャプションを入力できます](https://camo.elchika.com/22b549c1ccb3f656c782300358496338c8dc68fc/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f62376565633933632d326262362d346236342d613239662d386435396330613233363035/) その後、「File:elchika_top.v(default)」をダブルクリックすることで、編集ペインが開きます。 ![キャプションを入力できます](https://camo.elchika.com/ecd7e6d5e0ce750f8dae5e312a3b79fab528b3e8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f33386561343236632d313633652d346462622d396237302d636536363836313933376666/) ![キャプションを入力できます](https://camo.elchika.com/eb5133172e52a77fd0d8b3cb1c3cb9adcf5248a0/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f61646364383963622d313765652d343334332d393364642d313065363864366261656635/) ちなみにデフォルトパスにインストールした場合、プロジェクトフォルダは c:\Efinity\2024.2\project\elchika に作られ、今作成したソースファイルはそのフォルダに配置されます。 編集ペインを使用して、下記ソースを貼り付けます。貼り付けた後は保存アイコンから保存を忘れずに。 ```verilog:elchika_top.v module elchika_top( input CLK, output LED ); reg [21:0] counter; always @(posedge CLK) counter<=counter+1; assign LED=counter[21]; endmodule ``` ### 論理合成、制約、配置配線 #### 論理合成(Synthesis) まず、Fileメニュー→Edit Project→Designタブで、Top Moduleをelchika_topに変更します。 ![キャプションを入力できます](https://camo.elchika.com/cf29884e43415f37d951cd5bb2bc439677e2611d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f37383433386363332d626566622d343532362d623233342d313462333232303734343833/) 次に、dashboardのStart Synthesisボタンを押します。 ![キャプションを入力できます](https://camo.elchika.com/ed8272b89761b000f7c7ace9484b3689bb89aee7/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f37616230393933662d653838632d343437622d396536362d643430666638393963323764/) Consoleにエラー(赤字)が出ていないことを確認してください。これで、論理合成は終わりました。 また、ResultタブのInterfaceにUnassinged Core Pinsが赤字で出ていますが、まだ端子配置制約をしていないので無視します。 TimingのWorst Negative Slackも赤字(マイナス)になっていてタイミングが満たせていなさそうですが、さすがに22ビットカウンタが25MHzで動かないとは思えないので今のところ無視します。おそらくクロック周波数の制約を与えていないからと思われます。 #### 端子配置制約(Build Interface) 画面上部中央のボタンからInterface Designerを起動します。 ![キャプションを入力できます](https://camo.elchika.com/11d8d258f75f13282115bb8abf892d9a2fd6493f/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f30353234643331652d353530612d346434352d616566632d326631396334666261313032/) Interface Designerが起動したら、 GPIOを右クリック→Create Blockを選択します ![キャプションを入力できます](https://camo.elchika.com/e0d5aa5a881af9147777189bdd7fa4e16bb0c1d3/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f36383961303835632d303739382d346432382d393863632d626330656433356431333133/) 次に出てくるウィンドウで、 Instance NameとPin Nameを「CLK」、Connection Typeを「gclk」と設定します。それ以外は変更不要と思いますが、画像と設定値を比べてください。 ![キャプションを入力できます](https://camo.elchika.com/24c68a6e2e655dc9d380f1f539ba340c78f5e798/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f35373636346662362d306234322d346139342d386435382d653766656132343531306436/) 同様に、もう一度Create Blockを選択し、 Instance NameとPin Nameを「LED」、Modeを「output」と設定します。画像と同様になっていることを確認してください。 ![キャプションを入力できます](https://camo.elchika.com/85fc6d48c057bd697733df76aad16d518e5cf795/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f63356434303438652d353362342d346662632d623939632d393133633937613238373163/) 上記二つの端子を設定したら、左上のボタンを押してGPIO Resource Assignerを開きます。 ![キャプションを入力できます](https://camo.elchika.com/b4913a88b93dd6efad57af08461b90399b53c9a1/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f38356535316638362d626139302d343934642d616164652d653562633931343262323566/) クロック入力(CLK)は回路図より、GPIOL_16_CLK2に接続されているため、GPIOL_16を選択します。 LED出力はボード周辺に出ている端子であればどこでもよいのですが、配線のしやすさを考えて、VIOの隣にあるGPIOR_03端子とします。DIP変換基板でのGPIOと実端子との割り当ては下図のようになっています。 ![キャプションを入力できます](https://camo.elchika.com/7159615717d4b6606462d64447463b160342a09e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f62383932663662392d633861302d343838392d396236662d366637386633623439343730/) そのため、GPIO Resource Assignerを下記の通り設定します。Resource列を設定すると、ほかの列も自動で入力されます。 ![キャプションを入力できます](https://camo.elchika.com/6ce8316011d8d68c6995c2c92ee24edf63106626/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f61623032643239312d363435382d346334642d626332632d616130316334333934633237/) 入力が完了したら、左上の保存アイコンから保存し、GPIO Resource Assignerウィンドウを閉じます。 #### 配置配線(Place and Route) dashboardのStart Placementボタンを押します。Placementが終わると、その右隣のStart Routing、Generate Bistreamに自動的に進みます。 画像のように、4つに緑色のチェックマークがつけば完了です。 ![キャプションを入力できます](https://camo.elchika.com/ce418033946b9693a15dfb934c7e4daa834f7b1c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f65376332373463322d386138622d343935662d616433322d363236376639616663613564/) #### チップにダウンロード ここまでの工程で作成したデータを、実際のチップにダウンロードします。 Efinixには純正のJTAGケーブルはないらしく、FT232などを使用するのが推奨の方法のようです。 ここでは、秋月の[FT232HL ハイスピードUSBシリアル変換モジュール](https://akizukidenshi.com/catalog/g/g106503/)を使用します。 注意として、通常のFT232HL用のドライバではなく、Zadigドライバというものを使用する必要があります。通常のFT232HLドライバとは異なるため、ほかにもFT232HLを使用している場合は、書き込み用の専用環境を用意したほうが良いです。 ##### FT232HLドライバの変更 まず、Zadig USB driverを下記からダウンロードします。 [Zadig](https://zadig.akeo.ie/) 次に、FT232HLを接続して(この時、trionボードへの接続は不要。接続してあってもよい)、Zadigを起動します。 Zadigが起動したら、Optionメニューで「List All Devices」を選択します。 ![キャプションを入力できます](https://camo.elchika.com/e2cd8f5a6949070e9181dd67f941c89ce624e55c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f66643434316632622d636265392d346461322d613665392d663862353963623763636635/) ウィンドウ上部にUSBデバイスが選択できるようになるので、「USB<->Serial Converter」を選択します。 ![キャプションを入力できます](https://camo.elchika.com/0da94cd5e89c42805b1e3c4c7caa4eb941ece79b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f37653133623066652d386663612d346536342d616562612d626163646462313336343832/) 次に、Driverを「libusb-win32(v1.4.0.0)」を選択し、「Replace Driver」を押すとドライバがさし変わります(数分かかります)。 ![キャプションを入力できます](https://camo.elchika.com/f16c43e31101c4a328163aef0e84a6a79a7aadc6/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f31616135323965392d376362662d343261302d613531622d326238653765326466386666/) これで、ドライバーの変更は完了です。 ちなみにもとに戻す場合は、デバイスドライバーからドライバの削除を行わないとだめなようです。 ##### 接続 FT232HLとtrionボードを下図のように接続します。 ここでは抵抗内蔵LEDを使用しているため、LEDを直接接続していますが、抵抗を内蔵していない場合、IO電圧を3.3Vとして適切な抵抗を直列にいれてください。 ![キャプションを入力できます](https://camo.elchika.com/a55cccee5706ec84d3bcfc5ee0819bdbaa93586c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f36653030623237352d313533632d343131372d613165332d636463323366376165656532/) ##### ダウンロード 画面上部のOpen Programmerボタンを押し、Programmerを開きます ![キャプションを入力できます](https://camo.elchika.com/4c709970770c981512b3bb35478894af8336c19e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f38653937353333392d393066312d343834342d383365612d336131363966626332643664/) Programmerが開いたら、USB Targetで「USB<-->Serial Converter」が選ばれているのを確認し、Programing Modelを「JTAG」に変更し、Bitstream fileに先ほど作成されたbitストリームファイルを設定します。デフォルトでは、画像記載のパスになります。 このあと、右側のStart Programボタンを押すと、FPGAにビットストリームがダウンロードされて動き出します。 ![キャプションを入力できます](https://camo.elchika.com/cad7882548d6162cfeb040d9ae80977c7c96499d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f34393839393939662d353535332d346566662d383731652d653261346564373234323836/) ##### ダウンロード(補足) 前述のダウンロード方法では、FPGAに直接ダウンロードされ、電源を切るとコンフィグ内容が消去されます。 電源を切っても保持されるようにするには、SPI flashに書き込み、電源投入時に自動的に読み込まれるようにしなければなりません。そのためには下記の方法でSPI flashに書き込みます。 Programming Modeを「SPI Active using JTAG Bridge(new)」 Auto configure~のBitstream Fileを「C:\Efinity\2024.2\pgm\fli\trion\u00000000_t8.bit」(詳細不明ですが固定でこうなるらしい)、ImageのBitstream fileはに先ほど作成されたbitストリームファイルを設定し、Start Programボタンを押すと、SPI Flashにダウンロードされます。 ![キャプションを入力できます](https://camo.elchika.com/1faea986c5714bb0cfb45d1841cf9daf7c00dea4/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f38346564353737632d663931332d343263622d623137322d663161313064313631663664/) ウィンドウ下のConsoleに、「JTAG2SPI programming...done」と表示されたらSPI flashに書き込みが完了していますので、一旦USBケーブルを抜いてさしなおす(FPGAに電源再投入する)と、自動でSPI flashからダウンロードされてFPGAが動き出します。 ## 動いた! LEDが点滅するのがわかります。 25MHzを22bitのカウンタで分周しているため、(2^22)/25000000≒0.17秒周期で点滅します。 ![キャプションを入力できます](https://camo.elchika.com/8ed1289a30f80e045a44dbf1fb5065e471e4011d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f65646136343062652d306132332d346233662d623939622d6635323639643463393636342f38623833383230382d663566662d343634612d616565322d363133643263636536393636/) ## 最後に 最も単純な動かし方をしてみました。trion T8には他にもいろいろ機能があるようなので、そちらの使い方も調べてみたいと思います。 FT232のドライバの差し替えが別用途にも使っている場合には不便だと思います。 チップ単価はFPGAにしてはかなり安いと思うので、使い道は色々ありそうに思います。 ## 参考資料 - [秋月電子/Explorer AE-T8F81-DIP40Efinityチュートリアル](https://akizukidenshi.com/goodsaffix/AE-T8F81-DIP40%E3%83%81%E3%83%A5%E3%83%BC%E3%83%88%E3%83%AA%E3%82%A2%E3%83%AB_1.2.5.pdf) - [秋月電子 AE-T8F81-DIP40 回路図](https://akizukidenshi.com/goodsaffix/AE-T8F81-DIP40_20240809.pdf) - [EFINIX T8 Data Sheet](https://akizukidenshi.com/goodsaffix/trion8.pdf) - [EFINIX Trion® Packaging User Guide](https://www.efinixinc.com/support/docsdl.php?s=ef&pn=TRION-PKG-UG)