如何在Altera FPGA上实现类似于Xilinx的RLOC?

3

到目前为止,我还没有找到任何类似于 Xilinx 的 RLOC 约束对 Altera FPGA 的方法。

有人知道如何做到这一点吗?

例如,在同一个或相邻的 LAB 中放置两个 FF。


如果需要特定的设计属性,比如某个网络的快速时序,则最好直接指定该约束,而不是依赖于通过位置约束来获取此类属性。最终,位置可能无法告诉实例之间的实际路由情况,因此您仍然需要约束所需的属性,以确保对该属性进行后放置检查。 - Morten Zilmer
我目前正在将我的Xilinx ISE项目移植到Vivado。我注意到Xilinx支持xdc文件,这些文件与sdc文件兼容,而sdc文件又被Altera和其他供应商支持。我还注意到,*dc文件能够描述子模块的约束条件,因此我认为Xilinx相对位置约束(RLOC)可以被翻译成具有有限范围的sdc文件(Xilinx称之为SCOPE_TO_CELLS)。因此,也许你可以找到一份Altera sdc文件用户指南,其中解释了如何编写作用域约束,也许在那里你可以找到相对位置的等效物 ;) - Paebbels
2个回答

3

经过查阅 Altera 手册和一些试错,我自己得出了答案。这个方法基本上能够实现我想要的功能。

module synchronizer (input wire dat_i,

                     input wire out_clk,
                     output wire dat_o);

   (* altera_attribute = "-name SYNCHRONIZATION_REGISTER_CHAIN_LENGTH 2; -name SYNCHRONIZER_IDENTIFICATION \"FORCED IF ASYNCHRONOUS\"" *)
   logic [1:0]                   out_sync_reg;

   always_ff@(posedge out_clk) begin
      out_sync_reg <= {out_sync_reg[0],dat_i};
   end

   assign dat_o = out_sync_reg[1];

endmodule

我测试了将全局同步器检测关闭,并观察到 TimeQuest 找到并分析了冲击失效的正确路径。
即使在 dat_iclk_a 锁存且 out_clkclk_b 驱动的情况下,这也能很好地运行;其中两个时钟设置为:
set_clock_groups -asynchronous -group {clk_a}
set_clock_groups -asynchronous -group {clk_b}

因此,会在所有由 clk_a 钟控的寄存器与由 clk_b 钟控的寄存器之间创建虚假路径。
如果两个时钟处于不同的异步时钟组中,则 set_max/min_delay 将无效(如 Altera 所述)。

最好也嵌入false path约束:(* altera_attribute = "-name SDC_STATEMENT \"set_false_path -to [get_registers {*synchronizer*out_sync_reg[0]}]\"" *)。通常不建议在两个时钟域之间设置全局false path,因为它可能掩盖错误。请参见此答案 - Chiggs

1

Altera不支持使用RLOC样式的限制条件。显然,这与底层物理架构有关。我相信他们会过度提供ALMs并在芯片测试期间熔断列以提高产量,因此相对位置约束条件不会按预期转换为特定的物理设备。

如果您担心同步器链的位置,可以使用SYNCHRONIZATION_REGISTER_CHAIN_LENGTHSYNCHRONIZER_IDENTIFICATIONQSF设置启用同步器链检测(也可以参见这个答案)。

如果您只想确保特定的时序属性,则应在路径上使用set_max_delayset_min_delay时序约束。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接