Xilinx社の FPGA の開発環境である Vivado MLを使用して、Kria KV260のPMODの1pinに出力するKria KV260のFPGAのプログラムを作成します。Digilent社製のJtagデバイス「JTAG HS-3」を使用してFPGAへの書き込み、Kria KV260のPMODの1pinの出力をオシロスコープ「ISDS205A」で確認します。

ここでは、「Vivado MLによるKria KV260のFPGAのプログラム作成(その1)」の継続作業となります。

Kria KV260とJtagデバイス「JTAG HS-3」との接続

Jtagデバイス「JTAG HS-3」とKria KV260のPMODの信号を引き出す自作の「PMOD拡張ボード」を次の画像のように接続します。「PMOD拡張ボード」にはオシロスコープ「ISDS205A」を接続します。

JTAG HS-3

Kria KV260 starter kitのJtagコネクタの回路図を次に示します。

PCにJtagデバイス「JTAG HS-3」を接続し、デバイスマネージャーにより「USB Serial Converter」が次のように表示されることを確認します。

Jtagデバイス「JTAG HS-3」ドライバを次の手順でインストールします。

  1. Jtagデバイス「JTAG HS-3」のケーブルを取り外します。
  2. CD コマンドでディレクトリを 「<ザイリンクスのインストール ディレクトリ>\digilent」(H:\Xilinx\Vivado\2021.2\data\xicom\cable_drivers\nt64\digilent) に変更します。
  3. 「install_digilent.exe 」を管理者権限で実行し、インストールのウィザードを完了します。
  4. Jtagデバイス「JTAG HS-3」のケーブルを再度接続します。

PMOD拡張ボード

Kria KV260 starter kitのPMODコネクタの回路図を次に示します。


PMOD拡張ボードは、PMODコネクタから信号を外部に取り出すために自作したボードで、8ビットの信号、電源、グランドを取り出せます。オシロスコープ「ISDS205A」は「PMOD拡張ボード」の1pinとグランドに接続します。

Kria KV260のPMODのxdcファイル作成

Kria KV260のPMODのxdcファイル作成を次のように作成し、「G:\document\Xilinx\Constraints」に保存します。

kv260-pmod.xdc

set_property PACKAGE_PIN H12 [get_ports som240_1_a17] ;# PMOD pin 1 - som240_1_a17
set_property PACKAGE_PIN B10 [get_ports som240_1_b20] ;# PMOD pin 2 - som240_1_b20  
set_property PACKAGE_PIN E10 [get_ports som240_1_d20] ;# PMOD pin 3 - som240_1_d20
set_property PACKAGE_PIN E12 [get_ports som240_1_b21] ;# PMOD pin 4 - som240_1_b21
set_property PACKAGE_PIN D10 [get_ports som240_1_d21] ;# PMOD pin 5 - som240_1_d21
set_property PACKAGE_PIN D11 [get_ports som240_1_b22] ;# PMOD pin 6 - som240_1_b22
set_property PACKAGE_PIN C11 [get_ports som240_1_d22] ;# PMOD pin 7 - som240_1_d22
set_property PACKAGE_PIN B11 [get_ports som240_1_c22] ;# PMOD pin 8 - som240_1_c22

set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_a17"]; # Net name HDA11
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_d20"]; # Net name HDA12
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_d21"]; # Net name HDA13
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_d22"]; # Net name HDA14
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_b20"]; # Net name HDA15
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_b21"]; # Net name HDA16_CC
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_b22"]; # Net name HDA17
set_property IOSTANDARD  LVCMOS33 [get_ports "som240_1_c22"]; # Net name HDA18

