Skip to content

Commit 2d5e6d5

Browse files
committed
Tomsaulo: Add FP shims, L0 cache, LQ bug fixes, and full test infrastructure
LQ bug fixes: - Fix stale response after partial flush: drain approach discards late memory responses to flushed entries instead of writing stale data - Fix tail reclamation after partial flush: retract tail_ptr backwards past invalidated entries so LQ doesn't falsely appear full - Fix L0 cache concurrent fill/invalidate race at same index: suppress invalidation when a concurrent fill targets the same cache line New modules: - lq_l0_cache: direct-mapped L0 data cache for LQ with combinational lookup, fill-on-response, MMIO bypass, and flush support - fp_add_shim: FP add/sub, compare, classify, sign-inject, convert operations via 5 subunits (CDB slot 4) - fp_mul_shim: FP multiply and fused multiply-add operations via mult_unit and fp_fma subunits (CDB slot 5) - fp_div_shim: FP divide and square root operations via fpu_div_sqrt_unit (CDB slot 6) Wrapper integration: - Wire FP shims into tomasulo_wrapper CDB slots 4-6 with fu_cdb_adapter instances and priority mux (internal shim vs external injection) - Connect FP RS issue outputs to corresponding shims - Gate FP RS fu_ready on adapter pending + shim busy - Add ICARUS guards to stub FP shims (revert to external ports) Test infrastructure: - 19 new FP shim cocotb tests (8 add + 6 mul + 5 div) - 5 new LQ tests (stale response, tail reclamation, cache hit/miss/MMIO) - 4 new formal targets (fp_add_shim, fp_mul_shim, fp_div_shim, lq_l0_cache) - All 81 cocotb tests passing, all 12 formal targets passing
1 parent a423464 commit 2d5e6d5

30 files changed

+3705
-48
lines changed

formal/fp_add_shim.sby

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
[tasks]
2+
bmc
3+
cover
4+
5+
[options]
6+
bmc: mode bmc
7+
bmc: depth 16
8+
cover: mode cover
9+
cover: depth 20
10+
11+
[engines]
12+
smtbmc boolector
13+
14+
[script]
15+
read -formal -sv riscv_pkg.sv
16+
read -sv fp_lzc.sv
17+
read -sv fp_classify_operand.sv
18+
read -sv fp_operand_unpacker.sv
19+
read -sv fp_subnorm_shift.sv
20+
read -sv fp_result_assembler.sv
21+
read -sv fp_sign_inject.sv
22+
read -sv fp_classify.sv
23+
read -sv fp_compare.sv
24+
read -sv fp_convert.sv
25+
read -sv fp_convert_sd.sv
26+
read -sv fp_adder.sv
27+
read -sv fp_multiplier.sv
28+
read -sv fpu_adder_unit.sv
29+
read -sv fpu_compare_unit.sv
30+
read -sv fpu_classify_unit.sv
31+
read -sv fpu_sign_inject_unit.sv
32+
read -sv fpu_convert_unit.sv
33+
read -formal -sv fp_add_shim.sv
34+
prep -top fp_add_shim
35+
36+
[files]
37+
../hw/rtl/cpu_and_mem/cpu/riscv_pkg.sv
38+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_lzc.sv
39+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify_operand.sv
40+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_operand_unpacker.sv
41+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_subnorm_shift.sv
42+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_result_assembler.sv
43+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_sign_inject.sv
44+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify.sv
45+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_compare.sv
46+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_convert.sv
47+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_convert_sd.sv
48+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_adder.sv
49+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_multiplier.sv
50+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_adder_unit.sv
51+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_compare_unit.sv
52+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_classify_unit.sv
53+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_sign_inject_unit.sv
54+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_convert_unit.sv
55+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_add_shim.sv

formal/fp_div_shim.sby

