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

news2024/11/19 9:35:00

目录

一、背景

二、物理约束

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) begin
	if (rst) begin
		out<=0;
	end
	else  begin
	out<=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)
begin
    if(!rst)
        ff_f<=0;
    else
        ff_f<=sum0;
end
//时钟域二
always@(posedge clk_f,negedge rst)
begin
    if(!rst)
    begin
        ff_s1<=0;
        ff_s2<=0;
        ff_s3<=0;
    end
        else 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.coloradmin.cn/o/886309.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【BI看板】Docker-compose安装Superset,安装最新版本2.1.0

软件及环境准备 docker&#xff0c; docker-compose docker-compose安装 字节码安装 #wget https://github.com/docker/compose/releases/download/v2.5.0/docker-compose-linux-x86_64 #mv docker-compose-linux-x86_64 docker-compose #chmod x /usr/local/bin/docker-com…

一、计算机网络体系结构

Content 1. 计算机网络的组成2. 计算机网络的功能3. 计算机网络的分类4. 计算机网络的性能指标5. 计算机网络分层结构OSI模型TCP/IP模型互联网五层模型共同点&#xff1a; 6. 计算机网络提供的服务按三种方式分类面向连接服务和无连接服务可靠服务和不可靠服务有连接服务和无连…

5G+AI数字化智能工厂建设解决方案PPT

导读&#xff1a;原文《5GAI数字化智能工厂建设解决方案》&#xff08;获取来源见文尾&#xff09;&#xff0c;本文精选其中精华及架构部分&#xff0c;逻辑清晰、内容完整&#xff0c;为快速形成售前方案提供参考。数字化智能工厂定义 智能基础架构协同框架 - 端、边、云、网…

Java课题笔记~ SpringMVC拦截器

SpringMVC 中的 Interceptor 拦截器&#xff0c;它的主要作用是拦截指定的用户请求&#xff0c;并进行相应的预处理与后处理。其拦截的时间点在“处理器映射器根据用户提交的请求映射出了所要执行的处理器类&#xff0c;并且也找到了要执行该处理器类的处理器适配器&#xff0c…

2023华为产品测评官-开发者之声 + 华为云ModelArts试用体验心得

2023华为产品测评官&#xff0d;开发者之声 华为云ModelArts试用体验心得 文章目录 2023华为产品测评官&#xff0d;开发者之声 华为云ModelArts试用体验心得一、活动介绍二、华为云ModelArts简介三、AI Gallery简介步骤1&#xff1a;订阅模型步骤2&#xff1a;使用订阅模型部…

Reids 的整合使用

大家好 , 我是苏麟 , 今天带来强大的Redis . REmote DIctionary Server(Redis) 是一个由 Salvatore Sanfilippo 写的 key-value 存储系统&#xff0c;是跨平台的非关系型数据库。 Redis 是一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选…

冯·诺依曼计算机

一、定义 冯诺依曼机&#xff08;von Neumann machine&#xff09;&#xff0c;又称冯诺依曼计算机&#xff0c;根据冯诺依曼提出的存储程序概念设计的计算机。主要特征是&#xff1a;指令与数据都以二进制形式储存在存储器里&#xff1b;指令根据其储存的顺序执行。 冯…

SpringBoot常用注解 - @Controller

Controller : Controller是加在类上面的注解&#xff0c;使得类里面的每个方法都返回一个视图页面 实际开发中&#xff0c;有时候只是让后端的结果返回到前端&#xff0c;而不作为新的视图页面&#xff0c;此时需要结合 ResponseBody&#xff0c;让这个方法返回给前端的不是一个…

三星霸主地位“无可撼动“,DRAM内存市场份额创近 9 年新低仍第一

三星电子在DRAM市场的竞争地位一直备受关注。据报告显示&#xff0c;除了市场份额下降外&#xff0c;三星电子在上半年的销售额也出现了下滑。这主要是由于全球消费电子产品需求下滑&#xff0c;导致三星电子的芯片需求减少。 存储芯片业务所在的设备解决方案部门的营收和利润也…

快速提高写作生产力——使用PicGo+Github搭建免费图床,并结合Typora

文章目录 简述PicGo下载PicGo获取Token配置PicGo结合Typora总结 简述PicGo PicGo: 一个用于快速上传图片并获取图片 URL 链接的工具 PicGo 本体支持如下图床&#xff1a; 七牛图床 v1.0腾讯云 COS v4\v5 版本 v1.1 & v1.5.0又拍云 v1.2.0GitHub v1.5.0SM.MS V2 v2.3.0-b…

