Your success in IC design is directly depends on your RTL code. There is a lot more that goes into a good RTL description than just writing with good coding style. Design for Test and Design for Synthesis are just a few examples of design goals that can be affected at the RTL. This post is all about RTL design issues. Code it correctly from the beginning and you won't need so many big fancy tools to solve your timing closure problems at the back end of the design cycle.
There are many design issues - which impact the speed and area of the design - need to be resolved before you begin coding your design.
Communicate design issues with your team - Things to be worked out as a team
Partitioning helps to break down your big design into smaller blocks and assign each small unit to different members of the team. Follow the specification's recommendation for partitioning.
What are the I/O requirements?
What other IPs are you using?
Does the design require any extra IP (Intellectual Property) to be integrated into it? RAMs? Cores? Buses? FIFOs? Then start with the interface to each IP block and define it.
Is it your expectation that you are pin-limited or gate limited?
Being pin-limited means that you dont have enough I/O pads in your ASIC package to do what you really want to do. You might be able to double up on the functions of each pin, which would require multiplexing signals and would prevent any ideas of a unidirectional bus interface at the I/O pad level. But if you need all the signals to be active simultaneously, you wont be able to do it either. You'll have to split the design up. You should know before you begin your RTL.
Being gate-limited means that the design has too much functionality for the die size chosen. You might have to cut out functionality to fit on the die. Or you can try to optimize your design for area, which means speed objectives might be tough to meet. It is hard to estimate whether you will be gate limited at the beginning of a project unless you have been through this design before.
Is it your expectation that you will be pushing the speed envelope of the technology?
There are many design issues - which impact the speed and area of the design - need to be resolved before you begin coding your design.
Communicate design issues with your team - Things to be worked out as a team
- Naming convention for hierarchical blocks,
- Naming convention for signals,
- Active low or active high states for the signal
Partitioning helps to break down your big design into smaller blocks and assign each small unit to different members of the team. Follow the specification's recommendation for partitioning.
What are the I/O requirements?
At the major functional block level, define the interface protocol as soon as possible. What bus interface protocol will be used? PCI, AHB or OCP. Get the specification for each bus and interface to the design before you begin coding. Make sure the function and timing of each one is clear. This will also enable you to create high level models of your design before you start coding the RTL.
What about the clocks in the design?
How many clocks will be required for the design? Where are the clocks for the chip coming from? Will they be internally generated? PLL? Divide by circuits? Externally supplied clocks? You have to isolate your clock generation circuitry from the rest of the chip design. Especially if it is analog based.
What about the clocks in the design?
How many clocks will be required for the design? Where are the clocks for the chip coming from? Will they be internally generated? PLL? Divide by circuits? Externally supplied clocks? You have to isolate your clock generation circuitry from the rest of the chip design. Especially if it is analog based.
What other IPs are you using?
Does the design require any extra IP (Intellectual Property) to be integrated into it? RAMs? Cores? Buses? FIFOs? Then start with the interface to each IP block and define it.
Is it your expectation that you are pin-limited or gate limited?
Being pin-limited means that you dont have enough I/O pads in your ASIC package to do what you really want to do. You might be able to double up on the functions of each pin, which would require multiplexing signals and would prevent any ideas of a unidirectional bus interface at the I/O pad level. But if you need all the signals to be active simultaneously, you wont be able to do it either. You'll have to split the design up. You should know before you begin your RTL.
Being gate-limited means that the design has too much functionality for the die size chosen. You might have to cut out functionality to fit on the die. Or you can try to optimize your design for area, which means speed objectives might be tough to meet. It is hard to estimate whether you will be gate limited at the beginning of a project unless you have been through this design before.
Is it your expectation that you will be pushing the speed envelope of the technology?
- How much functionality are you putting into your design
- At what speed will it be running?
- What technology are you going to use to implement it?
- Has it ever been done before?
- What changes to the design are you willing to make to achieve the speed goal for your design? Pipelining or Register re-timing.
1 comment:
this is very useful indeed!
Post a Comment