Vivado使用入门之二:网表物理约束

目录

一、背景

二、物理约束

2.1 概念

2.2 网表约束

2.2.1 CLOCK_DEDICATED_ROUTE

2.2.2 MARK_DEBUG

2.2.3 DONT_TOUCH

2.2.4 LOCK_PINS

三、位置约束

四、布线约束

4.1 route

4.2 assign routing mode

五、参考

一、背景

        在工程设计中为了保证上板后功能正常,需对设计定义相关的约束要求。约束根据设计对象的不同可分为时序约束(对时钟)和物理约束(对网表),根据流程可划分为综合约束和实现约束,本文主要讲解物理约束,示例器件为xc7k410tfbv900 ,vivado版本为2019.1

二、物理约束

2.1 概念

    物理约束包括I/O位置约束,网表单元约束,布局约束,布线约束,约束的内容是保存在XDC(Xilinx Design Constraints)文件或Tcl脚本中,在打开工程时被加载进入工程中,载入工程后也可以对约束进行修改。大部分约束的格式为“set_property <propert_name> <value> <object list> ,区域约束的格式存在差异,格式为“create_pblock block_name re size_pblock [get_pblocks block_name]” -add {cell}

2.2 网表约束

    网表约束主要是对如端口ports,引脚pin,线nets和单元cells对象,使综合和实现过程按照指定的方式和进行处理。

    网表约束主要有四个

a) CLOCK_DEDICATED_ROUTE

b) MARK_DEBUG

c) DONT_TOUCH

d) LOCK_PINS

2.2.1 CLOCK_DEDICATED_ROUTE

    ​    ​CLOCK_DEDICATED_ROUTE作用对象为net,时钟信号正常是只能通过时钟树到达目的对象的时钟引脚,设置改属性后,时钟信号可走普通线路到达目的对象。缺点是通常走普通线路时延较大,容易导致时序违例。改属性设置为false即为允许时钟从输入端口到达BUFG或MMCM走普通线路。

以一个简单的异步清零寄存器为例,为了构造时钟信号需要走普通线路才能到达的场景,特地将clk端口和FF约束到不同的半区,使用的器件为xc7k480tffv1156-1 (active)

module dedicate(clk,d,rst,out);
input clk,d,rst;
output reg out;
always @(posedge clk or posedge rst) beginif (rst) beginout<=0;endelse  beginout<=d;	end
end
endmodule

XDC约束内容

set_property BEL AFF [get_cells out_reg]
set_property LOC SLICE_X189Y393 [get_cells out_reg]
set_property PACKAGE_PIN AK19 [get_ports clk]

运行到place时报错,符合预期,clk端口无法跨越半个芯片区域到达BUFG,只能到达所属半区的BUFG

 

对clk net添加属性CLOCK_DEDICATED_ROUTE,布局布线通过

set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets {clk_IBUF}]

左下角的clk端口通过普通布线路径到达BUFG

 

2.2.2 MARK_DEBUG

        在RTL中对net设置MARK_DEBUG,net上的信号会自动地被加入到Debug上,查看Debug上信号的波形,进行功能的确认。添加DEBUG有以下几种方式

方法1、可直接在RTL代码中对net、reg对象标注

(* mark_debug = "true" *) wire [1:0] data;
(* mark_debug = "true" *) reg[1:0] state;

方法2:Schematic中添加

在Schematic图中选定要标记的net,右键弹出设置栏,选择Mark Debug,标记前如下图

 

标记后,在Debug窗口对out_OBUF设置Set Up Debug

 

弹出Set Up Debug窗口

 

设置采样率和输入通道阶段数

 

设置完成后,在Netlist和Net Properties种,out_OBUF前面有debug标志,Schematic中out_BUF连接的各个pin也带有标志,如红框所示。

 

2.2.3 DONT_TOUCH

    DONT_TOUCH主要是仿真单元或net被优化掉,对于一些逻辑检测或调试很有必要,并且对于一些高扇出的单元,手动复制的寄存器添加属性后也不会被优化。具体的使用方面可参照之前的文章Vivado综合属性系列之七 DONT TOUCH 或CSDN网址:https://blog.csdn.net/zyp626/article/details/130715598

2.2.4 LOCK_PINS

LOCK_PINS用于指定LUT的逻辑约束(I0,...,I5)和Device上LUT单元的物理位置(A1,...,A6)的映射关系,比较常用的场景是将处于关键路径上的LUT的映射到Device中LUT的A5和A6,可以减小时延。

以示例工程中的cnt_t_1[3]_i_3_1(LUT6)为例,inst映射到device的关系见左下角红框,I0对应A4

 

Tcl Console设置LOCK_PINS属性,I0,I1分别映射为A6,A5

