So, I'm not for sure why, but no one told me this was possible.
Basically, for the uninitiated, Xilinx's XST synthesizer has 2 parsers in it.
- Old -- Runs anytime an older hardware target is selected(such as Spartan 3E). Really slow, useless error messages, doesn't parse seemingly obvious VHDL
- New -- Runs anytime a newer hardware target is selected (such as Spartan 6). Really awesome, comparable to ghdl in it's parsing abilities, gives slightly more useful error messages
So, how do you use this shiny new parser on old hardware? There is a hidden "advanced" option.
Right click on the
synthesis process. Go to process properties. At the bottom there should be "property display level", make sure to change that to "advanced". Now, scroll all the way down under synthesis options and there should be a box to put in an extra command line argument labeled "Other XST command line options". Now, put in that box this text:
Now, magically your obvious VHDL will synthesize to what you intend! For instance, I came across this trick when trying to synthesize the dual port asymmetric block RAM code example straight from the code templates provided with ISE! It would synthesize to distributed RAM instead of block RAM everytime. So, I put in this magical option to use the new parser, and poof. Now it synthesizes to a block RAM without any code changes.
It really makes you wonder why they don't just use the new parser by default for old hardware.