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