FPGA设计进阶3--FPGA物理约束

这篇具有很好参考价值的文章主要介绍了FPGA设计进阶3--FPGA物理约束。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Reference: Xilinx FPGA权威设计指南

        Xilinx Vivado集成开发环境为设计者提供了通过设置FPGA内对象的属性实现对FPGA内对象进行约束的物理约束。这些约束包括:

(1)I/O约束,如位置和I/O标准

(2)布局约束,如单元的位置

(3)布线约束,如固定的布线

(4)配置约束,如配置模式

对于大多数的物理约束,其语法格式表示为:

set_property <property><value><object_list>

        Note:当XDC中出现非法的约束条件时,Vivado提示“Critial Warning”信息,其中也包括对设计中没有的对象进行约束的情况。Xilinx推荐设计者仔细查看严重警告信息,以保证所有的约束条件都是正确的。

1. I/O约束 -- 约束输入输出引脚的位置和电气标准

I/O约束的命令如下所示:

set_property PACKAGE_PIN G13 [get_ports reset]
set_property IOSTANDARD LVCMOS18 [get_ports reset]

2. 网表约束

        网表约束用于设置网表对象,如端口,引脚,网络或者单元。这样,编译工具可以以特殊的方式处理它们。

(1)CLOCK_DEDICATED_ROUTE

        该属性控制时钟信号的布线方式。当没有使用专用时钟资源时,该属性可以设置为FALSE。该值允许Vivado工具使用通用的布线资源,将来自输入端口的时钟连接到一个全局时钟资源,如BUFG和MMCM等。

(2)MARK_DEBUG

        在RTL中的一个网络上设置该属性,使得在网表中可以看到该网络。这样,允许在编译流程中,在任意点将该网络连接到逻辑调试工具中。

(3)DONT_TOUCH

        在叶子单元(Leaf Cell),层次化单元或者网络对象上设置DONT_TOUCH,用于在网表优化的过程中保护这些网表对象。该属性用于:

1)禁止优化由DONT_TOUCH声明的网络。

2)禁止合并人工复制的逻辑。

        这里书中提到一个注意点就是:由于Vivado集成设计环境不能实现平坦化(flatten)逻辑层次,因此在实现设计时避免在层次单元上使用DONT_TOUCH。在综合时,使用KEEP_HIERARCHY保持逻辑层次。但是,我发现Vivaod工具在实现时,其实是默认先将设计整个flatten进行整体优化,然后再重新生成原HIERARCHY结构的。很奇怪,也就是Vivado集成设计环境是能实现flatten逻辑层次优化的。

(4)LOCK_PINS

        LOCK_PINS是一个单元的属性,用于在逻辑LUT的输入(I0,I1,I2,...)和LUT物理引脚(A6,A5和A4)之间指定映射关系。普遍的用法是,将时序上有严格要求的LUT输入强制映射到最快的A6和A5的物理输入。如下是将I1映射到A6,I0映射到A5.

set myLUT2 [get_cells u0/u1/i_365]
set_property LOCK_PINS {I0:A5 I1:A6} $myLUT2
get_property LOCK_PINS $myLUT2

3. 布局约束

        将布局约束应用到单元,用于控制这些单元在FPGA元器件内的位置。布局约束包括:

(1)LUTNM

        唯一的字符串名字应用到两个LUT,用于控制它们在单个LUT位置上的布局。不像HLUTNM和LUTNM,可以用于组合属于不同层次单元的LUT。

(2)HLUTNM

        唯一的字符串名字应用到相同层次上的两个LUT,用于控制它们在单个LUT位置上的布局。

(3)PROHIBIT

        禁止布局到某个位置。

(4)PBLOCK

        将一个逻辑块约束到FPGA元器件内的一个物理区域内。PBLOCK是一个只读单元属性,即其单元所分配到Pblock的名字。

(5)PACKAGE_PIN

        在目标元器件封装的一个引脚上指定一个设计端口的位置。

(6)LOC

        将来自网表的一个逻辑元素放置到FPGA元器件内的一个位置外。

(7)BEL

        将来自网表的一个逻辑元素放置到FPGA元器件上一个切片内一个指定的BEL上。

在Vivado工具中,提供了两种类型的布局。

(1)Fixed Placement,由设计者通过指定的布局:手工布局,XDC约束,对加载到存储器中的设计的一个单元对象上使用IS_LOC_FIXED或者IS_BEL_FIXED约束。

(2)Unfixed Placement,由实现工具所执行的布局。

1)以下是将一个BRAM放置在RAMB18_X0Y10的位置,并且将其位置固定。

set_property LOC RAMB18_X0Y10 [get_cells u_ctrl0/ram0]

