A: Make sure that you are sourcing all of the correct files and have everything setup correctly. You need to be sourcing /usr/class/ee272/csh. Also, you need to have the symbolic links for synopsys and lager as stated in the synopsys/lager handout (link here someday).
In the handout, it says to make a link ~/.synopsys.setup. Copy the same link to ~/.synopsys.
Note that there are various errors caused by not having the LD_LIBRARY_PATH environment variable set for some tools. Unfortunately if you do have this set, a lot of other stuff breaks. We get around this by putting little shell script wrappers on some of the tools (verilog, navver, DMoct).
Do not use implied latches in your verilog. It will not get synthesized well, and could cause the synthesized logic to fail.
Q: The tool v2sdl gives me a parsing error on one of the lines of my controller.mapped. What is causing this?
A: Among other things, it is possible that you have a feedthrough or an output that is always 0 or 1. Look at the line in question in controller.mapped. See if one of the inputs to the standard cell is 0 or 1 always. If so, go back and fix your verilog code, and re-run synopsys/lager.
Q: My synthesized logic block is way too big. How can I make it smaller?
A: A former 272 student prepared a document on how he got his controller to shrink by a factor of 2 (from ~400 cells to ~200 cells). It is available in 3 formats:
Q: The module that I want to synthesize has hierarchy. How can I get Synopsys to synthesize it as a single entity?
A: To flatten hierarchy in synopsys, after you read in the verilog file, push down into the top module. Select all of the sub-modules. Then from the Edit menu, choose the Ungroup menu item. You should then see synopsys expand out all of the sub-modules.
Q: How can I specify which side the synthesized logic inputs and outputs appear on in the layout?
A: At the end of the .sdl file there are a bunch of lines that have in them "(TERM_EDGE ??)". Replace the ?? with either TOP, BOTTOM, LEFT, or RIGHT to specify the edge. Don't forget to uncomment the line (remove the ";" at the beginning of the line.
Q: How can I specify the ordering of the inputs and outputs of the synthesized logic?
A: After the TERM_EDGE specifier, you can add a similar specifier for TERM_RELATIVE_POSITION. The relative position is a number between 0 and 1 inclusive. If you put in -1.0 this indicates that you want a random ordering.
Please see the manual pages for sdl and for Stdcell for more info. Remember that you need to use the command "lagerman" to access those manual pages. For terminals on the RIGHT and LEFT a high number corresponds to being closer to the top. For TOP and BOTTOM a high number corresponds to being rightmost.
A fragment of a .sdl file with the sides and ordering set would look like:
Here are some random synopsys/lager hints:
