描述
当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);
通常,对于动态范围的赋值,该工具将尝试确定范围是否达到相同的大小。通常,如果对两侧使用相同的索引,或者两侧都有一个索引的常量,则该工具将能够确定大小并综合设计。
但是,如果索引非常复杂,则该工具可能无法确定大小是否相同。我们建议不要尝试制作复杂的索引结构。
总的来说,如果您有动态范围表达式编码样式导致上述错误,请交叉检查避免这些复杂动态范围并用静态值替换它们的可行性。
没有回复内容