Describes the main processing pipeline of the CPU.
-
The pipeline is 3 stages long:
-
Fetch
-
Decode + Execute
-
Writeback
-
-
64
-bit wide memory bus -
128
-bit fetch buffer.128
bits =64
bits (memory bus width) *2
(largest instruction size). -
The fetch buffer also tracks bus error bits. Each 16-bit halfword in the buffer is tagged with a "is this data associated with an instruction bus error?" bit.
-
It maintains it's own copy of the program counter, and a separate register containing the instruction fetch address.
-
It makes the following data fields available to the decode and operand gather stage:
Bits Name Description 32 s1_instr
32-bit instruction word ready for decoding. 1 s1_ferr
Fetch error associated with these s1_instr
bits?1 s1_i16bit
s1_instr
contains 16-bit instruction.1 s1_i32bit
s1_instr
contains 32-bit instruction.1 s1_eat_2
Eat 2 bytes from the buffer. 1 s1_eat_4
Eat 4 bytes from the buffer. Note that
s1_eat_[2,4]
are driven by the decode stage, other signals are driven by the fetch stage. -
The control flow change bus is driven from either execute or writeback, and communicates all interrupts, exceptions, branches and jumps to the fetch stage. The writeback stage takes priority in the event of contention.
Bits Name Dir Description 1 cf_valid
in Control flow change request valid 1 cf_ack
out Control flow change acknowledged. 64 cf_target
in Target address of the control flow change. 4 cf_cause
in Cause of the control flow change.
-
Decodes instructions and selects inputs to functional units.
-
Computes data memory & branch target addresses using the ALU.
-
Non-trap control flow changes take place here.
-
The pipeline register data fields presented to writeback are:
Bits Name Description 1 |`s3_valid `| Execute has instruction ready for writeback 1 |`s3_ready `| Writeback ready for new instruction 2 |`s3_full `| Instruction in writeback stage 5 |`s3_rd `| Destination GPR
XLEN |
s3_wdata
| Write data for CSRs / GPRs XLEN |s3_npc
| Next program counter - for jump and link. XLEN |s3_pc
| Program counter for instruction 3 |s3_csr_op
| Control & Status Register operation 4 |s3_cfu_op
| Control flow change operations: mret/ebreak etc 5 |s3_lsu_op
| Load/store unit operation 2 |s3_wb_op
| Writeback data sourcing 1 |s3_trap
| Raise trap.
- This stage writes back data to the register file, accesses CSRs, finalises control flow changes and finishes memory accesses.