set_property SLEW SLOW [get_ports "som240_1_a17"]; # Net name HDA11
set_property SLEW SLOW [get_ports "som240_1_d20"]; # Net name HDA12
set_property SLEW SLOW [get_ports "som240_1_d21"]; # Net name HDA13
set_property SLEW SLOW [get_ports "som240_1_d22"]; # Net name HDA14
set_property SLEW SLOW [get_ports "som240_1_b20"]; # Net name HDA15
set_property SLEW SLOW [get_ports "som240_1_b21"]; # Net name HDA16_CC
set_property SLEW SLOW [get_ports "som240_1_b22"]; # Net name HDA17
set_property SLEW SLOW [get_ports "som240_1_c22"]; # Net name HDA18

set_property DRIVE 4   [get_ports "som240_1_a17"]; # Net name HDA11
set_property DRIVE 4   [get_ports "som240_1_d20"]; # Net name HDA12
set_property DRIVE 4   [get_ports "som240_1_d21"]; # Net name HDA13
set_property DRIVE 4   [get_ports "som240_1_d22"]; # Net name HDA14
set_property DRIVE 4   [get_ports "som240_1_b20"]; # Net name HDA15
set_property DRIVE 4   [get_ports "som240_1_b21"]; # Net name HDA16_CC
set_property DRIVE 4   [get_ports "som240_1_b22"]; # Net name HDA17
set_property DRIVE 4   [get_ports "som240_1_c22"]; # Net name HDA18

次の手順で作成したPMODのxdcファイル「kv260-pmod.xdc」を登録します。

  1. 「Constraints」上で右クリックして、表示されたメニューから「Add Sources」をクリックします。
  2. 表示された画面で「Add or create contraints」を選択して「NEXT」ボタンをクリックします。
  3. 表示された画面で「Add Files」ボタンをクリックします。
  4. 「…\Xilinx\Constraints」フォルダの下に作成したxdcファイル「kv260-pmod.xdc」を選択し、「OK」ボタンをクリックします。
  5. 「Add or Create Constraints」画面が表示され、「Finish」ボタンをクリックします。
  6. 「Sources」タブを選択し、「Constraints」をクリックすると作成されたxdcファイルが表示されます。

最上位HDLラッパーの作成

blinkモジュールが最上位となっているため、Zynqとblinkの両方を含む最上位モジュールを作成します。

「Design Sources」の「design_1」を右クリックして表示したメニューから、「Create HDL Wrapper」をクリックします。

そのまま「OK」ボタンをクリックします。

階層「design_1_wrapper」が作成されます。

ビットストリームファイルの生成

左端の「Flow Navigator」より「PROGRAM AND DEBUG」の「Generate Bitstream」をクリックし、コンフィグファイルの作成を実施します。

「OK」ボタンを押します。

「OK」ボタンを押します。

「Cancel」ボタンを押します。

FPGAへの書き込み

Jtagデバイス「JTAG HS-3」を使って、Kria KV260のFPGAに書き込みます。現在原因は調査中ですが、処理途中で2度キャンセルしてエラーダイアログが表示されました。

  1. 左端の「Flow Navigator」より「PROGRAM AND DEBUG」の「Open Hardware Manager」をクリックし、上側の「Open Target」をクリックして「Auto Connect」を選択します。
  2. 接続に時間がかかりすぎるので「Cancel」ボタンを押すと、次のエラー画面が表示されました。「OK」ボタンを押します。
  3. 「Not program」を選択して右クリックし、表示されたメニューで「Program Device」を選択します。
  4. 画面が表示されビットストリームファイルの選択となるため、そのまま「Program」ボタンをクリックします。
  5. 書き込みが終了しないので「Cancel」ボタンを押すと、次のエラー画面が表示されました。「OK」ボタンを押します。
  6. オシロスコープ「ISDS205A」で確認すると「PMOD拡張ボード」の1pinに3.062Vの電圧が発生しました。

エラー解析のためにTcl Consoleのログを取得しました。