Lines changed: 37 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,37 @@
1+
[tasks]
2+
bmc
3+
cover
4+
5+
[options]
6+
bmc: mode bmc
7+
bmc: depth 40
8+
cover: mode cover
9+
cover: depth 50
10+
11+
[engines]
12+
smtbmc boolector
13+
14+
[script]
15+
read -formal -sv riscv_pkg.sv
16+
read -sv fp_lzc.sv
17+
read -sv fp_classify_operand.sv
18+
read -sv fp_operand_unpacker.sv
19+
read -sv fp_subnorm_shift.sv
20+
read -sv fp_result_assembler.sv
21+
read -sv fp_divider.sv
22+
read -sv fp_sqrt.sv
23+
read -sv fpu_div_sqrt_unit.sv
24+
read -formal -sv fp_div_shim.sv
25+
prep -top fp_div_shim
26+
27+
[files]
28+
../hw/rtl/cpu_and_mem/cpu/riscv_pkg.sv
29+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_lzc.sv
30+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify_operand.sv
31+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_operand_unpacker.sv
32+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_subnorm_shift.sv
33+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_result_assembler.sv
34+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_divider.sv
35+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_sqrt.sv
36+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_div_sqrt_unit.sv
37+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_div_shim.sv

formal/fp_mul_shim.sby

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
[tasks]
2+
bmc
3+
cover
4+
5+
[options]
6+
bmc: mode bmc
7+
bmc: depth 16
8+
cover: mode cover
9+
cover: depth 20
10+
11+
[engines]
12+
smtbmc boolector
13+
14+
[script]
15+
read -formal -sv riscv_pkg.sv
16+
read -sv fp_lzc.sv
17+
read -sv fp_classify_operand.sv
18+
read -sv fp_operand_unpacker.sv
19+
read -sv fp_subnorm_shift.sv
20+
read -sv fp_result_assembler.sv
21+
read -sv fp_multiplier.sv
22+
read -sv fp_adder.sv
23+
read -sv fp_fma.sv
24+
read -sv fpu_mult_unit.sv
25+
read -sv fpu_fma_unit.sv
26+
read -sv dsp_tiled_multiplier_unsigned.sv
27+
read -formal -sv fp_mul_shim.sv
28+
prep -top fp_mul_shim
29+
30+
[files]
31+
../hw/rtl/cpu_and_mem/cpu/riscv_pkg.sv
32+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_lzc.sv
33+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify_operand.sv
34+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_operand_unpacker.sv
35+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_subnorm_shift.sv
36+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_result_assembler.sv
37+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_multiplier.sv
38+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_adder.sv
39+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_fma.sv
40+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_mult_unit.sv
41+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_fma_unit.sv
42+
../hw/rtl/cpu_and_mem/cpu/ex_stage/dsp_tiled_multiplier_unsigned.sv
43+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_mul_shim.sv

formal/load_queue.sby

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,12 @@ smtbmc boolector
1414
[script]
1515
read -formal -sv riscv_pkg.sv
1616
read -sv load_unit.sv
17+
read -sv lq_l0_cache.sv
1718
read -formal -sv load_queue.sv
1819
prep -top load_queue
1920

2021
[files]
2122
../hw/rtl/cpu_and_mem/cpu/riscv_pkg.sv
2223
../hw/rtl/cpu_and_mem/cpu/ma_stage/load_unit.sv
24+
../hw/rtl/cpu_and_mem/cpu/tomasulo/load_queue/lq_l0_cache.sv
2325
../hw/rtl/cpu_and_mem/cpu/tomasulo/load_queue/load_queue.sv

formal/lq_l0_cache.sby

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
[tasks]
2+
bmc
3+
cover
4+
5+
[options]
6+
bmc: mode bmc
7+
bmc: depth 8
8+
cover: mode cover
9+
cover: depth 12
10+
11+
[engines]
12+
smtbmc boolector
13+
14+
[script]
15+
read -formal -sv riscv_pkg.sv
16+
read -formal -sv lq_l0_cache.sv
17+
prep -top lq_l0_cache
18+
19+
[files]
20+
../hw/rtl/cpu_and_mem/cpu/riscv_pkg.sv
21+
../hw/rtl/cpu_and_mem/cpu/tomasulo/load_queue/lq_l0_cache.sv

