0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

物理约束实践:网表约束LOCK_PINS

FPGA快乐学习 来源:FPGA快乐学习 作者:特权同学 2022-11-28 15:24 次阅读

d1891198-6d3f-11ed-8abf-dac502259ad0.jpg

概述

话说网表约束中的CLOCK_DEDICATED_ROUTE、MARK_DEBUG和DONT_TOUCH,在实际工程中常常都可能遇上。MARK_DEBUG和DONT_TOUCH在设计和调试中可能常常要用到,CLOCK_DEDICATED_ROUTE偶尔能够应应急。而这里要介绍的LOCK_PINS,笔者至今没有碰过,估计大家在实践中恐怕也很难有机会或必要用上它。但谁知道呢?存在即是合理,相信Xilinx把这样一个非常底层的约束搬上台面,也一定有它的用场,本着万一哪天能够应应急的想法,我们也来了解一下这个LOCK_PINS的使用吧。

原理探究

网表约束LOCK_PINS约束的对象是Xilinx FPGA器件中LUT物理输入端口和逻辑输入端口的映射关系。关于LUT结构,大家可以参考Xilinx的ug474文档,该文档详细介绍了Artix-7系列FPGA器件的逻辑资源。当然,文档中对于LUT的结构描述中,只提及输入端口,并没有所谓物理输入端口和逻辑输入端口的概念。笔者认为,ug474所涉及的LUT结构的输入端口,其实是包括逻辑输入端口和物理输入端口的,它们之间的连接也是可以布线算法的需要进行灵活调整的。

如图所示,LUT6中的物理输入端口有A1~A6,逻辑输入端口有I0~I5。在逻辑输入端口和物理输入端口之间,存在着一块布线池(官方没有这方面的介绍,笔者根据自己的理解进行描述,仅供参考)。

d1b0ff46-6d3f-11ed-8abf-dac502259ad0.jpg

也就是说,物理输入端口和逻辑输入端口并不是固定I0-A1、I1-A2……这样规规矩矩的成对连接的,它们的一一对应关系是可以根据布线需要进行调整的。之所以提供这样的配对灵活性,我相信很大程度上是基于最优化外部输入接口(即连接到I0~I5的走线)的布线而设计的。而一旦进行工程的布局布线后,LUT的逻辑输入端口和物理输入端口之间的一一对应关系便会被固定下来。当然了,此时,作为设计者的你,基于某些特定的优化目的,可以通过网表约束LOCK_PINS来锁定某对或某几对逻辑和物理输入端口的映射关系。可以说,LOCK_PINS约束相当底层,对于所谓的特定的优化目的,笔者只在ug903文档中找到“物理输入端口A5和A6是最快的LUT输入端口,所以可以使用LOCK_PINS将时序关键路径约束到该端口上”这样的描述。而笔者在ug474中并没有找到Artix-7的LUT有类似的描述。当然,或许ug903的这个描述是针对其它某个FPGA系列器件的LUT。不管怎样,大家先有个概念,知道有这么回事,将来真遇到类似这么细节的问题时,可以快速在这个方向上做进一步的探索,免去“众里寻他千百度”的力气。

工程实践

好了,原理说明白了,接着就动手实践一把。以《Verilog边码边学》教程sim_201工程为例,打开工程后,保证工程已经做过编译,然后点击IMPLEMENTATION->Open Implemented Design->Schematic,打开原理视图。

d1cba648-6d3f-11ed-8abf-dac502259ad0.jpg

此时,可以在Netlist界面下展开具体的网表,找一个信号进行实践。当然了,实际应用中,需要哪个信号,可能是根据具体的需要而定的,这里我们只是为了实践一下如何使用LOCK_PINS约束,所以就随便找到如图所示的uut_m_image_capture->Nets下的i_image_sensor_href_IBUF这个信号。

d1ed3b5a-6d3f-11ed-8abf-dac502259ad0.jpg

在i_image_sensor_href_IBUF信号上右键单击,在弹出菜单中再单击Schematic选项。

d20db790-6d3f-11ed-8abf-dac502259ad0.jpg

此时可以看到,Schematic(2)定位到了i_image_sensor_href_IBUF信号在原理图中的位置。由于该信号连接的r_fifo_wren_i_1这个LUT有5个输入端口,因此我们可以继续双击r_fifo_wren_i_1这个LUT查看它所有的输入端口。