set_property LOCK_PINS { I0:A6 I1:A5 } [get_cells u_hdmi_display_1/U0/Inst_DVITransmitter/Inst_TMDSEncoder_red/cnt_t_1[3]_i_3__1]

结果如图所示,映射关系已更改,符合预期

 

也可在Device中直接选中LUT6网表,右键后点击Lock Cell Input Pins

三、位置约束

        ​网表在device中的状态分为两种:固定位置和非固定位置,固定位置是指被用户通过设置XDC约束,或者在cell对象中使用了IS_LOC_FIXED/IS_BEL_FIXED三种方式进行了手动布局,三种方式效果相同。非固定位置需要实现工具对网表进行布局,通过该方式布局后,网表会有IS_LOC_FIXED/IS_BEL_FIXED属性

    本节主要讲解固定位置的设置,在device界面上,可直接对网表进行位置约束,约束的阶段即可是综合后的网表,也可以是实现后的网表,以跨时钟域的代码为例

module slow_to_fast(digit1,digit2,rst,clk_f,clk_s,sum);
input digit1,digit2,rst,clk_f,clk_s;
output sum;
wire sum0;
(*KEEP="TRUE"*)  reg ff_f,ff_s1,ff_s2,ff_s3;
//组合逻辑的信号输出
assign sum0 = digit1+digit2;
//时钟域一
always@(posedge clk_s,negedge rst)
beginif(!rst)ff_f<=0;elseff_f<=sum0;
end
//时钟域二
always@(posedge clk_f,negedge rst)
beginif(!rst)beginff_s1<=0;ff_s2<=0;ff_s3<=0;endelse begin              //打两拍处理ff_s1<=ff_f;ff_s2<=ff_s1;ff_s3<=ff_s2;end
end
assign sum=ff_s3&!ff_s2;
endmodule

在Netlist窗口的Leaf Cells栏中包含了工程的所有网表,同时在“Window->Device”打开device窗口,

 

将左侧device的CLB放大,鼠标右键选中左侧的sum_OBUF_inst_i_1(LUT2),将其拖入到右侧的CLB中的LUT位置,保存即设置了该网表的约束,同时device上对应位置有背景颜色标记

 

查看网表的cell properties,fixed已被勾选,表示被约束了

 

在Constraints打开工程的约束文件,在xdc文件中出现了sum_OBUF_inst_i_1的LOC约束

 

四、布线约束

       布线约束主要是对net的布线资源进行控制,效果和Vivado工具直接布线相同。在综合阶段,要对net进行布线的话,net的driver和load必须先进行约束,否则在device界面不会显示net。布线约束有route和assign routing mode两种方式。

4.1 route

        仍旧以2.3节的设计为例,综合后的网表图如下,对ff_s1进行布线约束,对应的driver和load为ff_s1_reg,ff_s2_reg。

 

在device中对ff_s1_reg和ff_s2_reg进行位置约束后,在右侧的layers->nets中可知无布线约束的net为unrouted net,显示深红色,ff_s1在device中为图中的斜线

 

也可选中net执行Report Net Route Status

 

选中net,右键选择“Route”,进行布线约束,原先的ff_s1布线约束后经过了一些switchbox

 

选中该net再执行fix routing将约束固定,保存修改,查看xdc约束内容,包含了FIXED_ROUTE属性的约束,即完成了布线约束

 

4.2 assign routing mode

    assign routing mode模式布线约束操作与route类似,选中要布线约束的net,右键后选择Assign Routing Mode进入设置界面

 

选择load net delay进入设置load界面,Cell Pins中会显示该net所连接的load,此处只有一个,未选择时“OK”图标

 

点击第一行,此时“OK”高亮,点击"OK",

 

        进入Routing Assignment界面,下图右侧中,Assgined Nodes显示的是将布线约束的net分为了多个Net Gap,通俗理解即分为多段,在该栏中任选一行,左侧Device中对应蓝色高亮显示该Net。

        在Neighbor Nodes选中任意一个nodes后,Neighbor Nodes中会对应显示该net的node在Base Tile中的其他可连接的nodes。

 

在Aaaigned Nodes中也可以对任意一个Nodes执行删除,或在该Nodes前后添加Net Gap

 

设置Assigned nodes后,点击下方的“Assign Routing”图标,弹出左侧的Assign Routing窗口,点击“OK”进行Fix Routing,最后ctrl+s保存约束

 

XDC约束文件中新增ff_s1的FIXED_ROUTE约束,对应内容展示了约束net所经过的路径

 

五、参考

官方用户手册《ug903-vivado-using-constraints》

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/69826.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ工作流程详解

