編集履歴一覧に戻る
sanguisorbaのアイコン画像

sanguisorba が 2025年11月08日00時17分21秒 に編集

初版

タイトルの変更

+

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

タグの変更

+

FPGA

+

Vivado

記事種類の変更

+

セットアップや使用方法

Lチカの変更

Lチカが設定されました

ライセンスの変更

+

(MIT) The MIT License

本文の変更

+

自分用メモ # 用意したもの * Nexys A7 (Artix-7 A7-100T) ![Digilentサイトより](https://camo.elchika.com/624869739360231298ad2fe7c9002afbd5df70df/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f64363635616233372d386461312d346362332d386239332d316633636335656633623535/) * Vivado 2022.2 が入ったそこそこ強めのWindows PC 読者は最新版入れたらいいと思う。 # Projectを立ち上げる まずはVivadoを立ち上げてCreate Projectを選択。 ![キャプションを入力できます](https://camo.elchika.com/3e2551768a7f6d4c474ad854f08b80b15f7ee915/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f66353732643665622d313030352d343539662d383162362d646661613766363036383933/) 続いてProjectの名前と保存場所を指定。 Create project subdirectoryはチェックをつけておくとProject nameのフォルダを作ってそこにデータが格納される。 ![キャプションを入力できます](https://camo.elchika.com/3cd35f212b0114f1269aab74eabc8375cea82d97/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f62343639363539632d333463372d343833652d613438352d616165386163333331666264/) Project TypeはRTL project. RTLソースコードは後回しにするのでDonot specify sources at this time. ![今回Vitisは使わないので無効に](https://camo.elchika.com/497c57bdce7d07b0a2df3f49a27830f9908c7b24/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f34393035313461362d303865662d343535312d393737382d396463643335333136623136/) 続いてターゲットデバイスを指定。 左上のBoardsをクリック → 左下のRefreshをクリック → しばらくまつ リストが更新されたらSearch: Nexysと打ち、Nexys A7-100Tを選択。 初回の場合はStatusのダウンロードボタンをクリックする。 ![こんな感じの表示になったらOK](https://camo.elchika.com/5e485149abb53b4b37fe5fe8382cc07a9cbceb0d/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f38303838613939622d326566652d343439362d626631332d623137653131363438336263/) Finishを押したらとりあえずProjectの完成。 ![リスポーン地点](https://camo.elchika.com/e80d7f01e41bb4186a572219ded76f47be9ad61c/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f65336133613632622d333231622d343936382d396434352d333933333566303131333533/) 最後に初期設定。今回はボードに書き込むのでbitファイルの吐き出しを行う。 Tools → Settings でSettingsウィンドウを開き、 Bitstream → -raw_bitfile にチェックを入れてOK。 ![キャプションを入力できます](https://camo.elchika.com/2ed3555ee2125eba1350cdba0c446b02a4556cc9/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f37363136356539362d613131612d343138332d386331352d356565656464313663376532/) # xdcを記述する Flow Navigator のAdd Sourcesをクリックして、まずはconstraintsを選択。 ![キャプションを入力できます](https://camo.elchika.com/2e3389dfb548e804fce732fcfe05cd88b23d9c4b/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f38336134333535652d333839312d343134632d616362642d366131616663336565393430/) ConstraintsファイルはDigilent配布のコードを使用します。 https://github.com/Digilent/Nexys-A7-100T-XADC/blob/master/src/constraints/Nexys-A7-100T-Master.xdc ![キャプションを入力できます](https://camo.elchika.com/175ddfe169808fe731d48e3fa56f4bb9f08e3f0a/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f35343330613732392d643031622d343534342d613837622d363862386666343237663738/) Copy constraints files into projectにチェックをいれて、Finishを押してください。 するとSources > Constraints > constrs_1に先程のxdcファイルが追加されます。 ![キャプションを入力できます](https://camo.elchika.com/dc618dad7d7b7934e8ec43bce695da661d412596/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f39663733306561652d393936362d343266632d393738362d663061383261613434656361/) 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を選択。 ![キャプションを入力できます](https://camo.elchika.com/f96f183c931fd4697c1918a0d0a8293f5ca36f90/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f64386662303237662d616166392d346230322d383730362d393032643234643837336165/) 今回は新規でRTLを記述するためCreate Fileをクリック。 File typeをSystemVerilogにし、Filenameの拡張子は .sv となるようにファイル名を入力します。 ![キャプションを入力できます](https://camo.elchika.com/b79616ae2535af4a1e405b18fde9075139ac3168/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f37353361303130372d363137662d346133312d396634662d346166353536646563303563/) Finishを押すとDefine Moduleとしてポート名と方向、バスのサイズを聞かれます。 原則としてポート名の定義は設計者の自由ですが、最上位(TOP)モジュールはxdcファイルと結びつくため、xdcファイルで規定したポート名を過不足なく記述します。 ![キャプションを入力できます](https://camo.elchika.com/b5add7cdb0d5a62a340e96fa7ca642e685968bf8/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f36663238366331322d636533392d343038652d626439612d303162303432636535376535/) OKを押すとヘッダ付きのSystemVerilogコードがDesign Sources > SystemVerilog > xil_defaultlib内に作成されます。 ![キャプションを入力できます](https://camo.elchika.com/037a1ccf096524c61319fc6b54e9dabe16914c9e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f62383330396662322d386664632d343437612d383136622d663238333331373764653663/) 今回、以下のコードを作成しました。 約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を押してください。 ![キャプションを入力できます](https://camo.elchika.com/bc45b97a16e7099d3492501d217ea84f77e52d27/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f38313834306165362d613235662d343565312d626131652d356665303632316136373465/) HARDWARE MANAGERが開いたら、ターゲットボードを接続し、ボードの電源を入れます。 この時、Nexys A7のジャンパはJP1=JTAG, JP3=USB としてください。 電源を入れたら、Open targetをクリックします。 ![キャプションを入力できます](https://camo.elchika.com/0efc93ed2b5d38a604c580eaabe2c4baee7f273e/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f35316636623936362d663931622d346565302d393964302d636236663564316137333066/) ターゲットボードを認識できたら、Program deviceをクリックします。 ![キャプションを入力できます](https://camo.elchika.com/5c6c0f9bdb9c0bddce47ab2acb10d679f1755104/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f64323438373736312d386164652d343835612d623030312d343966636464373463656262/) 冒頭でbitファイルを吐き出すオプションを指定していたので、Bitstreamファイルにはできたてほやほやのbitファイルが既に指定されています。そのままProgramを押してください。 ![キャプションを入力できます](https://camo.elchika.com/b0979988eb22505a942221c16b851fc69eb79629/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f64393431383934662d663738342d346137642d393634662d333862336163393532356361/) 書き込みが完了するとDONEのライトが点灯し、プログラムが動作します。 ![キャプションを入力できます](https://camo.elchika.com/190f83ee866abc38549291f27370b9918521b887/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f66353338663630622d633236632d343932342d383931632d383537393537313531383039/) 一番右下 J15のスイッチを下にやるとOFF、上にやると上にあるH17のLEDが点滅します。 ![キャプションを入力できます](https://camo.elchika.com/ae06947b803813c7f0d4f321cf1cd5220a6e10a0/687474703a2f2f73746f726167652e676f6f676c65617069732e636f6d2f656c6368696b612f76312f757365722f38303034383535362d663062322d343030302d616334642d3266373330643761393339392f32313864376435302d616539652d346433652d613032652d363835303365663430303730/) 動作確認おわり