Python_数据容器详解

Python数据容器 1. 列表基础语法和操作练习题 2. 列表的循环练习题 3. 元组 tuple4. 元组的循环练习题 5. 字符串6. 切片练习总结 7. set 集合8. 字典 dict字典的嵌套总结 字典常用操作练习 9. 对比总结以及通用操作对比总结通用操作 1. 列表基础语法和操作 """…

蓝桥杯嵌入式省一教程:(二)LCD显示

在嵌入式开发中&#xff0c;屏幕显示是一个非常重要的功能。同时&#xff0c;其移植对于初学者来说较为复杂&#xff0c;需要较好地掌握I2C或SPI等通讯协议。然而&#xff0c;在蓝桥杯中&#xff0c;比赛方已经为我们提供了与LCD有关的库&#xff0c;这让我们能够简单方便地使用…

Nginx 下载、安装与运行

下载地址 Nginx官网 - 下载页面 在Windows电脑&#xff0c;下载Windows版本。 下载的就是一个 zip 压缩包。解压后的文件就是可以直接使用的 Nginx 。 版本说明 选择 Mainline 版本就可以了。 解压到合适的位置 运行Nginx 命令行&#xff0c;进入 Nginx 所在的目录。运…

产品经理:能不能把 Vue 的中文输入法 bug 解决了?

前言 有个挺常见的需求相信大家应该都遇到过&#xff0c;就是一个搜索框&#xff0c;边输入边提示&#xff0c;类似于下面这样&#xff1a; 这玩意在前端也挺好实现的&#xff0c;就 v-model 然后 watch 再做个防抖请求接口呗&#xff01;于是我&#xff1a; <template>…

SAP MM学习笔记25- SAP中 基本数量单位,发注单位,发注价格单位

SAP 的 MM Master 中有 3种单位。 1&#xff0c;基本数量单位&#xff08; 基本订单单位&#xff0c; 库存管理的最小单位&#xff09; 2&#xff0c;发注单位&#xff08;订单单位&#xff09; 3&#xff0c;发注价格单位&#xff08;订单价格单位&#xff09; 管理 SAP 库…

【jenkins】jenkins流水线构建打包jar,生成docker镜像,重启docker服务的过程,在jenkins上一键完成,实现提交代码自动构建的功能

【jenkins】jenkins流水线构建打包jar&#xff0c;生成docker镜像&#xff0c;重启docker服务的过程&#xff0c;在jenkins上一键完成&#xff0c;实现提交代码自动构建&#xff0c;服务重启&#xff0c;服务发布的功能。一键实现。非常的舒服。 1. 启动脚本 shell脚本 这是 s…

测试部门来了个00后卷王之王,老油条感叹真干不过,但是...

在程序员职场上&#xff0c;什么样的人最让人反感呢? 是技术不好的人吗?并不是。技术不好的同事&#xff0c;我们可以帮他。 是技术太强的人吗?也不是。技术很强的同事&#xff0c;可遇不可求&#xff0c;向他学习还来不及呢。 真正让人反感的&#xff0c;是技术平平&…

SystemVerilog之接口详解

1.入门实例 测试平台连接到 arbiter的例子&#xff1a;包括测试平台, arbiter仲裁器, 时钟发生器 和连接的信号。 ㅤㅤㅤ ㅤ ㅤㅤㅤㅤㅤ Arbiter里面可以自定义发送的权重&#xff0c; 是轮询还是自定义 grant表示仲裁出来的是哪一个&#xff0c;也即只有0&#xff0c;1&am…

基于springboot校园缴费管理系统

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战 主要内容&#xff1a;毕业设计(Javaweb项目|小程序等)、简历模板、学习资料、面试题库、技术咨询 文末联系获取 项目介绍…

MySQL 索引为什么使用 B+ 树,而不使用红黑树 / B 树 ?

面试官问 &#xff1a;索引为什么使用 B 树&#xff0c;而不使用 B 树&#xff0c;不使用红黑树呢 首先 B 树和 B 树 都是多叉搜索树&#xff0c;然后我们先来观察一下 B 树和 B 树的数据结构&#xff1a; B 树的数据结构实现 >> B 树的数据结构实现 >> 【B 树相…