在运行 48 MHz 时钟的 Lattice MachXO2 FPGA 上,我有这样的东西:
always_ff @(posedge clk) begin
if (some_condition) begin
// use x to generate y: y <= some_expr_with_x
end
if (another_condition) begin
// assign to x: x <= some_expr_with_w
end
end
some_expr_with_w
涉及组合逻辑,需要超过 21ns(一个时钟周期)才能稳定。我可以保证 some_condition
仅在 another_condition
之后超过 15 个时钟周期才为真,因此在我们需要使用它时,不存在 x
不稳定的危险。
然而,Diamond Lattice Synplify Pro 抱怨计时错误,因为它不知道两个条件之间有 15 个可用时钟周期。虽然设计效果很好,但我想消除计时错误。我如何告诉 Lattice Diamond 这个逻辑花费超过 21 纳秒的时间是可以的?我尝试将
MAXDELAY
和/或
MULTICYCLE
时间偏好设置从
x
到
y
为 300 ns,但这似乎并不能解决问题。关于我需要添加的指令的任何指导都会有所帮助。谢谢你。
MULTICYCLE
约束可以解决该问题。约束需要从
w
到
x
,因为在满足
x
后,我们必须留出足够的时间让
another_condition
稳定下来,然后才能在
some_expr_with_x
中使用它:
MULTICYCLE FROM GROUP "w" CLKNET "clk" TO GROUP "x" CLKNET "clk" 15.000000 X ;
附注我最初的错误是我添加了从 MUTICYCLE
到
x
的
y
约束,这是不正确的,因为这适用于
some_expr_with_x
的计算。