当前位置:网站首页>vivado里那些看不懂的原语
vivado里那些看不懂的原语
2022-07-31 12:12:00 【IC学习者】
遇到一段代码
GLOBAL sw_clk(
.in (SWCLK),
.out (swck)
);
是Intel风格的,可以用xilinx的BUFG进行替代
// BUFG 分配时钟专用资源,指定信号走专门的时钟布线
修改为
BUFG sw_clk(
.I (SWCLK),
.O (swck)
);
布线时候报错
[Place 30-574] Poor placement for routing between an IO pin and BUFG. If this sub optimal condition is acceptable for this design, you may use the CLOCK_DEDICATED_ROUTE constraint in the .xdc file to demote this message to a WARNING. However, the use of this override is highly discouraged. These examples can be used directly in the .xdc file to override this clock rule.
< set_property CLOCK_DEDICATED_ROUTE FALSE [get_nets SWCLK_IBUF] >
SWCLK_IBUF_inst (IBUF.O) is locked to IOB_X0Y7
and SWCLK_IBUF_BUFG_inst (BUFG.I) is provisionally placed by clockplacer on BUFGCTRL_X0Y0
具体原因未知,只能先把功能打通,所以把相关的部分注释掉。
下面是收集的一些资料,来源都做了标注。
【FPGA】xilinx IOBUF的用法
inout类型的接口,主动添加IOBUF
IOBUF #(
.DRIVE(12), // Specify the output drive strength
.IBUF_LOW_PWR("TRUE"), // Low Power - "TRUE", High Performance = "FALSE"
.IOSTANDARD("DEFAULT"), // Specify the I/O standard
.SLEW("SLOW") // Specify the output slew rate
) IOBUF_inst (
.O(O), // Buffer output
.IO(IO), // Buffer inout port (connect directly to top-level port)
.I(I), // Buffer input
.T(T) // 3-state enable input, high=input, low=output
);
xilinx FPGA全局时钟资源的使用
1.什么是xilinx fpga全局时钟资源
时钟对于一个系统的作用不言而喻,就像人体的心脏一样,如果系统时钟的抖动、延迟、偏移过大,会导致系统的工作频率降低,严重时甚至会导致系统的时序错乱,实现不了预期的逻辑功能。xilinx fpga内的全局时钟资源可以很好的优化时钟的性能,因此在设计时要尽可能多的使用fpga内部的时钟资源。xilinx fpga内部的全局时钟采用全铜工艺实现,配合专用时钟缓冲和驱动结构,可以使进入全局时钟网络的时钟到达fpga内部各个逻辑单元的抖动和延迟最小。全局时钟资源是专用布线资源,存在于全铜布线层上,使用全局时钟资源不会影响芯片的其他布线资源。最好的全局时钟解决方案是:让时钟从全铜工艺的全局时钟输入管脚进入fpga,然后经内部的全局时钟缓冲单元去控制各个触发器。xilinx常用的全局时钟资源原语有:全局时钟缓冲IBUFG、差分全局时钟缓冲IBUFGDS、全局缓冲BUFG、数字时钟管理单元DCM、锁相环PLL。
2.全局时钟资源的使用方法
IBUFG是从全局时钟输入管脚输入的单端时钟的第一级缓冲,IBUFGDS是指的是差分时钟的缓冲。只要是从全局时钟管脚的输入的时钟必须要经过IBUFG,如果不经过,那么ise在布局布线时就会报错,反之如果使用了IBUFG,那么信号一定是从全局时钟输入管脚输入的,这是因为IBUFG和IBUFGDS的输入只和fpga的全局时钟输入引脚有物理上的连接,与普通的IO和内部逻辑块CLB没有物理上的连接。BUFG是全局缓冲,BUFG的输出到达fpga内部各个逻辑单元的时钟延迟与抖动都是最小的。BUFG不但可以驱动IBUFG和DCM的输出,还可以驱动其他普通的片内信号和普通io,当某个信号扇出很大时,而且要求的抖动延迟最小时,可以用BUFG驱动该信号,普通IO和普通的片内逻辑信号进入全局时钟布线层有一个固定的延迟,一般在10ns左右,即普通信号或普通IO从输入到BUFG的输出有一个约10ns左右的固有延迟,但BUFG的输出到片内所有的单元(IOB,CLB,选择性块RAM)的延时可以忽略不计。时钟资源原语的使用方法主要有以下四种:
Reference
Vivado使用心得(二)BUFG,IBUFG,BUFGP,IBUFGDS等含义以及使用
全局时钟资源的使用方法(五种)
IBUFG + BUFG的使用方法:
IBUFG后面连接BUFG的方法是最基本的全局时钟资源使用方法,由于IBUFG组合BUFG相当于BUFGP,所以在这种使用方法也称为BUFGP方法。IBUFGDS + BUFG的使用方法:
当输入时钟信号为差分信号时,需要使用IBUFGDS代替IBUFG。IBUFG + DCM + BUFG的使用方法:
这种使用方法最灵活,对全局时钟的控制更加有效。通过DCM模块不仅仅能对时钟进行同步、移相、分频和倍频等变换,而且可以使全局时钟的输出达到无抖动延迟。Logic + BUFG的使用方法:
BUFG不但可以驱动IBUFG的输出,还可以驱动其它普通信号的输出。当某个信号(时钟、使能、快速路径)的扇出非常大,并且要求抖动延迟最小时,可以使用BUFG驱动该信号,使该信号利用全局时钟资源。但需要注意的是,普通IO的输入或普通片内信号进入全局时钟布线层需要一个固有的延时,一般在10ns左右,即普通IO和普通片内信号从输入到BUFG输出有一个约10ns左右的固有延时,但是BUFG的输出到片内所有单元(IOB、CLB、选择性块RAM)的延时可以忽略不计为“0”ns。Logic + DCM + BUFG的使用方法:
DCM同样也可以控制并变换普通时钟信号,即DCM的输入也可以是普通片内信号。使用全局时钟资源的注意事项全局时钟资源必须满足的重要原则是:使用IBUFG或IBUFGDS的充分必要条件是信号从专用全局时钟管脚输入。换言之,当某个信号从全局时钟管脚输入,不论它是否为时钟信号,都必须使用IBUFG或IBUFGDS;如果对某个信号使用了IBUFG或IBUFGDS硬件原语,则这个信号必定是从全局时钟管脚输入的。如果违反了这条原则,那么在布局布线时会报错。这条规则的使用是由FPGA的内部结构决定的:IBUFG和IBUFGDS的输入端仅仅与芯片的专用全局时钟输入管脚有物理连接,与普通IO和其它内部CLB等没有物理连接。另外,由于BUFGP相当于IBUFG和BUFG的组合,所以BUFGP的使用也必须遵循上述的原则。
Xilinx FPGA输入输出缓冲 BUF 的使用
UltraScale Architecture Libraries Guide (UG974)
边栏推荐
- Double non-one into bytes!!Pure dry goods sharing
- Getting started with jmeter performance testing steps (performance testing tool jmeter)
- Redis学习笔记-3.慢查询和其他高级数据结构
- Comparison of ipv4 and ipv6 (IPV4)
- Initial JDBC programming
- 第十二章 使用中的 OpenAPI 属性
- A Week of Wonderful Content Sharing (Issue 14)
- 基于姿态估计的护具佩戴检测与动作识别
- kubernetes之服务发现
- Docker installs canal and mysql for simple testing and achieves cache consistency between redis and mysql
猜你喜欢
Docker实践经验:Docker 上部署 mysql8 主从复制
Initial JDBC programming
R语言做面板panelvar例子
Data Persistence Technology - MP
普林斯顿微积分读本03第二章--编程实现函数图像绘制、三角学回顾
Mysql环境变量的配置(详细图解)
kernel syscore
Different lower_case_table_names settings for server (‘1‘) and data dictionary (‘0‘) 解决方案
AWS Amazon cloud account registration, free application for 12 months Amazon cloud server detailed tutorial
LeetCode - 025. 链表中的两数相加
随机推荐
[core]-ARMV7-A, ARMV8-A, ARMV9-A Architecture Introduction "Recommended Collection"
0x80070570文件或目录损坏且无法删除(0x80070091怎么删除)
Chrome开发自定义右键菜单实现快速跳转到指定页面
连续变量离散化教程
学习笔记 Golang 写入文件(io.WriteString、ioutil.WriteFile、file.Write、write.WriteString)
数据湖(十九):SQL API 读取Kafka数据实时写入Iceberg表
ESP8266-Arduino编程实例-PIR(被动红外)传感器驱动
DCM middleware family welcomes a new member
Docker搭建Mysql主从复制
想吃菌子,当然是自己上山找了
Basic use of dosbox [easy to understand]
安装MYSQL遇到问题:write configuration file卡主
TOGAF10标准读书会第2场活动精彩继续,高光时刻回顾!
科学论文和学术论文写作
How MySQL's allowMultiQueries flag relates to JDBC and jOOQ
JVS轻应用的组成与配置
WPF中TabControl动态获取当前选中的TabItem
Use jOOQ to write vendor-agnostic SQL with JPA's native query or @Formula.
关于Mysql数据库的介绍
Character Functions and String Functions