sanguisorbaのアイコン画像
sanguisorba 2025年11月08日作成 © MIT
セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 210
sanguisorba 2025年11月08日作成 © MIT セットアップや使用方法 セットアップや使用方法 Lチカ Lチカ 閲覧数 210

FPGAでLチカやってみた (Nexys A7)

自分用メモ

用意したもの

  • Nexys A7 (Artix-7 A7-100T)
    Digilentサイトより

  • Vivado 2022.2 が入ったそこそこ強めのWindows PC
    読者は最新版入れたらいいと思う。

Projectを立ち上げる

まずはVivadoを立ち上げてCreate Projectを選択。

キャプションを入力できます

続いてProjectの名前と保存場所を指定。
Create project subdirectoryはチェックをつけておくとProject nameのフォルダを作ってそこにデータが格納される。

キャプションを入力できます

Project TypeはRTL project.
RTLソースコードは後回しにするのでDonot specify sources at this time.

今回Vitisは使わないので無効に

続いてターゲットデバイスを指定。
左上のBoardsをクリック → 左下のRefreshをクリック → しばらくまつ
リストが更新されたらSearch: Nexysと打ち、Nexys A7-100Tを選択。

初回の場合はStatusのダウンロードボタンをクリックする。

こんな感じの表示になったらOK

Finishを押したらとりあえずProjectの完成。
リスポーン地点

最後に初期設定。今回はボードに書き込むのでbitファイルの吐き出しを行う。

Tools → Settings でSettingsウィンドウを開き、 Bitstream → -raw_bitfile にチェックを入れてOK。

キャプションを入力できます

xdcを記述する

Flow Navigator のAdd Sourcesをクリックして、まずはconstraintsを選択。

キャプションを入力できます

ConstraintsファイルはDigilent配布のコードを使用します。

https://github.com/Digilent/Nexys-A7-100T-XADC/blob/master/src/constraints/Nexys-A7-100T-Master.xdc

キャプションを入力できます

Copy constraints files into projectにチェックをいれて、Finishを押してください。
するとSources > Constraints > constrs_1に先程のxdcファイルが追加されます。

キャプションを入力できます

Constraints, 制約ファイルはクロックの制約とポートの定義を行うファイルですが、FPGAボードでは入力クロックが固定なのでいじる必要はありませんし、そもそもいじれません。ここでは、

  • FPGAにおいてどのピンを使うか
  • HDLコードにおけるポート名とFPGAのピン番号の関連付け

の2点のみを行うこととして認識してもらえば良いかと思います。

私たちが変更できるのはコメントアウトの有無とget_ports の後に定義されたポート名のみです。

今回は以下4行以外を全てコメントアウトします。

sw[0], LED[0] はそれぞれ1ビットしかないため、バス表記をやめて単にsw, LEDとしました。

これをxdcファイルとして記述してもOK。

set_property -dict { PACKAGE_PIN E3 IOSTANDARD LVCMOS33 } [get_ports { clk }]; #IO_L12P_T1_MRCC_35 Sch=clk100mhz create_clock -add -name sys_clk_pin -period 10.00 -waveform {0 5} [get_ports { clk }]; set_property -dict { PACKAGE_PIN J15 IOSTANDARD LVCMOS33 } [get_ports { sw }]; #IO_L24N_T3_RS0_15 Sch=sw[0] set_property -dict { PACKAGE_PIN H17 IOSTANDARD LVCMOS33 } [get_ports { LED }]; #IO_L18P_T2_A24_15 Sch=led[0]

RTLを記述する

続いてRTLコードを記述します。ちなみに自分はSystem Verilog派です。

Flow Navigator のAdd Sourcesをクリックして、design sourcesを選択。

キャプションを入力できます

今回は新規でRTLを記述するためCreate Fileをクリック。

File typeをSystemVerilogにし、Filenameの拡張子は .sv となるようにファイル名を入力します。

キャプションを入力できます

Finishを押すとDefine Moduleとしてポート名と方向、バスのサイズを聞かれます。
原則としてポート名の定義は設計者の自由ですが、最上位(TOP)モジュールはxdcファイルと結びつくため、xdcファイルで規定したポート名を過不足なく記述します。

キャプションを入力できます

OKを押すとヘッダ付きのSystemVerilogコードがDesign Sources > SystemVerilog > xil_defaultlib内に作成されます。

キャプションを入力できます

今回、以下のコードを作成しました。

約0.17秒周期で1週するカウンタの最上位ビットをLEDに割り当てることで、約0.8秒ON、約0.8秒OFFを繰り返します。

`timescale 1ns / 1ps module top( input clk, input sw, output logic LED ); logic [23:0] count; assign LED = count[23]; always_ff @(posedge clk) begin if(!sw) count <= '0; else count <= count + 24'd1; end endmodule

合成して書き込んでみる

今回は一気にすっとばします。

Flow Navigator のGenerate Bitstreamをクリックし、OKを押して実行してください。
非常に小さいデザインなのでjobsは1で良いと思います。

合成が終わったら、Open Hardware Managerを選択してOKを押してください。

キャプションを入力できます

HARDWARE MANAGERが開いたら、ターゲットボードを接続し、ボードの電源を入れます。

この時、Nexys A7のジャンパはJP1=JTAG, JP3=USB としてください。

電源を入れたら、Open targetをクリックします。

キャプションを入力できます

ターゲットボードを認識できたら、Program deviceをクリックします。

キャプションを入力できます

冒頭でbitファイルを吐き出すオプションを指定していたので、Bitstreamファイルにはできたてほやほやのbitファイルが既に指定されています。そのままProgramを押してください。

キャプションを入力できます

書き込みが完了するとDONEのライトが点灯し、プログラムが動作します。

キャプションを入力できます

一番右下 J15のスイッチを下にやるとOFF、上にやると上にあるH17のLEDが点滅します。

キャプションを入力できます

動作確認おわり

sanguisorbaのアイコン画像
マイコンを使わない低レベルな電子工作とかPCBパターン製作など
ログインしてコメントを投稿する