d232fb7c-6d3f-11ed-8abf-dac502259ad0.jpg

r_fifo_wren_i_1的所有5个输入端口如图所示。

d24f8346-6d3f-11ed-8abf-dac502259ad0.jpg

当我们把鼠标停留在LUT的某个逻辑输入端口上,就可以看到该逻辑输入端口的相关信息。如图所示,I1的信息中显示,它所对应的BEL pin,即物理输入端口是A2。这是默认FPGA布局布线的结果。

d2691d06-6d3f-11ed-8abf-dac502259ad0.jpg

此时可以在r_fifo_wren_i_5这个LUT上右键单击,弹出菜单中再点击Cell Properties…打开它的属性信息进行查看。

d28d0e96-6d3f-11ed-8abf-dac502259ad0.jpg

在属性的Cell Pins页面中,可以看到Name(即LUT逻辑输入端口)、BELPin(即LUT物理输入端口)以及Net(实际设计中布线信号的网络名称)之间的映射关系。

d2b296de-6d3f-11ed-8abf-dac502259ad0.jpg

此时,我们可以在Tcl Console中输入以下脚本并回车运行,使用LOCK_PINS约束将I1和A6映射在一起,也就是I1不再和A2连接,A6也不再和I0连接。

set_property LOCK_PINS I1:A6 [get_celluut_m_image_capture/r_fifo_wren_i_1]

d3003704-6d3f-11ed-8abf-dac502259ad0.jpg

好奇的你或许想知道脚本中get_cell后接的一串路径名称从何而得?如图所示,在属性的General页面中Name一栏,就是目标LUT的名称uut_m_image_capture/r_fifo_wren_i_1。

d322060e-6d3f-11ed-8abf-dac502259ad0.jpg

在约束后,I1一定与A6连接在一起了,至于I0和A2是否会连接在一起,或者会不会因为我们的约束而打乱了其它逻辑输入端口和物理输入端口之间的映射关系,就由Vivado的算法自己决定了。

如图所示,对于当前的实例,最终I1与A6连接在一起,而I0则连接到了A5,而不是A2。大家不用觉得奇怪,因为我们只约束了I1和A6,其它逻辑和物理端口之间任何的连接映射关系都是有可能出现的。

d3440cea-6d3f-11ed-8abf-dac502259ad0.jpg

与时序约束一样,网表约束LOCK_PINS虽然是物理约束,但本质上也是约束设计,在Tcl Console中运行后,需要点击Save Constrains保存到.xdc约束脚本中才会最终生效。

d35a417c-6d3f-11ed-8abf-dac502259ad0.jpg

如果我们要约束多对LUT逻辑和物理端口的映射关系,则可以运行类似如下的脚本。

set example_lut[get_cells uut_m_image_capture/r_fifo_wren_i_1]

set_property LOCK_PINS {I0:A5 I1:A2} $example_lut

get_property LOCK_PINS $example_lut

如图所示,以上脚本将I0和A5、I1和A2分别映射连接在一起了。

d376b046-6d3f-11ed-8abf-dac502259ad0.jpg

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • FPGA
    +关注

    关注

    1629

    文章

    21736

    浏览量

    603285
  • 端口
    +关注

    关注

    4

    文章

    964

    浏览量

    32075
  • 约束
    +关注

    关注

    0

    文章

    82

    浏览量

    12729
  • 网表
    +关注

    关注

    0

    文章

    15

    浏览量

    7648

原文标题:物理约束实践:网表约束LOCK_PINS