1 生产者发送消息的流程 (1)生产者连接RabbitMQ&#xff0c;建立TCP连接(Connection)&#xff0c;开启信道(Channel) (2)生产者声明一个Exchange (交换器)&#xff0c;并设置相关属性&#xff0c;比如交换器类型、是否持久化等 (3)生产者声明一个队列井设置相关属性&#xf…

eachars 自适应

目录 1. 案例&#xff1a; 2. 原因&#xff1a; 3. 解决&#xff1a; 1. 案例&#xff1a; 默认是正常宽度&#xff08;如图1&#xff09;&#xff0c;当再次跳转会该页面时&#xff0c;eachars图发生变化&#xff08;如图2&#xff09;。 图1 图2 2. 原因&#xff1a; 没有…

Gitlab-第四天-CD到k8s集群的坑

一、.gitlab-ci.yml #CD到k8s集群的 stages: - deploy-test build-image-deploy-test: stage: deploy-test image: bitnami/kubectl:latest # 使用一个包含 kubectl 工具的镜像 tags: - k8s script: - ls -al - kubectl apply -f deployment.yaml # 根据实际情况替换…

Redis持久化——RDB和AOF

Redis数据库是内存数据库&#xff0c;一旦出现服务宕机&#xff0c;那么内存中的数据就容易丢失。所以需要进行redis的持久化动作。 Redis持久化是指将Redis内存数据持存储到磁盘中&#xff0c;若出现了Redis服务宕机后&#xff0c;能够从硬盘中再恢复到Redis内存中。 Redis的持…

公司电脑三维图纸加密、机械图挡加密软件

机械图纸加密软件的问世&#xff0c;让很多的网络公司都大受其带来的工作中的便利。在安装了机械图纸加密软件后&#xff0c;不仅可以很好的管理员工在工作时的上网娱乐&#xff0c;在对整个公司员工的工作效率上也有着明显的提高&#xff0c;那么对于机械图纸加密软件的具体特…

Docker一键部署项目,无需登录XShell

文章目录 一键部署项目Docker手动部署SpringBoot项目编写docker部署的脚本文件script.sh 脚本内容 特别注意&#xff01;编写dockerfiledockerfile 文件内容 上传后端服务的jar包到服务器中执行 script 脚本部署后端服务 自动部署SpringBoot项目引入jsch依赖编写jsch工具类执行…

【T+】畅捷通T+修改数据精度小数点,提示小数位数只能改大。

【问题描述】 使用畅捷通T软件过程中&#xff0c; 修改数据精度过程中&#xff0c;由于误操作&#xff0c;误将数量小数位数改大&#xff0c;并且保存了。 但是看软件的说明以及提示&#xff0c; 软件提示&#xff1a;数量小数位只能改大。 软件说明&#xff1a;建账后位数只能…

Vue+SpringBoot后台管理系统:Vue3+TypeScript项目搭建(一)

写在开始:一个搬砖程序员的随缘记录文章目录 一、Node安装二、Vue CLI安装三、相关的版本四、创建Vue3TypeScript项目五、Vue项目初始化六、项目启动 一、Node安装 查看Note版本 node -v查看npm版本 npm -v然后将npm升级至最新版本 npm -g install npm将npm下载源换至http:…

【Linux】进程的基本属性|父子进程关系

个人主页&#xff1a;&#x1f35d;在肯德基吃麻辣烫 我的gitee&#xff1a;Linux仓库 个人专栏&#xff1a;Linux专栏 分享一句喜欢的话&#xff1a;热烈的火焰&#xff0c;冰封在最沉默的火山深处 文章目录 前言进程属性1.进程PID和PPID2.fork函数创建子进程1&#xff09;为什…

Spring的三种异常处理方式

1.SpringMVC 异常的处理流程 异常分为编译时异常和运行时异常&#xff0c;编译时异常我们 try-cache 进行捕获&#xff0c;捕获后自行处理&#xff0c;而运行时异常是不 可预期的&#xff0c;就需要规范编码来避免&#xff0c;在SpringMVC 中&#xff0c;不管是编译异常还是运行…

mac安装vscode 配置git

1、安装vscode 官网地址 下载mac稳定版安装很慢的解决办法 (转自) mac电脑如何解决下载vscode慢的问题 选择谷歌浏览器右上角的3个点&#xff0c;选择下载内容&#xff0c;右键选择复制链接地址&#xff0c;在新窗口粘贴地址&#xff0c; 把地址中的一段替换成下面的vscode.cd…

goland插件推荐Rider UI Theme Pack

推荐一个goland配色插件Rider UI Theme Pack&#xff0c;里面自带visual assist配色&#xff0c;配色截图如下&#xff1a; 直接在plugins里面进行搜索或者在插件home page下载后进行安装&#xff0c; 然后按照下图进行设置即可。 此插件还适用于Jetbrains旗下的Clion和Pycharm…