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


