如何在 Microsemi/Actel Libero 中创建人字拖的相对位置?

How to create relative placement of Flip-flops in Microsemi/Actel Libero?

过去我使用过一些 Xilinx FPGA,并且能够使用 VHDL 属性(例如 RLOC)轻松创建翻转的相对放置。

目前我正在使用 SmartFusion2 FPGA 并尝试在 Libero SoC 中实现同样的目标。浏览 "Synopsys FPGA Synthesis Synplify Pro for Microsemi Edition: Attribute Reference" 后,我找到了 "alsloc",这似乎是 RLOC 的直接等价物。

但是,添加此属性根本不会改变或影响宏的放置。

进一步观察,我发现可以在设计约束文件中使用 "set_location" 约束来固定 MACRO 的位置​​。不幸的是,这将 MACRO 的位置​​限制在芯片上的绝对位置,并且会干扰其余的自动布局和布线优化工作。

那么有没有办法使用 VHDL 属性或设计约束文件指令来约束 Libero SoC 中 MACRO(特别是触发器)的相对位置?

据我所知,没有直接的等价物。 最接近的可能是 define_region/assign_region 约束。

使用"assign_region"将一组相关的触发器或整个组件实例关联到用户定义的区域。 "define_region" 指定区域的大小和位置。 Libero 会将关联的部分放置在区域内。

区域还是有绝对位置的,但是要让触发器四处移动,只需要改变"define_region"约束即可。 它不像 RLOC 那样优雅,但它完成了工作。