QuickLogic EOS S3のFPGAを使ってみる」でサンプルプロジェクト「qf_advancedfpga」を使ってRBG LEDを点灯させました。今度は、QuickLogic EOS S3のFPGAを使って、タクトスイッチを押すごとにRBG LEDの色を変化させます。

QuickLogic EOS S3とタクトスイッチ・RBG LEDとの接続

パソコンとQuickfeather development kitと次のようにタクトスイッチ・RBG LEDを接続します。タクトスイッチの接続は、「bcm2835 ライブラリによるスイッチ入力とLEDの点滅」を参照してください。RBG LEDの接続は、「ESP8266でWebSocket接続」「Go言語によるデータ制御」を参照してください。

信号名  ピン番号
RBG LED 青 J3のPin 7
RBG LED 緑 J3のPin 8
RBG LED 赤 J3のPin 9
タクトスイッチ J3のPin 10
GND J3のPin 1
+3.3v J3のPin 15

Quickfeather development kitのIO名称を次に示します。

Quickfeather development kitとタクトスイッチ・RBG LEDとの接続画像を次に示します。テストプロジェクト「qf_testuart」を実行しています。

テストプロジェクトの作成

テストプロジェクト「qf_testuart」は次のように「QuickLogic-Corp/qorc-sdk」のサンプルプロジェクト「qf_advancedfpga」をベースにして作成します。

$ python /home/xxx/qorc-sdk/qf_apps/create_newapp.py --source qf_advancedfpga --dest qf_testuart

この状態でテストプロジェクト「qf_testuart」をコンパイルすると「GCC_Project/quickfeather.ld」が見つからないというエラーメッセージが表示されます(原因不明)。「qf_testuart.ld」ファイルを「quickfeather.ld」に名称変更します。

作成したテストプロジェクト「qf_testuart」を次のように変更します。

50-56行目でタクトスイッチが押されるごとに、RBG LED変数「LED_color 」を更新します。58-60行目でRBG LED変数「LED_color 」に基づき、RBG LEDの3本の信号線に割り付けます。

/fpga/rtl/LED_controller.v

module LED_controller (
    clk,
    rst,

    duration0,
    duration1,
    duration2,
    duration3,

    color0,
    color1,
    color2,
    color3,

    button,

    led_r,
    led_g,
    led_b
);

input           clk;
input           rst;

input   [11:0]  duration0;
input   [11:0]  duration1;
input   [11:0]  duration2;
input   [11:0]  duration3;

input   [2:0]   color0;
input   [2:0]   color1;
input   [2:0]   color2;
input   [2:0]   color3;

input button;

output          led_r;
output          led_g;
output          led_b;


    reg	[23:0]	cnt;
    reg	[23:0]	stopcnt;
    reg [2:0]   LED_color;

    initial cnt <= 0;
    initial stopcnt <= 4000000;		// Change to 2000000
    initial LED_color <= 1;

    always @(negedge button) begin
      if (LED_color >= 7) begin
        LED_color <= 0;
	    end else begin
        LED_color <= LED_color + 1;
      end
    end

assign led_r = LED_color[2]; 
assign led_g = LED_color[1];
assign led_b = LED_color[0];

endmodule

FPGAコードで使用する変数を、次のようにIO名称で定義します。

/fpga/rtl/quickfeather.pcf

// Note: Quickfeather uses the QFN package 
// so the format is: set <signal name> <QFN pin #>
set_io led_r_o	IO_25
set_io led_g_o	IO_13
set_io led_b_o	IO_2
set_io button	IO_30

FPGAコードで使用する変数を、次のように使用するIOをFBIOとして定義します。

/src/pincfg_table.c

    ・・・・・・
        //---------- tomosoft add --------//
        {
            // Pad 2   -- LEG b
            .ucPin = PAD_2,
            .ucFunc = PAD2_FUNC_SEL_FBIO_2,
            .ucCtrl = PAD_CTRL_SRC_FPGA,
            .ucMode = PAD_MODE_OUTPUT_EN,
            .ucPull = PAD_NOPULL,
            .ucDrv = PAD_DRV_STRENGHT_4MA,
            .ucSpeed = PAD_SLEW_RATE_SLOW,
            .ucSmtTrg = PAD_SMT_TRIG_DIS,
        },
        {
            // Pad 13  -- LEG g
            .ucPin = PAD_13,
            .ucFunc = PAD13_FUNC_SEL_FBIO_13,
            .ucCtrl = PAD_CTRL_SRC_FPGA,
            .ucMode = PAD_MODE_OUTPUT_EN,
            .ucPull = PAD_NOPULL,
            .ucDrv = PAD_DRV_STRENGHT_4MA,
            .ucSpeed = PAD_SLEW_RATE_SLOW,
            .ucSmtTrg = PAD_SMT_TRIG_DIS,
        },
        {
            // Pad 25  -- LEG r
            .ucPin = PAD_25,
            .ucFunc = PAD25_FUNC_SEL_FBIO_25,
            .ucCtrl = PAD_CTRL_SRC_FPGA,
            .ucMode = PAD_MODE_OUTPUT_EN,
            .ucPull = PAD_NOPULL,
            .ucDrv = PAD_DRV_STRENGHT_4MA,
            .ucSpeed = PAD_SLEW_RATE_SLOW,
            .ucSmtTrg = PAD_SMT_TRIG_DIS,
        },

        {
            // Pad 30 -- SW
            .ucPin = PAD_30,
            .ucFunc = PAD30_FUNC_SEL_FBIO_30,
            .ucCtrl = PAD_CTRL_SRC_FPGA,
            .ucMode = PAD_MODE_INPUT_EN,
            .ucPull = PAD_NOPULL,
        },
    ・・・・・・

テストプロジェクトのコンパイルとQuickLogic EOS S3への書き込み

次の手順でテストプロジェクト「qf_testuart」をコンパイルします。

$ cd /home/xxx/qorc-sdk/qf_apps/qf_testuart
$ make clean -C GCC_Project
$ make -C GCC_Project

次のコマンドでQuickfeather development kitのファームウェアを書き換えます。

$ qfprog --port /dev/ttyACM0 --m4app GCC_Project/output/bin/qf_testuart.bin --mode fpga-m4 --reset

テストプロジェクトの実行

ファームウェアの書き換えが終了すると、QuickLogic EOS S3はリセットされてテストプロジェクト「qf_testuart」を実行します。RBG LEDが消灯し、以降タクトスイッチを押すごとにRBG LEDの色が変化します。