首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用Vivado并行编程多个设备

使用Vivado并行编程多个设备
EN

Stack Overflow用户
提问于 2020-09-18 15:48:50
回答 1查看 680关注 0票数 1

我们有一个设置,两个Xilinx FPGA设备分别连接到一台计算机。我们使用Vivado Tcl控制台在我们的自动化环境中对FPGA进行编程。我能够一个接一个地成功地对这两个设备进行编程。但是,我正在尝试通过并行启动两个vivado实例并同时对每个设备进行编程来减少编程时间。在这样做的过程中,我得到了如下错误:

代码语言:javascript
运行
复制
Targets(s) ", jsn-JTAG-SMT2-XXXXXXXXjsn-JTAG-HS3-XXXXXXXX" may be locked by another hw_server.

Error Message: ERROR: [Common 17-39] 'get_hw_targets' failed due to earlier errors.

这是我的python脚本,它在不同的端口上启动hw_server和cs_server,并并行地编程FPGA。

代码语言:javascript
运行
复制
def program(hw_server_cmd, cs_server_cmd, cmd):
    cs_server_process = subprocess.Popen(cs_server_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf8')
    cs_server_process.wait()
    print("cs_server started")

    hw_server_process = subprocess.Popen(hw_server_cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf8')
    hw_server_process.wait()
    print("hw_server started")
    p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, encoding='utf8')        
    p.wait()
    stdout, stderr = p.communicate()
    p.wait()
    hw_server_process.kill()
    cs_server_process.kill()
    print('Command [{}] return value: {}'.format(cmd, p.returncode))
    print('stdout for cmd [{}]: {}'.format(cmd, stdout))
    print('stderr for cmd [{}]: {}'.format(cmd, stderr))


if __name__ == '__main__':
    cs_server_cmd_1 = r"C:\Xilinx\Vivado\2020.1\bin\cs_server.bat -d -stcp::3041"
    hw_server_cmd_1 = r"C:\Xilinx\Vivado\2020.1\bin\hw_server.bat -d -stcp::3121"
    cmd_1 = r'C:\Xilinx\Vivado\2020.1\bin\vivado.bat -mode tcl -source ProgFPGA_1.tcl'

    cs_server_cmd_2 = r"C:\Xilinx\Vivado\2020.1\bin\cs_server.bat -d -stcp::3042"
    hw_server_cmd_2 = r"C:\Xilinx\Vivado\2020.1\bin\hw_server.bat -d -stcp::3122"
    cmd_2 = r'C:\Xilinx\Vivado\2020.1\bin\vivado.bat -mode tcl -source ProgFPGA_2.tcl'

    fpga_prog_threads = {}    
    fpga_prog_threads[0] = threading.Thread(name=f'Programming FPGA on Platform 1', target=program, args=[hw_server_cmd_1, cs_server_cmd_1,  cmd_1])
    fpga_prog_threads[1] = threading.Thread(name=f'Programming FPGA on Platform 2', target=program, args=[hw_server_cmd_2, cs_server_cmd_2, cmd_2])
    for t in fpga_prog_threads.values():
        t.start()
        #t.join()

    join_all_threads(list(fpga_prog_threads.values()), 3600)

下面是我使用的tcl脚本之一。另一个文件也包含相同的命令集,但不同的端口号和序列号。

代码语言:javascript
运行
复制
    open_hw_manager
    connect_hw_server -url 127.0.0.1:3121 -cs_url 127.0.0.1:3041 -allow_non_jtag
    current_hw_server 127.0.0.1:3121

    current_hw_target [get_hw_targets */xilinx_tcf/Digilent/XXXXXXXXXX]
    open_hw_target

    current_hw_device [lindex [get_hw_devices] 0]
    refresh_hw_device -update_hw_probes false [lindex [get_hw_devices] 0]
    
    set_property PROBES.FILE {} [lindex [get_hw_devices] 0]
    set_property FULL_PROBES.FILE {} [lindex [get_hw_devices] 0]
    set_property PROGRAM.FILE {C:/temp/bitfile2.bit} [lindex [get_hw_devices] 0]
    program_hw_devices [lindex [get_hw_devices] 0]
    refresh_hw_device [lindex [get_hw_devices] 0]    
    exit

有人能指出我在这里做错了什么吗?是什么阻止了我同时对设备编程?

附言:最初我们使用Xilinx ISE。我试图用impact.exe同时对这些设备进行编程。在这种情况下,一个FPGA或另一个总是返回错误消息,如“引脚没有变高”。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-18 23:19:25

我想知道你们每台设备是否有1根JTAG电缆。如果您这样做了,那么您可以为每根电缆启动一个hw_server实例。具体操作方法如下:

https://forums.xilinx.com/t5/FPGA-Configuration/Multiple-hw-server-instances-on-same-PC/m-p/749154#M5849

在您的示例中,可以启动一个hw_server实例,如下所示:

代码语言:javascript
运行
复制
hw_server -stcp::3122 -e "set jtag-port-filter Digilent/xxx"

其中将xxx值替换为电缆中的相应id。

请注意,对于windows,我不确定引号是否有效。因此,在这种情况下,您可能需要使用传递给hw_server的初始化文件。

使用此示例时,init文本文件将如下所示:

代码语言:javascript
运行
复制
# set JTAG port filter
set jtag-port-filter Digilent/xxx

假设您将文件命名为'cable1.init‘,那么您可以启动服务器,如下所示:

代码语言:javascript
运行
复制
hw_server -stcp::3122 --init=cable1.init

第二个实例与此设置类似,但是您将使用stcp选项和电缆配置指定一个不同的端口,以指向第二个电缆。

在编程时,您将使用端口号与设备通信,现在您应该能够并行编程了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63951408

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档