Good afternoon for all the hard workers on adders, multipliers and dividers :)
Some of you are having some problems with dc-shell, here are a few pieces of advice:
1. The script that we provided to you is dumb and will not read a number of files. It just reads primitives.v and works with the modules present there only. It does not include other files. If you divide your work into more than one file you will get errors. So, please keep everything in primitives.v. That will also help me at the end since I will get just one file from each one of you.
2. If you built a module that you instantiate in different places in your design then synopsis might have a problem to optimize things for you. Think of it simply like this: instance1 and instance2 are in two different places in the design. In the case of instance1, some outputs should be optimized on the expense of the other outputs. In the case of instance2, it is those other outputs that are critical. When synopsis looks at the module how can it optimize it if you insist on reusing the same module in both places? The solution is simple, on the logic level it is the same module doing the same exact function but on the physical layout level, it is two different modules each one sized differently. How to tell Synopsis to flatten out the design and do this? You go to your primitives.scr (in the scripts directory) and change:
compile -map_effort medium -boundary_optimization
To:
compile -map_effort high -ungroup_all -boundary_optimization
The difference is the addition of the -ungroup_all part which basically flattens out your design. Your verilog will still remain modular but your layout will not be reusing the same exact physical modules everywhere.
(The other difference in the line above is to ask dc-shell to make a harder effort to get you a better design. You should change the line for the adder, multiplier and divider)
3. Obviously, if you set a shorter clock period, dc_shell will try harder to make your design faster. You can even over constrain the problem to dc_shell by putting clock period to say 5. This will never be met but it will get you the best speed it can and report a negative slack. With a long clock period, it does not optimize the speed much and turns into optimizing the area.
4. Last, some of you might be having a conflict with other stuff in your .cshrc file causing dc_shell not to work. The proposed solution is that you comment out other things related to the other classes from your .cshrc file and try it again.