Verilogコードを生成.特に変わったところはないので,どのAIエージェントを使ってもできると思います.

Efinix T8用ボード
Verilog
// AE-T8F81-DIP40: 1Hz LED chaser (Lチカ)
// Clock: 25 MHz on-board oscillator (GPIOL_16)
// led[0]=D1, led[1]=D2, led[2]=D3, led[3]=D4 (one-hot, active low: 0=ON)

module lchika_1hz #(
    parameter integer CLK_HZ  = 25_000_000,
    parameter integer STEP_HZ = 1
) (
    input  wire       clk,
    output wire [3:0] led
);

    localparam [24:0] TICK_MAX = (CLK_HZ / STEP_HZ) - 1;

    reg [24:0] tick_cnt;
    reg [3:0]  shift_reg;

    initial begin
        tick_cnt  = 25'd0;
        shift_reg = 4'b0001; // D1 on first
    end

    always @(posedge clk) begin
        if (tick_cnt >= TICK_MAX) begin
            tick_cnt  <= 25'd0;
            shift_reg <= {shift_reg[2:0], shift_reg[3]}; // D1 -> D2 -> D3 -> D4
        end else begin
            tick_cnt <= tick_cnt + 25'd1;
        end
    end

    assign led = ~shift_reg;

endmodule
Expand

Efinityの使い方も指示してもらいます.

ユーザ:

Efinityの操作を指示してください

AI:

AE-T8F81-DIP40 向け lchika_1hz を Efinity でビルド・書き込みする手順です。秋月チュートリアル(Efinity 2024.2.294 想定)に沿っています。

事前準備

インストール

  1. Efinix Support から Efinity 2024.2.294 を入手・インストール
  2. Visual C++ 2019 x64(vc_redist.x64.exe
  3. Java JDK(チュートリアル例: jdk-18)
  4. 書き込み用: AE-FT232HL など JTAG 接続
  5. Windows で初回のみ: Zadig で FT232 のドライバ設定(AN050 参照)

環境変数(シミュレーションする場合)

ユーザー環境変数の Path に例:

  • C:\Efinity\gtkwave64\bin
  • C:\Efinity\iverilog\bin

プロジェクトフォルダ

  • 英数字と _ のみ(スペース・全角文字は避ける)
  • 例: C:\Efinity\2024.2\project\lchika_1hz
    または C:\Users\ユーザ名\ae-t8f81-lchika をそのまま使用可

rtl / constraints / sim フォルダごとコピーして使ってください。

1. プロジェクト新規作成

  1. Efinity を起動
  2. File → New Project
  3. 次を設定:
項目
Project Namelchika_1hz
Project Location上記フォルダ
FamilyTrion
DeviceT8F81C2
PackageF81
Top Module / Entitylchika_1hz
Source Filertl/lchika_1hz/v
  1. OK で作成

2. ソース・制約ファイルの登録

デザインファイル

Project タブで lchika_1hz(Design)を右クリック → Add → 追加:

  • rtl\lchika_1hz.v(既に Top なら確認のみ)

制約ファイル

Constraint を右クリック → Add → 両方追加:

  • constraints\lchika_1hz.sdc(タイミング)
  • constraints\lchika_1hz.isf(ピン割当)

合成オプション(.isf 利用時・必須)

File → Edit Project → Synthesis タブ → Synthesis Options:

オプション
--peri-syn-instantiation1
--peri-syn-inference1

OK で閉じる。

(Interface Designer のみでピンを付ける場合は inference を 0 にしますが、本プロジェクトは .isf 方式 です。)

HDL 言語

Synthesis タブで Verilog: Verilog-2001(または SystemVerilog2009 でも可)

3. ピン割当の確認

.isf に次が書いてあります(手動設定不要):

信号GPIO
clkGPIOL_16(パッケージピン C2)
led[0] (D1)GPIOR_12
led[1] (D2)GPIOR_11
led[2] (D3)GPIOR_10
led[3] (D4)GPIOR_08

GUI で確認したい場合

  1. Interface Designer を開く
  2. Check Design → エラー 0 件を確認
  3. Result タブ → Placement → lchika_1hz.place.rpt
    • Unassigned Core Pins が無いこと

4. コンパイル(ビットストリーム生成)

GUI

  1. 画面上部の Compile(一連フロー)を実行
    または順に: Synthesis → Place & Route → Generate Bitstream
  2. Result / Dashboard でエラー・警告を確認
  3. 成功後、出力例:
    • outflow\lchika_1hz.bit(JTAG 書き込み)
    • outflow\lchika_1hz.hex(SPI フラッシュ書き込み)

コマンド(任意)

cd C:\Efinity\2024.2\project\lchika_1hz

efx_run.bat lchika_1hz.xml –flow compile

5. ハードウェア接続

  1. AE-T8F81-DIP40 に電源(チュートリアル例: 3.3 V)
  2. AE-FT232HL 等で JTAG 接続(TCK/TMS/TDI/TDO/GND)
  3. USB 接続後、デバイスマネージャで認識を確認

6. 書き込み(Programmer)

  1. Efinity の Programmer タブ(または Tools → Programmer)
  2. 接続デバイスを選択
  3. ファイル: outflow\lchika_1hz.bit
  4. Program 実行
  5. 完了後、LED が約 1 秒ごと に D1→D2→D3→D4 と移る(0 = 点灯)

SPI フラッシュへ書く場合は .hex を選び、手順はチュートリアル「書き込み」章に従います。

7. RTL シミュレーション(任意)

  1. Project → Simulation 右クリック → Add → sim\lchika_1hz_tb.v
  2. Simulation 実行(RTL Simulation)
  3. 波形: gtkwave で outflow\lchika_1hz.vcd を開く

※ テストベンチは短時間で終わるよう CLK_HZ=25 にしてあります。実機はデフォルト 25 MHz のままです。

8. うまくいかないとき

症状対処
Unassigned Core Pins.isf が Constraint に入っているか、--peri-syn-inference=1 か確認
タイミングエラーlchika_1hz.sdc が追加されているか確認
LED が全点灯/全消灯配線・極性(Low 点灯)・led ピン割当を再確認
FT232 が見えないZadig ドライバ設定をやり直す
何も動かないclk が GPIOL_16(25 MHz オシレータ)か確認

9. デバッガ(任意)

Debugger タブで JTAG 接続後、内部信号(例: shift_reg)を観測できます。チュートリアル「デバッガ」章を参照してください。

作業の流れ(まとめ)

「New Project」 → 「ソース・SDC・ISF追加」 → 「peri-synオプション設定」 → 「Compile」 → 「.bitをProgrammerで書込」 → 「Lチカ動作確認」

秋月の詳細図解は、製品ページの AE-T8F81-DIP40 チュートリアル PDF(バージョン 1.2.4 など)がそのまま使えます。本設計はチュートリアルの count16sec の代わりに lchika_1hz を使い、スイッチ(rst_n / reverse_n)は不要です。

特定の画面で止まった場合(エラーメッセージ全文など)を送ってもらえれば、その箇所だけ追記で案内できます。

コメントを残す