formal/tomasulo_wrapper.sby

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -23,11 +23,38 @@ read -sv fu_cdb_adapter.sv
2323
read -sv int_alu_shim.sv
2424
read -sv int_muldiv_shim.sv
2525
read -sv load_unit.sv
26+
read -sv lq_l0_cache.sv
2627
read -sv load_queue.sv
2728
read -sv divider.sv
2829
read -sv dsp_tiled_multiplier_unsigned.sv
2930
read -sv multiplier.sv
3031
read -sv alu.sv
32+
read -sv fp_lzc.sv
33+
read -sv fp_classify_operand.sv
34+
read -sv fp_operand_unpacker.sv
35+
read -sv fp_subnorm_shift.sv
36+
read -sv fp_result_assembler.sv
37+
read -sv fp_sign_inject.sv
38+
read -sv fp_classify.sv
39+
read -sv fp_compare.sv
40+
read -sv fp_convert.sv
41+
read -sv fp_convert_sd.sv
42+
read -sv fp_adder.sv
43+
read -sv fp_multiplier.sv
44+
read -sv fp_divider.sv
45+
read -sv fp_sqrt.sv
46+
read -sv fp_fma.sv
47+
read -sv fpu_adder_unit.sv
48+
read -sv fpu_mult_unit.sv
49+
read -sv fpu_fma_unit.sv
50+
read -sv fpu_compare_unit.sv
51+
read -sv fpu_sign_inject_unit.sv
52+
read -sv fpu_classify_unit.sv
53+
read -sv fpu_div_sqrt_unit.sv
54+
read -sv fpu_convert_unit.sv
55+
read -sv fp_add_shim.sv
56+
read -sv fp_mul_shim.sv
57+
read -sv fp_div_shim.sv
3158
read -formal -sv tomasulo_wrapper.sv
3259
prep -top tomasulo_wrapper
3360

@@ -43,9 +70,36 @@ prep -top tomasulo_wrapper
4370
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/int_alu_shim.sv
4471
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/int_muldiv_shim.sv
4572
../hw/rtl/cpu_and_mem/cpu/ma_stage/load_unit.sv
73+
../hw/rtl/cpu_and_mem/cpu/tomasulo/load_queue/lq_l0_cache.sv
4674
../hw/rtl/cpu_and_mem/cpu/tomasulo/load_queue/load_queue.sv
4775
../hw/rtl/cpu_and_mem/cpu/ex_stage/alu/divider.sv
4876
../hw/rtl/cpu_and_mem/cpu/ex_stage/dsp_tiled_multiplier_unsigned.sv
4977
../hw/rtl/cpu_and_mem/cpu/ex_stage/alu/multiplier.sv
5078
../hw/rtl/cpu_and_mem/cpu/ex_stage/alu/alu.sv
79+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_lzc.sv
80+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify_operand.sv
81+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_operand_unpacker.sv
82+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_subnorm_shift.sv
83+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_result_assembler.sv
84+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_sign_inject.sv
85+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_classify.sv
86+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_compare.sv
87+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_convert.sv
88+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_convert_sd.sv
89+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_adder.sv
90+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_multiplier.sv
91+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_divider.sv
92+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_sqrt.sv
93+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fp_fma.sv
94+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_adder_unit.sv
95+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_mult_unit.sv
96+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_fma_unit.sv
97+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_compare_unit.sv
98+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_sign_inject_unit.sv
99+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_classify_unit.sv
100+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_div_sqrt_unit.sv
101+
../hw/rtl/cpu_and_mem/cpu/ex_stage/fpu/fpu_convert_unit.sv
102+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_add_shim.sv
103+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_mul_shim.sv
104+
../hw/rtl/cpu_and_mem/cpu/tomasulo/fu_shims/fp_div_shim.sv
51105
../hw/rtl/cpu_and_mem/cpu/tomasulo/tomasulo_wrapper/tomasulo_wrapper.sv

0 commit comments

Comments
 (0)