Design flow for making a CPU

Status
Not open for further replies.

kaiserhaz

Newbie level 2
Joined
Dec 18, 2013
Messages
2
Helped
0
Reputation
0
Reaction score
0
Trophy points
1
Location
Kuala Lumpur
Activity points
19
Hello,

I've been wondering for some time now: how does one start the process of fabricating a CPU? What is the detailed design flow for it?

By CPU, I mean that chip everyone has on their PC motherboards.

I know very well the elements that're needed, but how does one come up with it?

In embedded systems design flow, we usually start with requirements and work our way down from that to functional models, then to a hardware prototypes. Is that also the case for a CPU?
 

I am afraid this is too big a requirement to be discussed in forums.
Better to read through a good textbook or follow a good online tutorial (there must be a lot of them).

In the hardware design world you need to come up with an architecture. A hardware architecture is achieved by the necessary connections between various hardware modules (e.g. a h/w module can be the ALU, the memory unit, logic unit, etc). For a complex thing like a CPU a top-down design approach would be necessary.
 
I have seen CPU designs developed in a couple of books on learning VHDL or Verilog. One that I could put my hands on is by Sunggu Lee, ISBN 0-534-46602-8.
Another is by Pong P. Chu, who describes the elements of Xilinx's MicroBlaze processor in his "FPGA Prototyping by V___ Examples" books. Both of these references are kind of dated, but maybe cheap online.
 

First design the instruction set in Word or the back of an envelope.
Write a instruction set simulator.
Write an assembler.
Write a C compiler.
Run some benchmarks and make sure the instruction set gives you the performance you need.
Develop a microarchitecture for the CPU.
Model in simulator, and check performance is still good.
Start design of CPU basic blocks. Things like adders, multipliers, bus units, register files, instruction decoders, etc. Some blocks will be written in a HDL like Verilog. Other blocks will full custom design (i.e. hand drawn schematics then layout). Verify blocks in simulation.
Pull together blocks in to larger modules.
Verify RTL sims of complete CPU against simulation model.
Prototype in FPGA.
Synthesize the Verilog to gates for target tech.
Run automated place and route to create a layout. Combine with full custom blocks.
DRC/LVS/STA/LEC/ATPG
Tapeout.
Cross fingers.
 
Write a instruction set simulator.
Write an assembler.
Write a C compiler.
Run some benchmarks and make sure the instruction set gives you the performance you need.

Could you elaborate specially about this part above? What are the tools to simulate instructions and bechmarks? Are they available for free?

Regarding C compiler, the idea is to port to GCC or really write a C-compiler from scratch?
 

Could you elaborate specially about this part above? What are the tools to simulate instructions
You would write the instruction set simulator yourself, in a high-level programming language such as C.
and bechmarks?
For the benchmarks, you would ideally compile the s/w that your processor eventually needs to run. Failing that, google SPEC CPU or EEMBC.

Regarding C compiler, the idea is to port to GCC or really write a C-compiler from scratch?
Porting GCC or LLVM is the quickest way to start. But if your CPU architecture is particularly novel, then you might choose to write your own as well.
 
Status
Not open for further replies.
Cookies are required to use this site. You must accept them to continue using the site. Learn more…