文章出处:【微信号:FPGA快乐学习,微信公众号:FPGA快乐学习】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    Xilinx FPGA管脚物理约束介绍

    引言:本文我们简单介绍下Xilinx FPGA管脚物理约束,包括位置(管脚)约束和电气约束
    发表于 07-25 10:13 4975次阅读

    物理约束实践:I/O约束

    I/O约束(I/O Constraints)包括I/O标准(I/OStandard)约束和I/O位置(I/O location)约束
    的头像 发表于 11-18 16:42 1117次阅读
    <b class='flag-5'>物理</b><b class='flag-5'>约束</b><b class='flag-5'>实践</b>:I/O<b class='flag-5'>约束</b>

    时序约束之时序例外约束

    数。 set_multicycle_path2 -setup -from [get_pins data0_reg/C] -to [get_pins data1_reg/D]2. 伪路径约束 存在于设计中的拓扑结构,但没有起到作用
    发表于 09-21 12:55

    物理约束之布局约束

    1. 单元布局约束set_property BELGTHE2_CHANNEL[get_cellsswitch_v2_i/srio_0/srio_gen2_0_inst
    发表于 09-26 15:32

    请问物理约束文件ADC可做哪些约束

    物理约束文件ADC可做哪些约束
    发表于 08-11 08:37

    Adam Taylor玩转MicroZed系列74:物理约束

    : •放置约束——定义元件位置 •布线约束——定义信号布线 •I/O脚约束——定义I/O脚位置和I/O脚参数 •配置约束——定义配置方法 按照惯例,有一些
    发表于 02-08 02:20 297次阅读
    Adam Taylor玩转MicroZed系列74:<b class='flag-5'>物理</b><b class='flag-5'>约束</b>

    XDC约束物理约束的介绍

    观看视频,了解和学习有关XDC约束,包括时序,以及物理约束相关知识。
    的头像 发表于 01-07 07:10 6214次阅读
    XDC<b class='flag-5'>约束</b>及<b class='flag-5'>物理</b><b class='flag-5'>约束</b>的介绍

    FPGA时序约束案例:伪路径约束介绍

    。 这样会在xdc中自动生成如下约束: set_false_path -from [get_clocks -of_objects [get_pins clk_gen_i0/clk_core_i0
    的头像 发表于 11-14 11:28 2996次阅读
    FPGA时序<b class='flag-5'>约束</b>案例:伪路径<b class='flag-5'>约束</b>介绍

    FPGA案例之衍生时钟约束

    /out_ddr_flop_spi_clk_i0/ODDR_inst/C] -divide_by 1 -invert [get_ports spi_clk_pin] 这里需要注意的是,如果该约束中使用get_pins(即产生的时钟并非输出到管脚),那么无
    的头像 发表于 11-17 16:28 2330次阅读
    FPGA案例之衍生时钟<b class='flag-5'>约束</b>

    简述Xilinx FPGA管脚物理约束解析

    引言:本文我们简单介绍下Xilinx FPGA管脚物理约束,包括位置(管脚)约束和电气约束
    的头像 发表于 04-27 10:36 4538次阅读
    简述Xilinx FPGA管脚<b class='flag-5'>物理</b><b class='flag-5'>约束</b>解析

    Gowin设计物理约束用户指南

    电子发烧友网站提供《Gowin设计物理约束用户指南 .pdf》资料免费下载
    发表于 09-15 16:07 0次下载
    Gowin设计<b class='flag-5'>物理</b><b class='flag-5'>约束</b>用户指南

    物理约束实践约束DONT_TOUCH

    信号,此时就可以使用DONT_TOUCH约束达到保留这些信号的目的。又如,有时在设计中会对一些高扇出的信号进行手动的逻辑复制,也可以使用DONT_TOUCH约束避免它们被优化掉。 工程实践   下面有一个简单的例子,看看DONT
    的头像 发表于 11-12 14:14 3323次阅读

    如何管理约束文件?

    的场景是:时序约束放在一个文件里,物理约束放在一个文件里。如下图所示。图中wave_gen_timing.xdc中写的是时序约束,wave_gen_
    的头像 发表于 12-08 13:48 1429次阅读

    Xilinx Vivado LOCK_PINS属性介绍

    LOCK_PINS 是 Xilinx Vivado 做物理约束的属性之一。用来将LUT的逻辑输入(I0,,I1,I2...)绑定到其物理输入pin上(A6,A5,A4...)。
    的头像 发表于 01-11 10:52 1153次阅读

    约束、时序分析的概念

    的数据交换可靠?如何使用I/O逻辑单元内部的寄存器资源?如何进行物理区域约束,完成物理综合和物理实现?为了解决大家的疑难,我们将逐一讨论这些问题。(注:以下主要设计时序
    的头像 发表于 05-29 10:06 799次阅读
    <b class='flag-5'>约束</b>、时序分析的概念