AR# 52302


Vivado Synthesis - Does Vivado Synthesis support non-constant (dynamic) range expression?


Vivado Synthesis displays errors similar to the following when it is not able to resolve non-constant (dynamic) range expression.

ERROR: [Synth 8-561] range expression could not be resolved to a constant.

ERROR: [Synth 8-27] complex assignment not supported.


Vivado Synthesis does not always support variables on both bounds of a range.

Only dynamic ranges related to static values and a few non-complicated dynamic ranges are presently addressed in the tool to avoid large logic constructs.

Here are a few examples of what is supported:

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);

These constructs are not supported:

if (data_reg(v_high-1 downto 0) = all_zeros(v_high-1 downto 0)) then

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

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

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

This construct is planned to be supported in 2016.x:

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

In general, for assignments to dynamic ranges, the tool will try to figure out if the ranges come out to the same size. In general, if you use the same indexes for both sides, or have a constant for one of the indexes on both sides, the tool will be able to figure out the sizing and synthesize the design. 

However, if the indexing is very complicated, the tool might not be able to figure out that the sizes are the same. We recommend against trying to make complicated indexing structures.

Overall, if you have a dynamic range expression coding style that caused the error mentioned above, please cross-check the feasibility of avoiding these complex dynamic ranges and replacing them with static values.

AR# 52302
日期 04/04/2016
状态 Active
Type 已知问题
People Also Viewed