LoginSignup
3
1

More than 3 years have passed since last update.

1500円ZYNQ基板でFPGAプログラミング大全Xilinx編(第2版)の実習 2-1 LED点滅回路

Last updated at Posted at 2021-02-23

はじめに

前の投稿で、EBAZ4205 基板を改造して、Cora Z7 相当で動かせるようになりました。

早速、FPGAプログラミング大全Xilinx編(第2版)の
最初の課題 "Lチカ" をやってみます。

関連ファイルのダウンロード

ソースファイル一式を、FPGAプログラミング大全Xilinx編(第2版) サポートサイトから取ってきます。
https://www.shuwasystem.co.jp/support/7980html/6326.html
1_サポートサイト.png

XilinxFPGA_SE.zip を解凍して、\Cora_Z7-10\dai2-3sho\blink フォルダをデスクトップに展開します。

制約ファイル(blink.xdc)の変更

Cora Z7-10 と EBAZ4205 では、FPGA のピンと、LED やスイッチの接続が違っているため、制約ファイル(blink.xdc)を変更します。
既存のポート名に対応する FPGA のピン番号を修正します。
変更点は、下記の通りです。

クロック入力
Cora Z7-10:H16 (125 MHz) → EBAZ4205:N18 (33.333 MHz)
Cora Z7-10:クロック周期 8ns → EBAZ4205:クロック周期 30ns

スイッチ入力 (RESET)
Cora Z7-10:D19 (BTN1) → EBAZ4205:V13 (U67 に付けたスイッチ - 基板端側)

LED出力
Cora Z7-10:N15 (赤) → EBAZ4205:W14 (赤)
Cora Z7-10:G17 (緑) → EBAZ4205:W13 (緑)
Cora Z7-10:L15 (青) → EBAZ4205:U12 (NCピン - 出力しても何も起きない)

blink.xdc
## EBAZ4205 constraints file
## chapter: 2
## project: blink

#Clock signal
set_property PACKAGE_PIN N18     [get_ports { CLK }]
set_property IOSTANDARD LVCMOS33 [get_ports { CLK }]
create_clock -add -name sys_clk_pin -period 30.00 \
        -waveform {0 4} [get_ports { CLK }]

#Reset
set_property -dict { PACKAGE_PIN V13   IOSTANDARD LVCMOS33 } \
        [get_ports { RST }]; # BTN[3]

#RGB LED
set_property -dict { PACKAGE_PIN W14   IOSTANDARD LVCMOS33 } \
        [get_ports { LED_RGB[2] }]; # Red
set_property -dict { PACKAGE_PIN W13   IOSTANDARD LVCMOS33 } \
        [get_ports { LED_RGB[1] }]; # Green
set_property -dict { PACKAGE_PIN U12   IOSTANDARD LVCMOS33 } \
        [get_ports { LED_RGB[0] }]; # Blue

回路ソース(blink.v)の変更

Cora Z7-10 と EBAZ4205 の搭載部品の違いから、下記 3 点を変更します。

・クロック周波数が 125 MHz → 33.333 MHz に遅くなるため、カウンタの bit 数を 26bit から 24bit へ減らす
 ⇒ カウンタ幅を cnt26[25:0] から cnt24[23:0] へ減少
 ⇒ ALL1 検出を 26'h3ffffff から 24'hffffff へ変更。
・LED が RGB ではなく RG しかないため、点滅パターンを変更 (LEDデコーダ)
・LED への出力値と点灯の論理が逆なので、出力値に ~ を追加して反転で表記 (LEDデコーダ)

blink.v
/* Copyright(C) 2020 Cobac.Net All Rights Reserved. */
/* chapter: 2       */
/* project: blink       */
/* outline: LED点滅回路 */
/* modified by KAN573   */

module blink (
    input               CLK,
    input               RST,
    output  reg [2:0]   LED_RGB
);

/* システムクロックを分周 */
reg [23:0] cnt24;

always @( posedge CLK ) begin
    if ( RST )
        cnt24 <= 24'h0;
    else
        cnt24 <= cnt24 + 1'h1;
end

wire ledcnten = (cnt24==24'hffffff);

/* LED5進カウンタ */
reg [2:0] cnt3;

always @( posedge CLK ) begin
    if ( RST )
        cnt3 <= 3'h0;
    else if ( ledcnten )
        if ( cnt3==3'd5)
            cnt3 <=3'h0;
        else
            cnt3 <= cnt3 + 3'h1;
end

/* LEDデコーダ */
always @* begin
    case ( cnt3 )
        3'd0:   LED_RGB = ~3'b100;
        3'd1:   LED_RGB = ~3'b010;
        3'd2:   LED_RGB = ~3'b110;
        3'd3:   LED_RGB = ~3'b010;
        3'd4:   LED_RGB = ~3'b100;
        3'd5:   LED_RGB = ~3'b000;
        default:LED_RGB = ~3'b000;
    endcase
end

endmodule

コンパイル

オリジナルと同じですので、大全の手順通りでよいです。

動作確認

FPGA へのダウンロードが完了すると、cnt3 のシーケンスに従って、LAN コネクタ横の LED が点灯します。
LED の発光パターンは下記を繰り返します。
2_LEDパターン.png

U67 に付けたスイッチがリセットボタンです。
押すと cnt3 がクリアされて、cnt3=0 から再スタートします。
4_動作確認.jpg

まとめ

2-1 LED 点滅回路の記述と動作確認について、EBAZ4205 で学習することができました。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1