2)以下是将一个LUT放置到一个切片内的C5LUT BEL的位置,并且将BEL的分配固定。

set_property BEL C5LUT [get_cells u_ctrl0/lut0]

3)以下是将输入总线寄存器放置到ILOGIC单元中。这样做的目的是为了更短输入延迟。

set_property IOB TRUE [get_cells mData_reg*]

4)以下是将两个小的LUT组合到一个LUT6_2中,它使用了O5和O6输出。

set_property LUTNM L0 [get_cell {u_ctrl0/dmux0 u_ctrl0/dmux1}]

5)以下是用于阻止布线器使用第一列的BRAM

set_property PROHIBIT TRUE [get_sites {RAMB18_X0Y* RAMB36_X0Y*}]

4. 布线约束

        布线约束应用于网络对象,用于控制它们的布线资源。

        固定布线:固定布线是用于锁定布线的一种机制。锁定一个网络布线包含3个网络属性。

        1)ROUTE: 只读网络属性

        2)IS_ROUTE_FIXED: 用于将整个布线标记为固定。

        3)FIXED_ROUTE: 一个网络的固定布线部分

        注意:为了保证一个网络布线是固定的,则布线上的所有单元必须预先也是固定的。

        如对下图1中电路中的netA的布线进行固定。

FPGA设计进阶3--FPGA物理约束

 图 1

set_property LOC SLICE_X0Y47 [get_cells {a0 L0 L1}]
set_property BEL CFF [get_cells a0]
set_property BEL A6LUT [get_cells L0]
set_property BEL B6LUT [get_cells L1]
set_property LOCK_PINS {I1:A4 I0:A2} [get_cells L0]
set_property LOCK_PINS {I1:A3 I0:A2} [get_cells L1]
set_property FIXED_ROUTE {CLBLL_LL_CQ CLBLL_LOGIC_OUTS6 FAN_ALT5 FAN_BOUNCE5  {IMUX_L17 CLBLL_LL_B3} IMUX_L11 CLBLL_LL_A4} [get_nets netA]

5. 布局约束实现

FPGA设计进阶3--FPGA物理约束

图 2 

        如图2所示的电路,对其进行自动布局实现后的结果如图3所示,白色高亮的器件是Instance_counter3b 实现,蓝色高亮的器件是Instance_div_clk实现。这时,我想让每个module实现靠近一些,因此对其进行布局约束。

FPGA设计进阶3--FPGA物理约束

图 3 

FPGA设计进阶3--FPGA物理约束

图 4 

        在Netlist菜单栏中,选中相应的Instance,右键出Draw Pblock在Device中进行布局约束。完成的布局约束如图5所示。

FPGA设计进阶3--FPGA物理约束

图 5 

        使用Pblock的XDC约束如下所示,首先为Instance创建pblock,然后将具体的Instance与创建的pblock绑定,最后,为pblock添加相应的资源。

create_pblock pblock_Instance_counter3b
add_cells_to_pblock [get_pblocks pblock_Instance_counter3b] [get_cells -quiet [list Instance_counter3b]]
resize_pblock [get_pblocks pblock_Instance_counter3b] -add {SLICE_X0Y8:SLICE_X1Y9}
create_pblock pblock_Instance_div_clk
add_cells_to_pblock [get_pblocks pblock_Instance_div_clk] [get_cells -quiet [list Instance_div_clk]]
resize_pblock [get_pblocks pblock_Instance_div_clk] -add {SLICE_X2Y8:SLICE_X3Y8}

        最后,经过布局约束后实现的资源分布图如下所示:

FPGA设计进阶3--FPGA物理约束

图 6 

6. 布线约束实现(有些地方还没相通,再研究研究)

7. 配置约束原理

        配置约束是全局约束,用于当前设计的比特流生成。其中包含对配置模式的约束。

(1)下面是将CONFIG_MODE设置为M_SELECTMAP

set_property CONFIG_MODE M_SELECTMAP [current_design]

(2)下面是将元器件的E11和F11引脚设置为电压参考引脚

set_property VREF {E11 F11} [current_design]

(3)下面是禁止CRC检查文章来源地址https://www.toymoban.com/news/detail-424054.html

set_property BITSTREAM.GENERAL.CRC Disable [current_design]

