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     ,  //port
    input  wire   a         ,  //port
    output reg    b           //port
);


    wire pll_lock, clk_pll;  //net


    clk_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 cell
        if (!rst_n) begin
            b <= 1'b0;
        end else begin
            b <= a;
        end
    end



endmodule

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

二 、get_*命令的使用

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

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


    inout    wire
    

    clk_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验证的学习资料和书籍等着你呢~欢迎您的关注!

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

P1706 全排列问题

原题链接:全排列问题 - 洛谷 目录 1. 题目描述 2. 思路分析 3. 代码实现 1. 题目描述 2. 思路分析 dfs典题 3. 代码实现 #define _CRT_SECURE_NO_WARNINGS 1 #include<bits/stdc.h> using namespace std; #define ll long long #define endl \n const int N 2…

SaaS知识库工具推荐来了,有这些就够用了!

在快节奏、以信息为核心的工作环境中&#xff0c;如何有效管理和共享知识成为了很多企业面临的一大挑战。幸运的是&#xff0c;现在市面上有许多出色的SaaS&#xff08;Software as a Service&#xff09;知识库工具可以帮助我们。这些工具便捷、高效&#xff0c;能够满足各种规…

pycharm爬虫模块(scrapy)基础使用

今天学了个爬虫。在此记录 目录 一.通过scrapy在命令行创建爬虫项目 二.判断数据为静态还是动态 三.pycharm中的设置 三:爬虫主体 四.pipelines配置&#xff08;保存数据的&#xff09; 五.最终结果 一.通过scrapy在命令行创建爬虫项目 1.首先需要在cmd中进入到python文…

2024.4.15

代码&#xff1a;uart4.c #include "uart4.h"void uart4_config() {//使能GPIO\GPIOG\UART4的外设时钟RCC->MP_AHB4ENSETR | (0x1<<1);RCC->MP_AHB4ENSETR | (0x1<<6);RCC->MP_APB1ENSETR | (0x1<<16);//设置PB2和PG11为管脚复用功能//P…

游戏行业科普 (二)游戏是怎么做出来,怎么卖出去的?

游戏行业科普系列文章&#xff0c;大家可以关注起来&#xff0c;等我慢慢分享~~ 《蛋仔派对》 一、研运流程--游戏是怎么做出来的 一款游戏的开发和运营大体上可以分为预研立项、设计开发、测试调优、发行上线和成熟运营几个阶段。 1&#xff09;预研立项&#xff1a; 初始研…

YOLOv9有效改进专栏汇总|未来更新卷积、主干、检测头注意力机制、特征融合方式等创新![2024/4/14]

​ 专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;助力高效涨点&#xff01;&#xff01;&#xff01; 专栏介绍 YOLOv9作为最新的YOLO系列模型&#xff0c;对于做目标检测的同学是必不可少的。本专栏将针对2024年最新推出的YOLOv9检测模型&#xff0…

Matlab|基于广义Benders分解法的综合能源系统优化规划

目录 1 主要内容 广义benders分解法流程图&#xff1a; 优化目标&#xff1a; 约束条件&#xff1a; 2 部分代码 3 程序结果 4 下载链接 1 主要内容 该程序复现文章《综合能源系统协同运行策略与规划研究》第四章内容基于广义Benders分解法的综合能源系统优化规划&…

树莓派点亮双色LED

双色LED灯准确来说叫双基色LED灯,是指模块只能显示2种颜色,一般是红色和绿色,可以有三种状态 :灭,颜色1亮,颜色2亮,根据颜色组合的不同,分为红蓝双色,黄蓝双色,红绿双色等等。 接线:将引脚S(绿色)和中间引脚(红色)连接到Raspberry Pi的GPIO接口上,对Raspberry…

针对MaxCompute优化案例分享

声明 原文来源&#xff1a;微信公众号&#xff1a;阿里云开发者 前言 MaxCompute 是阿里巴巴集团推出的一种大数据计算平台&#xff0c;用于处理海量数据和进行数据分析。它提供了高可靠性、高扩展性和高性能的数据处理能力&#xff0c;支持 SQL 查询、MapReduce 计算和机器…

1113. 红与黑--Flood Fill 算法

