首页
学习
活动
专区
圈层
工具
发布
50 篇文章
1
资源利用率报告中的LUT和LUTRAM有什么区别
2
xilinx verilog语法技巧(三)--RAM的初始化
3
为什么推荐使用XPM?
4
Block RAM的基本结构
5
为什么要用XPM_MEMORY
6
Vivado中用于时钟操作的几个Tcl命令
7
影响FPGA时序的进位链(Carry Chain), 你用对了么??
8
动态时钟相位
9
动态时钟频率
10
如何缩短Vivado运行时间
11
你的FPGA设计有这些缺陷吗
12
report_utilization远比你想象的强大
13
vivado如何快速找到schematic中的object
14
FPGA中的CLOCK REGION和SLR是什么含义
15
FPGA中的BEL, SITE, TILE是什么含义
16
如何快速查找目标cell
17
都是pin,有什么区别
18
都是net,有什么区别
19
一张图看懂cell, pin, net, port
20
如何快速找到组合逻辑生成的时钟
21
【Vivado那些事】Vivado下头文件使用注意事项
22
Pblock可以这么画
23
关于Pblock的8个必知问题
24
常用的跟Pblock相关的Tcl命令
25
【Vivado】那些事儿-汇总篇
26
【Vivado那些事】Xilinx FPGA普通IO能不能直接接入PLL作为时钟输入
27
Storage Elements
28
D触发器都有哪几种类型?对应什么样的代码?
29
Xilinx 7系列FPGA逻辑单元理解
30
Vivado下查看芯片资源
31
对RAM初始化怎么做
32
干货:Vivado 直接修改RAM初始化文件,避免重新综合、实现的方法
33
借助Elaborated Design优化RTL代码
34
一张图理解什么是好的设计层次
35
9个关于SSI芯片的必知问题
36
Vivado 2018.3 report_qor_suggestions怎么用
37
Vivado 2019.1新特性(5):更新的report_qor_suggestions
38
Xilinx的高质量时钟输出ODDR原语【随路时钟】【全局时钟网络】【ZC706输出时钟】【ZYNQ】
39
FPGA中BEL Site Tile FSR SLR分别指什么?
40
跟I/O相关的几个命令
41
Vivado Non-Project模式
42
FPGA中降低时钟skew的几种方法
43
FPGA时序优化之Reduce MUXF Mapping
44
什么是Forwarded Clock?
45
几个常见问题
46
如何让同一层次的模块在布局时更紧凑一些
47
什么情况下要用OOC综合方式
48
Vivado 2019.1新特性(2):report_ram_utilization
49
URAM和BRAM有什么区别
50
write_first/read_first/no_change什么区别
清单首页FPGA文章详情

几个常见问题

vivado -mode tcl和vivado -mode batch有什么区别?

同样的Tcl脚本,我们可以采用Vivado Tcl模式运行,也可以采用Vivado Batch模式运行,如下所示:

vivado -mode tcl -source user.tcl

vivado -mode batch -source user.tcl

从Tcl角度而言,两者并没有本质的差别,只有一些细微差别。细微差别如下:

-mode tcl会打开Vivado tcl shell,运行结束后仍然在Vivado tcl shell下;

-mode batch也会打开Vivado tcl shell,但运行结束后会返回native shell下;

-mode batch模式下可以通过选项-tclargs设置参数,例如:

vivado -mode batch -source script.tcl -tclargs "FPGA=115-2"

同时,batch模式下未知命令不会被送给OS去执行。

如何导出更详细的资源利用率报告?

在Vivado图形界面下,我们可以通过命令report_utilization生成资源利用率报告。在这个报告里可以看到每个模块的资源利用率,如下图所示。有时我们需要将报告导出来,此时可以在下图所示界面点击鼠标右键,选择“Export to Spreadsheet”就会生成一个Excel文件,该文件里会详细显示每个模块的资源利用率信息。

此外,我们还可以通过选项-spreadsheet_depth管理需要查看到的层次,最顶层算1,如下图所示。使用-spreadsheet_file时需要和-name一起使用。

如果只是看总体资源利用率,那么就可以直接用report_utilization添加-file选项。

如何获取被复制的寄存器?

降低扇出的一种方法就是复制寄存器。通常,工具会根据时序需求对驱动高扇出net的寄存器进行复制,新生成的寄存器名字中会包含关键字rep,如下图所示。如果我们设计中存在由原始寄存器作为起始单元的时序例外约束,那么就要确保该约束同样作用于新生成的复制寄存器。尽管我们可以通过关键字rep来锁定这些复制的寄存器,但这种方法仍然过于繁琐。好在命令get_cells本身就提供了选项-include_replicated_objects,这样添加该选项即可获得原始寄存器外加新生成的复制寄存器。

如何限定约束的作用域?

假定有这样一个场景:模块A内部包含一些多周期约束的路径,同时模块A本身在设计中被多次实例化。如果把模块A当作顶层描述其中的多周期路径约束将非常方便,这样避免了设计层次的干扰。而实际情形是模块A并非顶层,如果针对模块A的实例化逐一添加该约束,那么这个过程将会较为繁琐且容易出错。有没有其他办法呢?想想Vivado自带的IP,很多IP都自带约束,同一个IP无论实例化多少次,我们只会看到一份约束文件。这是因为这些约束文件都被限制了作用域。如下图所示,显示了IP FIFO生成的约束文件的作用域,这个作用域是通过属性SCOPED_TO_CELLS和SCOPE_TO_REF来指定。通过其一就可指定作用域。这里SCOPE_TO_REF值为模块A本身的名字,而SCOPED_TO_CELL的值为模块A实例化的名字,注意两者含义的差别。采用此方法我们就可以将用户约束文件限定其作用域为指定模块。需要注意的是有些约束依赖于外部时钟,比如多周期路径约束,set_multicycle_path跟的数值为时钟周期个数,工具要将其转换为绝对时间ns,就要知道时钟周期具体数值,因此还要指定该约束文件的处理顺序,这可通过属性PROCESSING_ORDER指定,将其值设置为LATE即可。

launch_runs时的jobs和thread有什么区别?

Launch Runs时会弹出如下图所示的对话框,其中可以让用户选择“Number of jobs”,其含义是指当同时执行多个Run时可使用的本地CPU核的个数。而thread线程数,则需要通过Tcl脚本设定,

set_param general.maxThreads 4

Copyright @ FPGA技术驿站

转载事宜请私信 | 获得授权后方可转载

下一篇
举报
领券