06-06-2014 03:07 PM
will this bug be fixed in 2014.2 ?
06-06-2014 04:16 PM
06-06-2014 04:16 PM
03-21-2015 03:14 PM
This is still existing in 2014.4. Can we know when this will be fixed? This is quite painful as it was supported in ISE.
03-24-2015 08:52 AM
03-24-2015 09:28 AM
Thank you! I hope it will be 2015.1!
03-24-2015 07:48 PM
2015.1 is supposed to be released in less than a month. It's quite unlikely that it will be in it.
03-24-2015 08:47 PM
03-25-2015 03:37 AM
Thanks for the clarification!
04-16-2015 03:54 PM
This problem is affecting me too - designs that synthesize fine in ISE are now broken in Vivado.
Is there an ETA on getting proper loop constructs back into the synthesizer? XST handles them fine, as do other vendors' synthesizers.
It's kind of crazy that Vivado doesn't even have feature parity with ISE's synthesizer.
06-07-2015 10:37 AM
Does anybody has a workaround for this, at least an idea?
08-27-2015 01:32 AM
I ran into this issue porting a design that worked fine with ISE. In my case the number of iterations in a while loop in a function depended on the length of an std_logic_vector passed into it. My solution was to have two end conditions for the loop; the 'real' end condition, and a 'maximum iterations' end condition, with the maximum set somewhere below the 2000 that Vivado seems to use. See below:
function grey2bin (v : std_logic_vector) return std_logic_vector is constant MAX_VECTOR_WIDTH : integer := 1024; variable rv : std_logic_vector(v'range) := v; variable mask : std_logic_vector(v'range) := std_logic_vector(shift_right(unsigned(v), 1)); variable i : integer := 0; begin -- From wikipedia. Added iteration limit to avoid Vivado error Synth 8-3380. while (to_integer(unsigned(mask)) /= 0 and i < MAX_VECTOR_WIDTH) loop rv := rv xor mask; mask := std_logic_vector(shift_right(unsigned(mask), 1)); i := i + 1; end loop; return rv; end function;
The one issue with this is that the elaborated design contains logic for 'maximum iterations', however, it was optimised down to the correct logic during synthesis.
There's another thread about the issue here http://forums.xilinx.com/xlnx/board/crawl_message?board.id=zaps&message.id=7131 with a few comments, which I think miss the point, along the lines of "you shouldn't have big loops in your functions"; the iteration limit is not reached because of the actual number of iterations, but because of how many iterations there could be, given an unconstrained input. ISE seems to be smart enough to use the actual input when the function is called.