fpga基础|如何在XDC文件中使用get_pins/ports/cells/nets/clocks查找指定的对象

大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看完后喜欢的话就请关注我吧~谢谢~

我们在编写XDC约束文件时,需要将我们的约束命令和相应的对象联系起来,如果是刚入门fpga的新人经常会被一堆信号弄混了头,例如当初的我~ 因此我会在这篇文章中对常用的几个查找对象的命令进行说明介绍,便于新人理解如何查找到所需的对象。

一、ins/ports/cells/nets/clocks的区别

先上一张图以便说明:
在这里插入图片描述
结合上图,我们可以知道:

cell 是指的我们例化的模块,例如RAM、LUT、PLL、MMCM、还包括我们自己设计的模块和寄存器等等。

  • pin是指的每个cell的输入输出信号,比如模块的输入输出信号,寄存器的D端、C端和Q端,注意一下,如果是顶层模块的输入输出信号则不能使用pin定义。
  • port 顶层模块的输入输出信号,也是FPGA与外界通信的管脚。
  • net 是指pin与pin之间的连线。
  • clock当然就是指的我们所设置的时钟了。

下面我们再给出实际的代码,进一步对上述概念加深理解:

module  test_top(input  wire   clk_ref   ,  //clock input  wire   rst_n     ,  //portinput  wire   a         ,  //portoutput reg    b           //port
);wire pll_lock, clk_pll;  //netclk_wiz_0 ana_pll_inst(   //cell.clk_out1(clk_pll    ),  //pin  .reset   (!rst_n     ),  //pin  .locked  (pll_lock   ),  //pin  .clk_in1 (clk_ref    )   //pin);always @(posedge clk_pll or negedge rst_n) begin  //b_reg is a cellif (!rst_n) beginb <= 1'b0;end else beginb <= a;endendendmodule

提示一下,如果是寄存器的话,需要在寄存器名字后加上_reg的后缀才能找到对应的对象哦,例如上面代码中的b,需要加上后缀,就变成了b_reg。

二 、get_*命令的使用

接下来我们会利用vivado中的Tcl Console 功能,将在该窗口下输入一些get_*查找命令来举例说明该如何查找我们设计中的对象,

假设我们的fpga项目中有以下代码:

inout    wireclk_wiz_0 ana_pll_inst(.clk_out1(clk_osc_src),.clk_out2(clk_pll       ),.reset     (!rst_n        ),.locked   (pll_locked),.clk_in1   (clk_ref_in)    );always @(posedge clk_osc_src or negedge rst_n) begin  if (!rst_n) begin            clk_osc <= 1'b0;        end else begin            clk_osc <= ~clk_osc;        end    end

那么我们该如何找到这些对象呢?

查找对象的命令的基本格式都是get_* pattern_name, 我们可以使用以下命令:

  • get_ports patterns :用于查找指定模式的端口(输入或输出)的集合

例如:

get_ports scl
  • get_cells patterns :用于查找设计中匹配指定模式的单元的集合

例如:

get_cells ana_pll_inst
get_cells clk_osc_reg
  • get_pins patterns :用于查找指定模式的引脚的集合

例如:

get_pins clk_osc_reg/D
get_pins clk_osc_reg/C
get_pins clk_osc_reg/Q
get_pins ana_pll_inst/clk_out1
  • get_nets patterns :用于查找匹配指定模式的线的集合

例如:

get_nets scl
get_nets clk_ref_in
  • get_clocks patterns :用于查找匹配指定模式的时钟的集合

例如:

get_clocks clk_sys

下图是以上示例命令在vivado中的TCL Console 窗口中的输出结果:
在这里插入图片描述
除了上面举例的使用方式之外,这些get_*命令还有以下可选项:

在这里插入图片描述
下面进行说明:

-hierarchical: 是用于递归查找所有层次,返回匹配的对象

举例说明:

如果我想查找一个名为ctrl_inst里的a寄存器的D端

我如果不使用-hierarchical的话,就只能是:

get_pins ctrl_inst/a_reg/D

如果使用-hierarchical,则是:

get_pins -hierarchical a_reg/D

可见,通过-hierarchical,可免于写具体的例化模块名称。

-of_objects:用于在-of后面的结果中寻找匹配的对象

举个栗子:

如果我想在名为a的寄存器找寻与之相连的net,使用下面的命令即可:

get_nets -of [get_cells a_reg]

可见,pins/ports/cells/nets/clocks这些命令及其对应的对象并不是泾渭分明的,他们之间也有密切的关系,下图所示的箭头方向表示已知箭头末端对象可获取箭头指向的对象。
在这里插入图片描述
再次举例说明:

已知网线名查找对应时钟名

get_clocks -of [get_nets clk_osc]

已知引脚名查找对应的模块名

get_cells -of [get_pins */clk_out2]

已知模块名查找对应的引脚名


get_pins -of [get_cells ana_pll_inst]

已知模块名查找连接的网线名


get_nets -of [get_cells ana_pll_inst]

已知引脚名查找对应的网线名

get_nets -of [get_pins  ana_pll_inst/clk_out1]

已知引脚名查找对应的时钟名

get_clocks -of [get_pins clk_osc_reg/C]

TCL Console 窗口中的查找结果如下图所示:
在这里插入图片描述
-filter: 用于查找满足条件的对象

