Ee382M - Vlsi I: Spring 2009 (Prof. David Pan) Final Project
Ee382M - Vlsi I: Spring 2009 (Prof. David Pan) Final Project
1. Introduction
Your task in this project is to use the skills you have been acquiring through the lectures
and labs to design a fairly sophisticated module—an intellectual property (IP) core. The
purpose of the project is threefold:
1. It is worth a large fraction of your grade (but this should be the least important item).
2. Working on this project should be training on how to go about approaching a project.
3. The project should yield results:
• Experimental results on the efficacy of proposed VLSI architectures, and
• Suggestions for improving these architectures.
Projects can be done individually, or in groups of 2–3; naturally, I will expect more from
group projects.
2. Timeline
Project selection: Make a decision as to the projects you are interested in working on by
March 26th. You may turn in only a sheet with your topic, a paragraph description about
what you are going to implement, and your teammate at this time.
Final report: The final report should consist of the following:
• Specifications document
• Design document
• User document
• Testing strategy and results
• Optimization strategy and results
• Source code and layout
The report is due in hardcopy on May 5th, 2009 in my office.
3.1. Specifications
The specifications document should include a high-level overview of the IP block
you are implementing; a description based on a diagram or set of diagrams is the best
way to do this. It should also include the summary of the logical interface the block
presents to its environment.
In addition, the document should include the area, power, and performance numbers
you are targeting. If you base your work on an existing design, you should be able to
come up with estimates on these parameters; otherwise, back-of-the-envelope
calculations are fine. It’s not imperative that you meet the numbers in the specification
document.
The specifications document should not discuss the implementation; its focus is the
functionality that you will implement, and the cost of this functionality.
3.2. Design
The design document should include a description of how you will implement the
specification — a set of figures is the best way to convey this. The implementation
discussion should include the basic architecture and algorithms, as well as the floorplan,
and circuit technology, etc.
You should also make notes on the optimization techniques you expect to use and
their implications to your design, and the trade-offs they will entail. For example, if you
have long interconnects, you may want to state that you intend to overcome problems
resulting from crosstalk by shielding, and hence all long nets should have enough space
between them for such shielding lines.
All choices should be justified, on the basis of references to portions of the
book/research papers, and by logical arguments.
The design document should also include an overview of the tool suite you will be
using, the naming conventions for variables/modules/files, the regression control strategy,
and an issue tracking mechanism (which could be just entries in a text file).
Think of the design document as something you would give to an engineer just
joining the project to help him/her come up to speed.
(Design documents also spell out a regular system of “code reviews,” where
designers have to explain what they have done to their colleagues, at a very detailed level,
e.g., a walk-through of RTL code. We won’t have review process as it is probably too
involved for a class project.)
The specifications and design documents do not have to be exactly what you turned
in; indeed I would expect the design document to evolve as you discover problems and
find improvements with your approach.
3.4. Testing
In this section, you are to describe the set of tests you applied to your design to
check for logical errors, and your coverage metrics. Classify the bugs you encountered,
and how you corrected for them. In addition, discuss the traces you applied to determine
the critical path, and compute the delays.
For some projects it may make sense to write a high-level model in C or C++ and do
performance simulations (e.g., determine the average latency and drop rate through the
Benes fabric as a function of load, and buffering). If this is the case, include results from
these simulations.
3.5. Optimization
Include a discussion of all the steps you took to improve performance, and the
magnitude of improvements that you saw. I am particularly interested in novel techniques
that gave your better performance that the descriptions that you based your approach on.
4. Project Topics
This following list is a set of suggested topics that I would like to see you work on.
If you have other idea, you are encouraged to pursue, but please come and talk to me
before you do it.
4.2. Divider
Division is the hardest of the four basic arithmetic operations. As Intel famously
demonstrated, implementation of division algorithms is not always straightforward.
Nonrestoring, SRT, Newton-Raphson, and Goldschmidt are all possible methods for the
implementation of division.
For this project review all of these methods. Select at least one to implement. Provide
both hand worked examples and simulation results demonstrating the correctness of your
approach and implementation. Additionally contrast your implementation with each of
the other methods and provide the reasons for your selection, as well as the advantages
and disadvantages provided by your approach.
References:
z Computer Arithmetic, Behrooz Parhami, 2000.
z "A new class of digital division methods", J. E. Robertson, IRE Trans.
Electronic Computers, 1958.
z "Techniques of multiplication and division for automatic binary computers",
K.D. Tocher, Quarterly J. Mechanics and Applied Mathematics, 1958.
Mentor: Whitney