Vivado软件支持TCL脚本,可以纯TCL定制非工程模式FPGA流程,也可以作为GUI工程模式下TCL命令的一个补充。纯TCL定制非工程模式有许多优点,给予用户最大的灵活性去定制FPGA流程,包括控制所有步骤和管理所有的中间生成文件dcp,有利于版本管理和自动化,适用于高级玩家。当然GUI下的工程模式最适合入门,可以专注于解决问题,工作效率不是首要考虑。这时候选择TCL作为GUI模式下的一个补充功能有时候简直奇效。
常见运用场景,要找某个时钟的BUFG或者综合后网表中的某一个信号,还有就是自动触发ILA抓取信号,配合Python进行自动的分析,在信号处理中定位问题非常方便。
设置变量
set n 1
输出显示
puts $n
循环
set n 1
while{$n<10}{puts "n = $n";set n [expr {$x + 1}]}
函数/子过程
proc fun{x}{
puts "input is $x"
}
调用
fun(10)
自动触发ILA抓取信号
proc trig_ila {} {
run_hw_ila [get_hw_ilas -of_objects [get_hw_devices xc7k480t_0] -filter {CELL_NAME=~"u_ila_2"}]
wait_on_hw_ila [get_hw_ilas -of_objects [get_hw_devices xc7k480t_0] -filter {CELL_NAME=~"u_ila_2"}]
display_hw_ila_data [upload_hw_ila_data [get_hw_ilas -of_objects [get_hw_devices xc7k480t_0] -filter {CELL_NAME=~"u_ila_2"}]]
write_hw_ila_data -csv_file -force {C:\Users\Administrator\Desktop\script\aa.csv} hw_ila_data_3
}set x 0
while {$x < 10} {trig_ila; set x [expr {$x + 1}] }
可能要问,这么复杂的命令怎么记得住呢?其实在操作vivado GUI的时候它自己会把当前操作的TCL命令显示到TCL控制台里。如果经常用这个命令,就可以把命令粘贴到上面的TCL文件,保存为aa.tcl,自己再“创作”一下就行了。运行的时候直接在Tcl console 口输入下面的命令就行了。
source C:/Users/Administrator/Desktop/script/aa.tcl
要注意vivado下面的路径使用的是反斜杠/,和Windows下的路径不一样。
保存为csv格式,如果这时候再配合Python自动分析,就可以去喝茶慢慢等了。献上丑陋的Python代码,用一点学一点。
# -*- coding: UTF-8 -*-
import csv
import math
lenth = 1024
begin = 40
end = begin + lenth
energy = []
speed = []
ifft = []
with open('cfar_2nd1.csv','r') as csvfile:
reader = csv.DictReader(csvfile)
column1 = [row['cfar_2nd_u/R_rdata_delay7[32:0]'] for row in reader]for i in range(begin,end):
print(column1[i])for i in range(begin,end):
bb = bin(int(column[i],16))
energy_tmp = bb[-19:]
speed_tmp = bb[-27:-19]
energy.append(int(energy_tmp,2))
speed.append(int(speed_tmp,2))for x in ifft:
print(x)
再高级一点,让Python自动去检测抓到的CSV文件是否更新,然后自动处理。在分析信号处理和抓某个出现频率很低的异常信号的时候比较方便。
import os,time
import csv
import math
def max_ifft():
ifft = []
with open('aa.csv','r') as csvfile:
reader = csv.DictReader(csvfile)
column1 = [row['W_ifft1_xk_re[0][34:0]'] for row in reader]
with open('aa.csv','r') as csvfile:
reader = csv.DictReader(csvfile)
column2 = [row['W_ifft1_xk_im[0][34:0]'] for row in reader]for i in range(8192):
re = int(column1[i],10)
im = int(column2[i],10)
ans = math.sqrt(math.pow(re,2)+math.pow(im,2))
ifft.append(ans)print(max(ifft))
returnwhile 1:
statinfo = os.stat('C:/Users/Administrator/Desktop/script/aa.csv')
before = statinfo.st_mtime
time.sleep (10)
statinfo = os.stat('C:/Users/Administrator/Desktop/script/aa.csv')
after = statinfo.st_mtime
if before != after:
max_ifft()
before = after
很简单,把文件夹下面的抓的文件时间戳拿来比较,发现不同就说明文件以及更新了,sleep(10)秒钟再去看抓到的信号。
本文转载自:kuangxin的博客
https://blog.csdn.net/u010161493/article/details/79545731,如涉及版权,请联系小编删除
依元素科技 总经理陈俊彦介绍 : PYNQ是赛灵思的一个开源项目,Python on ZYNQ 让大一学生也能轻松搭建高性能嵌入式系统。使用Python语言和库,设计人员可以利用ZYNQ中的可编程逻辑和Arm处理器的优势来构建强大和令人兴奋的嵌入式系统。

使用者可以利用PYNQ创建下列的高性能嵌入式应用:
并行硬件执行
高帧率的视频处理
硬件加速算法
实时信号处理
高带宽IO
低延迟控制
Xilinx 大学计划PYNQ 二代PYNQ-Z2
PYNQ-Z2 开发板是Xilinx 大学计划支持PYNQ开源框架的第二代最新开发平台,根据第一代的反馈做功能升级。PYNQ开源框架可以使嵌入式编程用户在无需设计可编程逻辑电路的情况下充分发挥Xilinx Zynq SoC的功能。PYNQ-Z2除支持传统ZYNQ开发方式外,还可支持Python进行SoC编程,并且代码可直接在PYNQ-Z2上进行开发和调试。可编程逻辑电路以硬件库的形式导入并且可以通过API编程,这种方式基本上与软件库的导入和编程方式相同。


PYNQ-Z2 开发板以ZYNQ XC7Z020 FPGA为核心,配备有以太网,HDMI输入/输出,MIC输入,音频输出,Arduino接口,树莓派接口,2个Pmod,用户LED,按钮和开关。 兼容树莓派连接器、Arduino屏蔽连接器以及Pmod连接器可以支持多种配件拓展,同时这些接口也可以用作GPIO 。
我们欢迎关心新工科建设、双一流建设的老师加入Xilinx大学计划,我们有一系列的培养方案改革案例、最新课改成果、可以供您参考,关于联合实验室建设、课程改革、Vivado软件捐赠、校企共建课程、FPGA师资培训、学生竞赛、学生讲座等联系我们。
联系方式:edu@e-elements.com

E-Elements
FPGA我们是认真的!



