「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の色が変化します。
											
				

