diff options
| author | Alejandro Soto <alejandro@34project.org> | 2024-04-27 11:45:23 -0600 |
|---|---|---|
| committer | Alejandro Soto <alejandro@34project.org> | 2024-04-27 11:45:23 -0600 |
| commit | 45b5eabe868ac2f8a755379bde07c102caf74afb (patch) | |
| tree | 7b740cbc6b19b46d731e29ee145c2a8ad744e847 /rtl/fpu/float/fp_unit.sv | |
| parent | a61ee4b16157f3c6501d958b8dcde7f57f41110d (diff) | |
rtl/fpu: initial commit
Imported from https://github.com/taneroksuz/fpu-sp
Diffstat (limited to '')
| -rw-r--r-- | rtl/fpu/float/fp_unit.sv | 191 |
1 files changed, 191 insertions, 0 deletions
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 |
