Vivado综合 - 当应用于HDL中的净信号时,ASYNC_REG未应用于寄存器

描述

当应用于HDL中的净信号时,ASYNC_REG未应用于寄存器,如下所示。

类型Reg_Array是std_logic的数组(CONST_PIPE_STAGES - 1 downto 1);
signal sl_arr_RegBank_InOuts:Reg_Array:=(others =>'0');
属性ASYNC_REG:string;
属性sl_arr_RegBank_InOuts的ASYNC_REG:信号是“TRUE”;
开始

Register_Pipes:
因为我在0到CONST_PIPE_STAGES - 1生成
FFfirst:
如果I = 0则生成First_FF:FDRE
通用映射(INIT =>'0')
港口映射
(C => IN_CLK,
CE =>'1',
R =>'0',
D => IN_DATA,
Q => sl_arr_RegBank_InOuts (1)
);
结束生成;
FFmid:
如果I> 0且I <CONST_PIPE_STAGES - 1生成Mid_FF:FDRE
通用映射(INIT =>'0')
港口映射
(C => IN_CLK,
CE =>'1',
R =>'0',
D => sl_arr_RegBank_InOuts (I),
Q => sl_arr_RegBank_InOuts (I + 1)
);
结束生成;
FFlast:
如果I = CONST_PIPE_STAGES - 1生成Last_FF:FDRE
通用映射(INIT =>'0')
港口映射
(C => IN_CLK,
CE =>'1',
R =>'0',
D => sl_arr_RegBank_InOuts (CONST_PIPE_STAGES - 1),
Q => OUT_DATA
);
结束生成;
结束生成;

这是预期的行为。

ASYNC_REG 属性只能应用于单元格。

在上面的示例中,它应用于连接寄存器实例之间的网络信号,因此被忽略。

对于此特定示例,没有选项通过RTL将其应用于单元格,因为FDRE原语在生成循环内实例化。

如果没有生成块,则可以在单元/实例上应用该属性。

这里的解决方法是通过XDC对单元格应用约束。
编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-30 20:50:21 +0800

这个帖子被标记为一个社区wiki

这个帖子是一个wiki(维基). 任何一个积分 >500的人都可以完善它