diff --git a/hw/Makefile b/hw/Makefile
index 89f783bfc4e55a28f359a6acb0fbee1edea2618a..6e3b21a1dd5e493003ff2b8d9fe45cb8d905f26d 100644
--- a/hw/Makefile
+++ b/hw/Makefile
@@ -7,8 +7,7 @@ TARGETS = main
 
 all: $(TARGETS)
 
-TESTS = srt-reciprocal-tb reciprocal-tb \
-	reg-file-tb reg-file-ice40-tb shift-unit-tb alu-unit-tb
+TESTS = reg-file-tb reg-file-ice40-tb shift-unit-tb alu-unit-tb
 
 check: all $(TESTS)
 	../run-tests $(TESTS)
@@ -25,7 +24,7 @@ clean:
 top-ice40-sim: top-ice40.vl cpu-all.vl reg-file-ice40.vl mem-mux.vl \
 	alu-unit.vl unary-unit.vl shift-unit.vl cnt-unit.vl \
 	mul-unit.vl reciprocal-unit.vl load-store-unit.vl \
-	instr-fetch.vl instr-decode.vl srt-reciprocal.vl \
+	instr-fetch.vl instr-decode.vl \
 	cpu.vl top-ice40-sim.vl \
 	ram-unit.vl avr109rx.vl avr109tx.vl tty-ice40.vl
 
@@ -42,7 +41,7 @@ random-bram.hex:
 top-ice40.json: top-ice40.vl cpu-all.vl reg-file-ice40.vl mem-mux.vl \
 	alu-unit.vl unary-unit.vl shift-unit.vl cnt-unit.vl \
 	mul-unit.vl reciprocal-unit.vl load-store-unit.vl \
-	instr-fetch.vl instr-decode.vl srt-reciprocal.vl \
+	instr-fetch.vl instr-decode.vl \
 	cpu.vl \
 	ram-unit.vl avr109rx.vl avr109tx.vl tty-ice40.vl random-bram.hex
 	yosys -q -p 'hierarchy -libdir arith/lib ; synth_ice40 -json top-ice40.json' \
@@ -67,8 +66,7 @@ logic-analyzer-example.asc: logic-analyzer-example.json txd.pcf
 	nextpnr-ice40 --hx8k --package ct256 \
 	--json $< --pcf txd.pcf --asc $@
 
-stats: srt-reciprocal.stats \
-	instr-fetch.stats instr-decode.stats \
+stats: instr-fetch.stats instr-decode.stats \
 	reg-file.stats reg-file-ice40.stats \
 	cnt-unit.stats alu-unit.stats mem-mux.stats \
 	unary-unit.stats shift-unit.stats mul-unit.stats \
@@ -78,16 +76,13 @@ stats: srt-reciprocal.stats \
 %.stats: instr-defines.vl %.vl
 	$(YOSYS_STATS) $^ -L $@
 
-srt-reciprocal.stats: srt-reciprocal.vl
 mul-unit.stats: STATS_FLAGS = -top mul_unit
 
-reciprocal-unit.stats: srt-reciprocal.vl reciprocal.vl
-
 tty-ice40.stats: avr109rx.vl avr109tx.vl
 
 cpu.stats: cpu-all.vl reg-file-ice40.vl mem-mux.vl \
 	alu-unit.vl unary-unit.vl shift-unit.vl cnt-unit.vl \
 	mul-unit.vl reciprocal-unit.vl load-store-unit.vl \
-	instr-fetch.vl instr-decode.vl srt-reciprocal.vl \
+	instr-fetch.vl instr-decode.vl \
 	cpu.vl ram-unit.vl
 	$(YOSYS_STATS) $< > $@T && mv $@T $@
diff --git a/hw/arith/.gitignore b/hw/arith/.gitignore
index 31b6ba250917aa3cb6914879ca278521ee1305af..ae69e148210997bc0a4ef7f3e056b50a17729df3 100644
--- a/hw/arith/.gitignore
+++ b/hw/arith/.gitignore
@@ -17,4 +17,6 @@
 /popc-test
 /umul4-test
 /umul8-test
+/reciprocal-test
+/srt_reciprocal-test
 /dadda-tree
diff --git a/hw/arith/Makefile b/hw/arith/Makefile
index b810b9a523e9d1db09789470c943f6fd8971c0d2..59b76dd1652699dfe8beae5564bdbe8a14e13bd9 100644
--- a/hw/arith/Makefile
+++ b/hw/arith/Makefile
@@ -9,7 +9,8 @@ TESTS = add_ha-test add_fa-test add_bk4-test add_bk8-test add_bk8s-test \
 	add_h64-test add_bk16-test carry_only-test \
 	umul4-test umul8-test ctz-test popc-test genmask-test \
 	mul3_stage-test mul4_stage-test mul6_stage-test \
-	mul_3w64-test mul_4w64-test mul_6w64-test
+	mul_3w64-test mul_4w64-test mul_6w64-test \
+	reciprocal-test srt_reciprocal-test
 
 all: $(TARGETS)
 
diff --git a/hw/reciprocal.vl b/hw/arith/lib/reciprocal.v
similarity index 100%
rename from hw/reciprocal.vl
rename to hw/arith/lib/reciprocal.v
diff --git a/hw/srt-reciprocal.vl b/hw/arith/lib/srt_reciprocal.v
similarity index 100%
rename from hw/srt-reciprocal.vl
rename to hw/arith/lib/srt_reciprocal.v
diff --git a/hw/reciprocal-tb.vl b/hw/arith/reciprocal-test.v
similarity index 98%
rename from hw/reciprocal-tb.vl
rename to hw/arith/reciprocal-test.v
index b95b68125c27e4fe6ec7b1cb02f42ce144248370..43a28c641197d300803bdfcaff2b4cfdb888ffe1 100644
--- a/hw/reciprocal-tb.vl
+++ b/hw/arith/reciprocal-test.v
@@ -14,8 +14,6 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-`include "reciprocal.vl"
-
 module main;
    reg [63:0] d;
    wire [63:0] v;
diff --git a/hw/srt-reciprocal-tb.vl b/hw/arith/srt_reciprocal-test.v
similarity index 99%
rename from hw/srt-reciprocal-tb.vl
rename to hw/arith/srt_reciprocal-test.v
index b3a2d95a65059fd65d667e6162da870037956845..28c57ad83130a801bfaf5fede059be5310bce5fc 100644
--- a/hw/srt-reciprocal-tb.vl
+++ b/hw/arith/srt_reciprocal-test.v
@@ -14,8 +14,6 @@
    along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */
 
-`include "srt-reciprocal.vl"
-
 module main;
    parameter n = 64;
 
diff --git a/hw/cpu-all.vl b/hw/cpu-all.vl
index 543f42e4bab46b2a7d6aee430135d8517bf8955b..a6a30b446138b703dad70757f5b7530d9491ca43 100644
--- a/hw/cpu-all.vl
+++ b/hw/cpu-all.vl
@@ -30,5 +30,4 @@
 `include "load-store-unit.vl"
 `include "instr-decode.vl"
 `include "instr-fetch.vl"
-`include "srt-reciprocal.vl"
 `include "cpu.vl"