目录 1113. 红与黑--Flood Fill 算法---宽搜&#xff08;BFS&#xff09;或DFS&#xff09; 输入格式 输出格式 数据范围 输入样例&#xff1a; 输出样例&#xff1a; 思路&#xff1a; 1.BFS 思路&#xff1a; 2.DFS 思路 方法一&#xff1a;&#xff08;BFS&#x…

hadoop最新详细版安装教程 2024 最新版

文章目录 hadoop安装教程 2024最新版提前准备工作用户配置安装 SSH Server免密登录设置编辑 SSH server 配置文件配置Java环境查看java 版本验证 环境变量设置安装Hadoop下载hadoop解压hadoop查看hadoop 版本hadoop 配置编辑编辑配置文件core-site.xml编辑配置文件hdfs-site.xm…

使用深度学习集成模型进行乳腺癌组织病理学图像分类

基于预训练的VGG16和VGG19架构训练了四种不同的模型&#xff08;即完全训练的 VGG16、微调的 VGG16、完全训练的 VGG19 和微调的 VGG19 模型&#xff09;。最初&#xff0c;我们对所有单独的模型进行了5倍交叉验证操作。然后&#xff0c;我们采用集成策略&#xff0c;取预测概率…

深度学习框架

深度学习框架 1 引言 在当今技术加速发展的时代&#xff0c;深度学习已经成为了人工智能领域内最为引人注目的子领域之一。其在图像识别、自然语言处理、自动驾驶等多个行业中的成功应用&#xff0c;已经证明了深度学习在解决复杂问题方面的巨大潜力。然而&#xff0c;深度学习…

package.java文件的作用

你查看springboot的源码&#xff0c;有很多类都有这个文件&#xff0c;在idea不能创建&#xff0c;因为不支持这种命名&#xff0c;只能用记事本创建后复制都项目中。 主要应用是给类添加正常&#xff0c;或者把公用的注解都放到这里&#xff0c;常量不合适&#xff0c;作用范…

动态消息系统设计

动态消息流是一个在你个人主页不同更定的故事列表&#xff0c;推特、mega和Instagram 的post消息都是典型的动态消息列表&#xff0c;和普通消息流系统的最大区别是消息流动态变化、实时更新&#xff0c;设计一个动态消息系统核心功能消息流的构建和消息的发布&#xff0c;需要…

蓝桥杯 — — 纯质数

纯质数 题目&#xff1a; 思路&#xff1a; 一个最简单的思路就是枚举出所有的质数&#xff0c;然后再判断这个质数是否是一个纯质数。 枚举出所有的质数&#xff1a; 可以使用常规的暴力求解法&#xff0c;其时间复杂度为&#xff08; O ( N N ) O(N\sqrt{N}) O(NN ​)&…

破译验证码reCAPTCHA 之 打码平台

由于登录需要验证码&#xff0c;除了日常的字符串&#xff0b;数字&#xff0c;此时就需要用第三方插件进行破译。 reCaptcha是Google公司的验证码服务&#xff0c;方便快捷&#xff0c;改变了传统验证码需要输入n位失真字符的特点。 1. reCAPTCHA 初识 reCaptcha是Google公司…

Oracle+11g+笔记(3)-SQL/Plus

Oracle11g笔记(3)-SQL/Plus 3、SQL/Plus 3.1 启动退出SQL/Plus > sqlplus 账号/密码数据库 # 示例 > sqlplus scott/tigerorcl> sqlplus /nolog -- 无日志登录&#xff1a;避免别人从日志中查询到登录信息 > conn soctt/socttorcl # 示例 > sqlplus /nolog &…

Numpy数组和列表list的区别

参考&#xff1a;Numpy Array vs List 在Python编程中&#xff0c;列表&#xff08;list&#xff09;和Numpy数组&#xff08;numpy array&#xff09;是两种常见的数据结构&#xff0c;它们都可以用来存储多个元素。但是它们在实际使用中有很大的区别&#xff0c;本文将详细比…

爬虫 | 垃圾处理设施数据的获取与保存

Hi&#xff0c;大家好&#xff0c;我是半亩花海。本项目通过发送网络请求&#xff08;requests&#xff09;&#xff0c;从指定的 URL 获取垃圾处理设施的相关数据&#xff0c;并将数据保存到 CSV 文件中&#xff0c;以供后续分析和利用。 目录 一、项目结构 二、详细说明 三…