有如下选项:

  • 可使用 directionin / directionout 选择端口输入输出不同方向的信号

  • 还可以使用以下逻辑:

  • 等于 ==

  • 不等于 !=

  • 匹配 =~

  • 不匹配 !~

若有多个表达式,其返回值为bool类型时,支持逻辑操作:

  • 与 &&
  • 或 ||

再次举例说明:

get_ports * -f {direction==in}
get_ports * -f {direction==out}

输出结果如下所示:
在这里插入图片描述
最后再提一下,在使用get_*命令时,还有以下符号需要注意:

  • [ ]:在中括号命令中的代码会被当做表达式执行
  • *: 可以使用*指示任意对象,

如果你喜欢这篇文章的话,请关注我的公众号-熊熊的ic车间,里面还有ic设计和ic验证的学习资料和书籍等着你呢~欢迎您的关注!

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

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

相关文章

【NPS】内网穿透工具之 NPS

一、linux 安装 nps nps-releases&#xff1a;https://github.com/ehang-io/nps/releases 1.1、在 ubuntu下安装对应版本&#xff08;非docker&#xff09; 可以看到如下指令 wget https://ghproxy.com/https://github.com/ehang-io/nps/releases/download/v0.26.10/linux…

plotly绘图——热力图

文章目录 介绍热力图基础热力图代码解释 多热力图代码解释 显示数字的热力图代码解释 介绍 plotly是一个易于使用&#xff0c;功能强大的python绘图库&#xff0c;用于构建可交互式的图表&#xff08;可以自行运行后使用鼠标拖拽图片试试&#xff09;&#xff0c;本系列文章将介…

李廉洋:4.16黄金,原油最新资讯,亚盘面走势分析及策略。

周一&#xff0c;10年期美国国债收益率攀升3个基点&#xff0c;至4.55%&#xff0c;原因是投资者在权衡中东紧张局势加剧演变为全面地区战争的风险。美国国债将成为市场关注的焦点&#xff0c;上周美国国债收益率上升12个基点&#xff0c;至去年11月以来的最高水平&#xff0c;…

在windows中anaconda中安装fasttext (whl 文件安装)

Anaconda安装第三方包&#xff08;whl文件&#xff09; windows 安装fasttext 一直不成功&#xff0c;python 版本3.8 网上教程都是 https://www.lfd.uci.edu/~gohlke/pythonlibs/#fasttext 下载然后安装&#xff0c;但是这个网站里我没找到哈哈哈。。。 然后就是成功方案&am…

Sonar下启动发生错误,elasticsearch启动错误

Download | SonarQube | Sonar (sonarsource.com) 1.首先我的sonar版本为 10.4.1 &#xff0c;java版本为17 2.sonar启动需要数据库,我先安装了mysql, 但是目前sonar从7.9开始不支持mysql&#xff0c;且java版本要最少11,推荐使用java17 3.安装postsql,创建sonar数据库 4.启…

【Spring】依赖注入(DI)时常用的注解@Autowired和@Value

目录 1、Autowired 自动装配 1.1、要实现自动装配不是一定要使用Autowired 1.2、Autowired的特性 &#xff08;1&#xff09;首先会根据类型去spring容器中找(bytype),如果有多个类型&#xff0c;会根据名字再去spring容器中找(byname) &#xff08;2&#xff09;如果根据名…

基于注解以及配置类使用SpringIoc

四 基于注解方式使用SpringIoc 和 XML 配置文件一样&#xff0c;注解本身并不能执行&#xff0c;注解本身仅仅只是做一个标记&#xff0c;具体的功能是框架检测到注解标记的位置&#xff0c;然后针对这个位置按照注解标记的功能来执行具体操作。 本质上&#xff1a;所有一切的…

extends继承

目录 什么时候用继承? 继承的格式? 继承的特点 子类可以继承父类的哪些呢&#xff1f; 是否可以继承父类的构造方法呢&#xff1f; 是否可以继承成员变量&#xff1f; 是否可以继承成员方法&#xff1f; 在Java中&#xff0c;extends关键字用于实现继承关系。通过使用…

Go gin框架(详细版)

目录 0. 为什么会有Go 1. 环境搭建 2. 单-请求&&返回-样例 3. RESTful API 3.1 首先什么是RESTful API 3.2 Gin框架支持RESTful API的开发 4. 返回前端代码 go.main index.html 5. 添加静态文件 main.go 改动的地方 index.html 改动的地方 style.css 改动…

洛谷 P9532 [YsOI2023] 前缀和

题目背景 Ysuperman 模板测试的试机题。 小心立秋&#xff0c;小心秋丽。 题目描述 立秋有一个长度为 n 的数组 a&#xff0c;所有数字都是正整数&#xff0c;并且除了其中第一个数字以外其它数字都等于前面所有数字的和。 例如&#xff0c;数组 [1,1,2,4,8,16] 就有可能是…

基于U-Net的图像分割算法介绍

U-Net是一种用于图像分割的深度学习架构,其设计初衷是用于生物医学图像分割,尤其是医学影像中的细胞分割任务。U-Net结构独特,具有编码器-解码器结构,能够有效地捕捉图像中的局部和全局信息,并在像素级别上进行精确的分割。 相关论文: U-Net: Convolutional Networks for…