Xilinx FPGA MPPR script

This post was written by eli on February 28, 2009
Posted Under: FPGA,Linux,Software

I reached that point, at which place and route sometimes met timing, and sometimes it didn’t. It was all a matter of playing with the placer cost table number. The FPGA guy’s gambling for lucky numbers.

The ISE tool (Xilinx’ native IDE) supports an feature called Multi-Phase Place and Route (MPPR for short), which basically means that the tools will run several phases of place and route, with different placer cost table figures. I never tried it, to be honest. Since I’m not very fond of IDE’s in general, and not using ISE in particular, I preferred to do it myself.

Besides, MPPR will run for a given number of times. I want the computer to loop until the constraints are met. No more, no less.

So here is the script I used. If you’re using Linux or Cygwin, it will be pretty easy to modify it for your uses.



while (( cost<100 )) && [ -e $reportfile ] && ! grep -q 'All constraints were met' $reportfile ; do
  rm -f $reportfile;
  C:\\WINNT\\system32\\cmd.exe /c start "" /b /low /wait par -intstyle ise -w -ol med -pl med -rl med -t $cost "$projectname"_map.ncd $projectname.ncd $projectname.pcf
  if ! grep -q 'All signals are completely routed' $reportfile ; then
    echo PAR seems to have failed. Stopping.
    exit 1;
  echo Done PAR with cost table $((cost++))

echo Done.

Now, if you’re bothered by the line going

C:\\WINNT\\system32\\cmd.exe /c start "" /b /low /wait par -intstyle ise (...)

you may exchange it with simply

par -intstyle ise -w -ol med -pl med -rl med -t $cost "$projectname"_map.ncd $projectname.ncd $projectname.pcf

The only reason I use cmd.exe with all its parameters, is that I want the PAR process to run with a low priority. After all, I may want to do something else with my computer while this CPU hog is running.

Add a Comment

required, use real name
required, will not be published
optional, your blog address