Graham Edgecombe
62ea036b23
Add missing csr_src connection from the control unit to the flip flop
2017-12-30 15:37:01 +00:00
Graham Edgecombe
6c964c75e5
Add static branch prediction
2017-12-30 13:48:14 +00:00
Graham Edgecombe
276688f9ef
Move CSR access to the execute stage
...
This reduces the amount of logic slightly, and also removes the one
cycle delay between a CSR read and a subsequent instruction reading from
the destination register.
2017-12-30 11:34:14 +00:00
Graham Edgecombe
eac6a20040
Only stall the pipeline if rs1/rs2 are read
2017-12-29 20:37:02 +00:00
Graham Edgecombe
4b6218c2a8
Add initial CSR support
2017-12-29 15:29:15 +00:00
Graham Edgecombe
de1f936cdd
Implement FENCE.I
2017-12-27 15:23:59 +00:00
Graham Edgecombe
0013935bb0
Split decode stage into smaller modules
...
This increases the number of LUTs slightly (by ~20), as the immediate
mux is now separate to the main control unit, but I think it's worth the
cost.
The imm output is also renamed to imm_value. This is consistent with
rs1_value and rs2_value, and avoids a collision with the new imm output,
which represents the type of immediate.
2017-12-27 14:05:09 +00:00
Graham Edgecombe
2b1e0de9de
Propagate mem_fence signal through the pipeline
2017-12-26 16:46:01 +00:00
Graham Edgecombe
b01e81357d
Re-use the main adder to implement the LUI, JAL and JALR instructions
2017-12-16 12:45:43 +00:00
Graham Edgecombe
a713290deb
Add MRET and WFI to the decoder
...
No TODO in the WFI block as it will be implemented as a no-op.
2017-12-14 23:53:49 +00:00
Graham Edgecombe
c61234f7e4
Order ECALL/EBREAK consistently
2017-12-14 23:53:02 +00:00
Graham Edgecombe
5f84ff150b
Simplify giant case statement in the decoder
...
This makes it easier to add special instructions (e.g. ECALL/EBREAK)
that have unusual encodings (e.g. the funct12 field).
2017-12-12 22:42:47 +00:00
Graham Edgecombe
d6f5bb2218
Add initial support for SYSTEM instructions to the decoder
2017-12-12 22:41:01 +00:00
Graham Edgecombe
22bce1bdeb
Fix compatibility with iverilog
...
This commit:
* changes the type of all output variables to logic
* splits variable declaration and assignment
* declares variables before modules that use the variables
2017-12-09 21:03:45 +00:00
Graham Edgecombe
e801556428
Replace localparams at the root level with defines
...
iverilog doesn't support localparams at the root level.
2017-12-09 10:44:39 +00:00
Graham Edgecombe
460159a392
Rename rd_writeback to rd_write
...
This is consistent with the mem_read and mem_write naming.
2017-12-07 22:37:58 +00:00
Graham Edgecombe
36b7d33850
Read mem_{read,write}_en to mem_{read,write}
2017-12-07 22:37:58 +00:00
Graham Edgecombe
9541f198c2
Revert "Reset {rs1,rs2_out} when flushing the decode stage"
...
This reverts commit 144cbe996fab0596230d9b7d14c94373e8e5bbba.
It isn't required as we reset the rd_writeback_out register.
2017-12-07 22:37:58 +00:00
Graham Edgecombe
e7ae22bf31
Remove _ops.sv files
2017-12-07 22:37:58 +00:00
Graham Edgecombe
0c3b91e733
Fix load-use hazard logic
2017-12-07 22:37:58 +00:00
Graham Edgecombe
86022d42a5
Follow the standard naming/commenting conventions in hazard-related code
2017-12-07 22:37:58 +00:00
Graham Edgecombe
70d72331a7
Order outputs consistently in the decode stage
2017-12-07 22:37:58 +00:00
Graham Edgecombe
02f1d705b7
Reset {rs1,rs2_out} when flushing the decode stage
...
This will prevent us needing to stall the pipeline for a load
instruction if the rs1/rs2 registers happened to match the rd register.
2017-12-07 22:37:58 +00:00
Graham Edgecombe
eff39ad19b
Add flush and stall inputs to every stage
2017-12-07 22:37:58 +00:00
Graham Edgecombe
83b7d1c9b7
Add 'from stage' comments if inputs are not from the previous stage
2017-12-07 22:37:58 +00:00
Graham Edgecombe
8e2ce65ad9
Add operand forwarding to the execute stage
2017-12-07 22:37:58 +00:00
Graham Edgecombe
acbac650bf
Mark the lower 27 bits of shamt as don't care
2017-12-07 22:37:58 +00:00
Graham Edgecombe
871e1f4a32
Add LB, LBU, LH, LHU, SB and SH instructions
2017-12-07 22:37:58 +00:00
Graham Edgecombe
ee768c51d4
Add FENCE and FENCE.I instructions
...
Both are currently NOPs as the implementation is currently in-order and
has separate instruction and data memories.
2017-12-07 22:37:58 +00:00
Graham Edgecombe
88928aa1b2
Fix immediate decoding in J-type instructions
2017-12-07 22:37:58 +00:00
Graham Edgecombe
86f6e0eec1
Add branching support
2017-12-02 15:23:12 +00:00
Graham Edgecombe
4c68818134
Add writeback stage
2017-12-02 11:26:12 +00:00
Graham Edgecombe
062462eeb3
Fix indentation in rv32_decode.sv
2017-12-02 10:23:11 +00:00
Graham Edgecombe
3f8e64c65a
Add memory access stage
2017-12-02 10:22:48 +00:00
Graham Edgecombe
efb33456f9
Add include guards
2017-12-01 23:30:33 +00:00
Graham Edgecombe
5884a437b8
Add JAL/JALR support to the ALU
2017-12-01 23:02:50 +00:00
Graham Edgecombe
37d703c83e
Add ALU control signals to the decoder
2017-12-01 23:02:50 +00:00
Graham Edgecombe
4aa64f864a
Rename valid to valid_out
2017-12-01 23:02:50 +00:00
Graham Edgecombe
30b793cbaf
Add ALU
2017-12-01 23:02:50 +00:00
Graham Edgecombe
e7389a3065
Fix shamt decoding
2017-12-01 21:51:41 +00:00
Graham Edgecombe
ed238e5e9b
Use -noautowire to avoid using logic in every input/output declaration
2017-12-01 18:49:48 +00:00
Graham Edgecombe
4a4dee334d
Add initial fetch/decode stages
2017-12-01 08:46:43 +00:00