Scanning sources...
Finished scanning sources
INFO: [IP_Flow 19-234] Refreshing IP repositories
INFO: [IP_Flow 19-1704] No user IP repositories specified
INFO: [IP_Flow 19-2313] Loaded Vivado IP repository 'H:/Xilinx/Vivado/2021.2/data/ip'.
open_project: Time (s): cpu = 00:00:19 ; elapsed = 00:00:11 . Memory (MB): peak = 1590.977 ; gain = 0.000
update_compile_order -fileset sources_1
open_bd_design {G:/document/Xilinx/kv260test/kv260test.srcs/sources_1/bd/design_1/design_1.bd}
Reading block design file <G:/document/Xilinx/kv260test/kv260test.srcs/sources_1/bd/design_1/design_1.bd>...
Adding component instance block -- xilinx.com:ip:xlconstant:1.1 - xlconstant_0
Successfully read diagram <design_1> from block design file <G:/document/Xilinx/kv260test/kv260test.srcs/sources_1/bd/design_1/design_1.bd>
open_bd_design: Time (s): cpu = 00:00:09 ; elapsed = 00:00:08 . Memory (MB): peak = 1590.977 ; gain = 0.000
open_hw_manager
connect_hw_server -allow_non_jtag
INFO: [Labtools 27-2285] Connecting to hw_server url TCP:localhost:3121
INFO: [Labtools 27-3415] Connecting to cs_server url TCP:localhost:3042
INFO: [Labtools 27-3417] Launching cs_server...
INFO: [Labtools 27-2221] Launch Output:


******** Xilinx cs_server v2021.2.0
  ****** Build date   : Sep 28 2021-06:44:20
    **** Build number : 2021.2.1632779060
      ** Copyright 2017-2022 Xilinx, Inc. All Rights Reserved.

connect_hw_server: Time (s): cpu = 00:00:19 ; elapsed = 00:06:51 . Memory (MB): peak = 1590.977 ; gain = 0.000
open_hw_target
INFO: [Labtoolstcl 44-466] Opening hw_target localhost:3121/xilinx_tcf/Digilent/210299AD057D
INFO: [Common 17-41] Interrupt caught. Command should exit soon.
ERROR: [Labtools 27-3419] Disconnecting from hw_server since it's not responding to requests.  It is recommended to investigate hw_server to find any issues.
CRITICAL WARNING: [Labtools 27-3421] xck26_0 PL Power Status OFF, cannot connect PL TAP.  Check POR_B signal.
open_hw_target: Time (s): cpu = 00:00:28 ; elapsed = 00:09:32 . Memory (MB): peak = 2945.672 ; gain = 1354.695
INFO: [Common 17-344] 'open_hw_target' was cancelled
set_property PROBES.FILE {} [get_hw_devices xck26_0]
set_property FULL_PROBES.FILE {} [get_hw_devices xck26_0]
set_property PROGRAM.FILE {G:/document/Xilinx/kv260test/kv260test.runs/impl_1/design_1_wrapper.bit} [get_hw_devices xck26_0]
program_hw_devices [get_hw_devices xck26_0]
INFO: [Labtools 27-3164] End of startup status: HIGH
program_hw_devices: Time (s): cpu = 00:00:06 ; elapsed = 00:01:06 . Memory (MB): peak = 3003.562 ; gain = 5.871
refresh_hw_device [lindex [get_hw_devices xck26_0] 0]
INFO: [Common 17-41] Interrupt caught. Command should exit soon.
ERROR: [Labtools 27-3419] Disconnecting from hw_server since it's not responding to requests.  It is recommended to investigate hw_server to find any issues.
INFO: [Labtools 27-1434] Device xck26 (JTAG device index = 0) is programmed with a design that has no supported debug core(s) in it.
INFO: [Common 17-344] 'refresh_hw_device' was cancelled
ERROR: [Labtoolstcl 44-695] HW Server shut down, disconnecting from server: localhost:3121

ERROR: [Labtools 27-3419] Disconnecting from hw_server since it’s not responding to requests. It is recommended to investigate hw_server to find any issues.

次のような回答を見つけました。Windows特有の問題らしく、Linuxでは発生しないということでした。

And just to confirm: this is a problem with the Windows version. The Linux version of the hardware server has no such problem.