Transcript Dacunha
11M Neil D’Cunha Everything about Asynchronus CPU's - That you never cared about or ever wanted to know • Name is a misnomer o There are still sequential parts o Just no global or circuit wide clocks • Each module clocks the next module o Self Timed or Self Clocked is a better name o This is called a handshake protocol My Handshake Protocol • Initial attempt proved to be difficult to simulate o Active Qn stage would clock Qn+1 stage o Qn+1 would deactivate Qn o Qn+1 would become Qn • Problem: How to start this thing? • Next attempt was to have a linear chain o Each stage would clock the next stage o Final stage would deactivate the next all stages • Code proved to be unsynthesizeable • Replaced with an FSM that replicated handshaking Model of the my Asynchronous CPU Operation • Start (stage 0) is always forced high to simulate a valid • Every state is in the "invalid" state • Each stage o Checks if previous stage is valid o Does it's job o Becomes valid • Weird result - I created a 7 stage pipeline CPU o Slight modifications to the code Control Registers Instruction Registers My CPU in more detail • Based off the PicoBlaze CPU for Xlinix FPGA's o Tried to recreate similar functionality o ALU has less functionality • 16 Registers in Total o 8 User Registers o 8 System Registers - PC, RA, SP • Most instructions can use a register or immediate value • Very scalable - used parameterized VHDL code Instruction Set Architecture No Instruction Assembly Machine Code 1 Addition ADD $D $F $S 0000 $D [$F or O] [$S or O] M 2 Subtract SUB $D $F $S 0001 $D [$F or O] [$S or O] M 3 AND AND $D $F $S 0010 $D [$F or O] [$S or O] M 4 OR OR $D $F $S 0011 $D [$F or O] [$S or O] M 5 Load Upper LUR $D HH M 0100 $D HH M 6 Load Lower LLR $D HH M 0101 $D HH M 7 Load Word LM $D $F [$S or O] M 0110 $D $F [$S or O] M 8 Store Word SM $D $F [$S or O] M 0111 $D $F [$S or O] M 9 Set Equal SEQ $F [$S or O] M 1000 --- $F [$S or O] M 10 Set Unequal SNE $F [$S or O] M 1001 --- $F [$S or O] M 11 Set Lesser 1010 --- $F [$S or O] M SLT $F [$S or O] M 12 Set Greater SGT $F [$S or O] M 1011 --- $F [$S or O] M 13 Input INP $D [$S or O] 1100 $D --- [$S or O] M 14 Output OUT $D [$F or O] 1100 --- $F [$S or O] M 15 Jump JMP A [$F or OO] M 1110 A [$F or OO] M 16 Halt HLT 1111 XXX XXX XXX XXX Questions?