Программирование устройства в vivado с использованием tcl

Я пытаюсь программировать свою цифровую FPGA через командную строку vivado. После открытия аппаратного сервера я могу запрограммировать свое устройство следующим образом ...

program_hw_devices [get_hw_devices xc7a100t_0]

Затем, если я запускаю puts [get_hw_devices xc7a100t_0], он выводит xc7a100t_0, что наводит меня на мысль, что я могу просто сделать что-то вроде program_hw_devices xc7a100t_0. Однако это не удается, и я получаю следующий результат.

ОШИБКА: [Обычная 17-161] Недопустимое значение опции «xc7a100t_0», указанное для «hw_device».

Я действительно не понимаю, что в этом плохого. Я думал, что эти две команды будут эквивалентны, поскольку я просто передал им то, что было возвращено get_hw_devices. Также я думал, что тип всего в tcl был просто строкой. Есть ли у вывода [get_hw_devices xc7a100t_0] какой-то особый тип?


person chasep255    schedule 27.04.2018    source источник


Ответы (1)


Глядя на шаблоны использования, мы видим, что рекомендуемое использование:

program_hw_devices [lindex [get_hw_devices] 0]

Учитывая, что текст вывода get_hw_devices - это «простое» слово (без пробелов или метасимволов Tcl), я подозреваю, что токены устройств на самом деле являются особыми значениями, которые имеют нетривиальные типы, свисающие с задней части их представления. Мы не рекомендуем такой подход, так как он может привести к очень странным сообщениям об ошибках (например, к тому, что у вас есть), но, учитывая, что это так, вам нужно использовать точно такой же шаблон, как описано выше, чтобы вы удалили ровно один уровень распущенность прочь.


Для справки в будущем сценарий по этой ссылке (который предположительно работал) был:

# Connect to the Digilent Cable on localhost:3121

connect_hw_server -url localhost:3121
current_hw_target [get_hw_targets */xilinx_tcf/Digilent/12345]
open_hw_target

# Program and Refresh the XC7K325T Device

current_hw_device [lindex [get_hw_devices] 0]
refresh_hw_device -update_hw_probes false [lindex [get_hw_devices] 0]
set_property PROGRAM.FILE {C:/design.bit} [lindex [get_hw_devices] 0]
set_property PROBES.FILE {C:/design.ltx} [lindex [get_hw_devices] 0]

program_hw_devices [lindex [get_hw_devices] 0]
refresh_hw_device [lindex [get_hw_devices] 0]

Я бы сам написал это примерно так:

# Connect to the Digilent Cable on localhost:3121
connect_hw_server -url localhost:3121
current_hw_target [get_hw_targets */xilinx_tcf/Digilent/12345]
open_hw_target

# Program and Refresh the XC7K325T Device
set Device [lindex [get_hw_devices] 0]
current_hw_device $Device
refresh_hw_device -update_hw_probes false $Device
set_property PROGRAM.FILE "C:/design.bit" $Device
set_property PROBES.FILE "C:/design.ltx" $Device

program_hw_devices $Device
refresh_hw_device $Device

так что я извлекаю список только один раз, но это чисто стиль; если один работает, другой тоже.

person Donal Fellows    schedule 27.04.2018