到目前为止,我还没有找到任何与Xilinx对Altera FPGA的RLOC约束类似的方法。
有谁知道这样做的方法?
例如,将两个FF放在相同或相邻的LAB中
答案 0 :(得分: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_i
被clk_a
锁定而out_clk
由clk_b
驱动,并且两个时钟设置为:
set_clock_groups -asynchronous -group {clk_a}
set_clock_groups -asynchronous -group {clk_b}
因此,在clk_a
为clk_b
提供时钟的寄存器的所有连接之间创建错误路径
set_max/min_delay
不会工作,因为如果两个时钟位于不同的异步时钟组中,它会被忽略(如Altera所述)。
答案 1 :(得分:1)
Altera不支持RLOC
样式限制。显然这与底层物理架构有关。我相信它们在芯片测试期间过度配置ALM并熔断列,以提高产量,因此相对位置约束不会像预期的那样转换为给定的物理设备。
如果您担心同步链放置,可以使用SYNCHRONIZATION_REGISTER_CHAIN_LENGTH
和SYNCHRONIZER_IDENTIFICATION
QSF settings启用同步链检测(另请参阅this answer)。
如果您只想确保特定的时序属性,请在路径上使用set_max_delay
和set_min_delay
时序约束。