Vivado综合 - Vivado Synthesis是否支持非常数(动态)范围表达?

描述

当Vivado Synthesis无法解析非常量(动态)范围表达式时,会显示类似于以下内容的错误。

错误:[Synth 8-561]范围表达式无法解析为常量。
错误:[Synth 8-27]不支持复杂分配。

Vivado Synthesis并不总是支持范围的两个边界上的变量。

目前,该工具仅解决了与静态值和一些非复杂动态范围相关的动态范围,以避免大型逻辑结构。

以下是支持内容的几个示例:

output_reg(v_high downto v_low)<= input_reg(v_high downto v_low);

output_reg(v_high downto v_high-15)<= input_reg(15 downto 0);

不支持这些结构:

if(data_reg(v_high-1 downto 0)= all_zeros(v_high-1 downto 0))然后

output_reg(63 downto v_low)<= input_reg(63-v_low downto 0);

data_reg(63 downto v_low)<=(其他=>'0');

output_reg(v_high + v_low - 1 downto v_low)<= input_reg(v_high - 1 downto 0);

计划在2016.x中支持此构造:

output_reg(V_WIDTH * 2 -1 downto v_low * 8)<= input_reg(WIDTH * 2 - v_low * 8 -1 downto 0);

通常,对于动态范围的赋值,该工具将尝试确定范围是否达到相同的大小。通常,如果对两侧使用相同的索引,或者两侧都有一个索引的常量,则该工具将能够确定大小并综合设计。

但是,如果索引非常复杂,则该工具可能无法确定大小是否相同。我们建议不要尝试制作复杂的索引结构。

总的来说,如果您有动态范围表达式编码样式导致上述错误,请交叉检查避免这些复杂动态范围并用静态值替换它们的可行性。

编辑 重设标签(回车键确认) 标为违禁 关闭 合并 删除

提问于 2018-07-31 12:58:32 +0800

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

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