From 45b5eabe868ac2f8a755379bde07c102caf74afb Mon Sep 17 00:00:00 2001 From: Alejandro Soto Date: Sat, 27 Apr 2024 11:45:23 -0600 Subject: rtl/fpu: initial commit Imported from https://github.com/taneroksuz/fpu-sp --- rtl/fpu/float/fp_unit.sv | 191 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 191 insertions(+) create mode 100644 rtl/fpu/float/fp_unit.sv (limited to 'rtl/fpu/float/fp_unit.sv') diff --git a/rtl/fpu/float/fp_unit.sv b/rtl/fpu/float/fp_unit.sv new file mode 100644 index 0000000..71ddf14 --- /dev/null +++ b/rtl/fpu/float/fp_unit.sv @@ -0,0 +1,191 @@ +// https://github.com/taneroksuz/fpu-sp + +import lzc_wire::*; +import fp_wire::*; + +module fp_unit ( + input reset, + input clock, + input fp_unit_in_type fp_unit_i, + output fp_unit_out_type fp_unit_o +); + + lzc_64_in_type lzc1_64_i; + lzc_64_out_type lzc1_64_o; + lzc_64_in_type lzc2_64_i; + lzc_64_out_type lzc2_64_o; + lzc_64_in_type lzc3_64_i; + lzc_64_out_type lzc3_64_o; + lzc_64_in_type lzc4_64_i; + lzc_64_out_type lzc4_64_o; + + lzc_256_in_type lzc_256_i; + lzc_256_out_type lzc_256_o; + + fp_ext_in_type fp_ext1_i; + fp_ext_out_type fp_ext1_o; + fp_ext_in_type fp_ext2_i; + fp_ext_out_type fp_ext2_o; + fp_ext_in_type fp_ext3_i; + fp_ext_out_type fp_ext3_o; + + fp_cmp_in_type fp_cmp_i; + fp_cmp_out_type fp_cmp_o; + fp_max_in_type fp_max_i; + fp_max_out_type fp_max_o; + fp_sgnj_in_type fp_sgnj_i; + fp_sgnj_out_type fp_sgnj_o; + fp_fma_in_type fp_fma_i; + fp_fma_out_type fp_fma_o; + fp_rnd_in_type fp_rnd_i; + fp_rnd_out_type fp_rnd_o; + + fp_cvt_f2f_in_type fp_cvt_f2f_i; + fp_cvt_f2f_out_type fp_cvt_f2f_o; + fp_cvt_f2i_in_type fp_cvt_f2i_i; + fp_cvt_f2i_out_type fp_cvt_f2i_o; + fp_cvt_i2f_in_type fp_cvt_i2f_i; + fp_cvt_i2f_out_type fp_cvt_i2f_o; + + fp_mac_in_type fp_mac_i; + fp_mac_out_type fp_mac_o; + fp_fdiv_in_type fp_fdiv_i; + fp_fdiv_out_type fp_fdiv_o; + + lzc_64 lzc_64_comp_1 ( + .a(lzc1_64_i.a), + .c(lzc1_64_o.c), + .v(lzc1_64_o.v) + ); + + lzc_64 lzc_64_comp_2 ( + .a(lzc2_64_i.a), + .c(lzc2_64_o.c), + .v(lzc2_64_o.v) + ); + + lzc_64 lzc_64_comp_3 ( + .a(lzc3_64_i.a), + .c(lzc3_64_o.c), + .v(lzc3_64_o.v) + ); + + lzc_64 lzc_64_comp_4 ( + .a(lzc4_64_i.a), + .c(lzc4_64_o.c), + .v(lzc4_64_o.v) + ); + + lzc_256 lzc_256_comp ( + .a(lzc_256_i.a), + .c(lzc_256_o.c), + .v(lzc_256_o.v) + ); + + fp_ext fp_ext_comp_1 ( + .fp_ext_i(fp_ext1_i), + .fp_ext_o(fp_ext1_o), + .lzc_o(lzc1_64_o), + .lzc_i(lzc1_64_i) + ); + + fp_ext fp_ext_comp_2 ( + .fp_ext_i(fp_ext2_i), + .fp_ext_o(fp_ext2_o), + .lzc_o(lzc2_64_o), + .lzc_i(lzc2_64_i) + ); + + fp_ext fp_ext_comp_3 ( + .fp_ext_i(fp_ext3_i), + .fp_ext_o(fp_ext3_o), + .lzc_o(lzc3_64_o), + .lzc_i(lzc3_64_i) + ); + + fp_cmp fp_cmp_comp ( + .fp_cmp_i(fp_cmp_i), + .fp_cmp_o(fp_cmp_o) + ); + + fp_max fp_max_comp ( + .fp_max_i(fp_max_i), + .fp_max_o(fp_max_o) + ); + + fp_sgnj fp_sgnj_comp ( + .fp_sgnj_i(fp_sgnj_i), + .fp_sgnj_o(fp_sgnj_o) + ); + + fp_cvt fp_cvt_comp ( + .fp_cvt_f2f_i(fp_cvt_f2f_i), + .fp_cvt_f2f_o(fp_cvt_f2f_o), + .fp_cvt_f2i_i(fp_cvt_f2i_i), + .fp_cvt_f2i_o(fp_cvt_f2i_o), + .fp_cvt_i2f_i(fp_cvt_i2f_i), + .fp_cvt_i2f_o(fp_cvt_i2f_o), + .lzc_o(lzc4_64_o), + .lzc_i(lzc4_64_i) + ); + + fp_fma fp_fma_comp ( + .reset(reset), + .clock(clock), + .fp_fma_i(fp_fma_i), + .fp_fma_o(fp_fma_o), + .lzc_o(lzc_256_o), + .lzc_i(lzc_256_i) + ); + + fp_mac fp_mac_comp ( + .reset(reset), + .clock(clock), + .fp_mac_i(fp_mac_i), + .fp_mac_o(fp_mac_o) + ); + + fp_fdiv fp_fdiv_comp ( + .reset(reset), + .clock(clock), + .fp_fdiv_i(fp_fdiv_i), + .fp_fdiv_o(fp_fdiv_o), + .fp_mac_o(fp_mac_o), + .fp_mac_i(fp_mac_i) + ); + + fp_rnd fp_rnd_comp ( + .fp_rnd_i(fp_rnd_i), + .fp_rnd_o(fp_rnd_o) + ); + + fp_exe fp_exe_comp ( + .fp_exe_i(fp_unit_i.fp_exe_i), + .fp_exe_o(fp_unit_o.fp_exe_o), + .fp_ext1_o(fp_ext1_o), + .fp_ext1_i(fp_ext1_i), + .fp_ext2_o(fp_ext2_o), + .fp_ext2_i(fp_ext2_i), + .fp_ext3_o(fp_ext3_o), + .fp_ext3_i(fp_ext3_i), + .fp_cmp_o(fp_cmp_o), + .fp_cmp_i(fp_cmp_i), + .fp_max_o(fp_max_o), + .fp_max_i(fp_max_i), + .fp_sgnj_o(fp_sgnj_o), + .fp_sgnj_i(fp_sgnj_i), + .fp_cvt_f2f_i(fp_cvt_f2f_i), + .fp_cvt_f2f_o(fp_cvt_f2f_o), + .fp_cvt_f2i_i(fp_cvt_f2i_i), + .fp_cvt_f2i_o(fp_cvt_f2i_o), + .fp_cvt_i2f_i(fp_cvt_i2f_i), + .fp_cvt_i2f_o(fp_cvt_i2f_o), + .fp_fma_o(fp_fma_o), + .fp_fma_i(fp_fma_i), + .fp_fdiv_o(fp_fdiv_o), + .fp_fdiv_i(fp_fdiv_i), + .fp_rnd_o(fp_rnd_o), + .fp_rnd_i(fp_rnd_i) + ); + +endmodule -- cgit v1.2.3