到了这里,关于FPGA设计进阶3--FPGA物理约束的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • FPGA时序约束--进阶篇(主时钟约束)

    在FPGA设计中,时序约束的设置对于电路性能和可靠性都至关重要。在上一篇的文章中,已经详细介绍了FPGA时序约束的基础知识。 本文将重点讲解主时钟约束设置,给出详细的约束命令,并介绍了在Vivado中如何写入主时钟约束。 主时钟是FPGA电路中最基础的时钟,其稳定性和

    2024年02月09日
    浏览(42)
  • Xilinx FPGA电源设计与注意事项

    1 引言 随着半导体和芯片技术的飞速发展,现在的FPGA集成了越来越多的可配置逻辑资源、各种各样的外部总线接口以及丰富的内部RAM资源,使其在国防、医疗、消费电子等领域得到了越来越广泛的应用。当采用FPGA进行设计电路时,大多数FPGA对上电的电源排序和上电时间是有

    2024年02月02日
    浏览(44)
  • FPGA时钟资源与设计方法——Xilinx(Vivado)

    1.时钟资源包括:时钟布线、时钟缓冲器(BUFGBUFRBUFIO)、时钟管理器(MMCM/PLL)。 2.时钟类型有三种:全局时钟,可以驱动整个内核上的同步逻辑;局部时钟,可以驱动特定和相邻区域的逻辑;IO时钟,可以驱动某个IO的特定逻辑。 3.混合模式时钟管理器(MMCM)和数字时钟管理

    2024年02月22日
    浏览(53)
  • 【 FPGA 封装设计资源 】 Xilinx vs Altera

    PACKAGE 一般在doc nav搜索,同样也可以在官网;检索“*pkg-pinout.” 比如vu9p: ug575-ultrascale-pkg-pinout.pdf 原理库文件 Package Files Portal 举例: 先选封装; 再选器件 二维交叉检索后,在右击另存即可。《xczu48drffvg1517pkg.txt》。 PACKAGE 蓝厂、Altrea package 下载地址 库文件 Mentor Gra

    2024年01月15日
    浏览(38)
  • FPGA设计时序约束二、输入延时与输出延时

    目录 一、背景 二、set_input_delay 2.1 set_input_delay含义 2.2 set_input_delay参数说明 2.3 使用样例 三、set_output_delay 3.1 set_output_delay含义 3.2 set_output_delay参数说明 3.3 使用样例 四、样例工程 4.1 工程代码 4.2 时序报告 五、参考资料     为了在设计中准确的模拟信号从FPGA传输到外部或

    2024年02月07日
    浏览(35)
  • FPGA设计时序约束一、主时钟与生成时钟

    一、主时钟create_clock 1.1 定义 1.2 约束设置格式 1.3 Add this clock to the existing clock 1.4 示例 1.5 差分信号 二、生成时钟generate_clock 2.1 定义 2.2 格式 2.2.1 by clock frequency 2.2.2 by clock edges 2.2.3 示例 2.2.4 自动生成时钟 2.2.5 重命名生成时钟     主时钟是来自FPGA芯片外部的时钟,通过时

    2024年01月20日
    浏览(41)
  • FPGA设计时序约束十六、虚拟时钟Virtual Clock

    目录 一、序言 二、Virtual Clock 2.1 设置界面 三、工程示例 3.1 工程设计 3.2 工程代码 3.3 时序报告 3.4 答疑 四、参考资料     在时序约束中,存在一个特殊的时序约束,虚拟时钟Virtual Clock约束,根据名称可看出时钟不是实际存在的,主要是在STA分析时序时提供一个参考。  

    2024年01月17日
    浏览(43)
  • Xilinx FPGA DDR3设计(三)DDR3 IP核详解及读写测试

    引言 :本文我们介绍下Xilinx DDR3 IP核的重要架构、IP核信号管脚定义、读写操作时序、IP核详细配置以及简单的读写测试。 7系列FPGA DDR接口解决方案如图1所示。 图1、7系列FPGA DDR3解决方案 1.1 用户FPGA逻辑(User FPGA Logic) 如图1中①所示,用户FPGA逻辑块是任何需要连接到外部

    2024年02月06日
    浏览(52)
  • FPGA设计时序约束三、设置时钟组set_clock_groups

    目录 一、背景 二、时钟间关系 2.1 时钟关系分类 2.2 时钟关系查看 三、异步时钟组 3.1 优先级 3.2 使用格式 3.3 asynchronous和exclusive 3.4 结果示例 四、参考资料     Vivado中时序分析工具默认会分析设计中所有时钟相关的时序路径,除非时序约束中设置了时钟组或false路径。使

    2024年02月02日
    浏览(45)
  • 【FPGA】Verilog:时序电路设计 | 二进制计数器 | 计数器 | 分频器 | 时序约束

    前言: 本章内容主要是演示Vivado下利用Verilog语言进行电路设计、仿真、综合和下载 示例:计数器与分频器   ​​ 功能特性: 采用 Xilinx Artix-7 XC7A35T芯片  配置方式:USB-JTAG/SPI Flash 高达100MHz 的内部时钟速度  存储器:2Mbit SRAM   N25Q064A SPI Flash(样图旧款为N25Q032A) 通用

    2024年02月02日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包