UPGRADE YOUR BROWSER

We have detected your current browser version is not the latest one. Xilinx.com uses the latest web technologies to bring you the best online experience possible. Please upgrade to a Xilinx.com supported browser:Chrome, Firefox, Internet Explorer 11, Safari. Thank you!

AR# 52302

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

Description

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.

Solution

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
Date Created 10/08/2012
Last Updated 04/04/2016
Status Active
Type Known Issues
Tools
  • Vivado Design Suite