Last active
December 8, 2018 10:31
-
-
Save dadeba/911e1e12fe277f7832903c97d9bf59bf to your computer and use it in GitHub Desktop.
pipelined FPMUL
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
module FPMUL( // @[:@3.2] | |
input clock, // @[:@4.4] | |
input reset, // @[:@5.4] | |
input [31:0] io_x, // @[:@6.4] | |
input [31:0] io_y, // @[:@6.4] | |
output [31:0] io_z // @[:@6.4] | |
); | |
wire [7:0] _T_12; // @[FPBASE.scala 16:27:@9.4] | |
wire _T_14; // @[FPBASE.scala 27:17:@10.4] | |
wire [31:0] _T_18; // @[FPBASE.scala 13:33:@15.6] | |
wire [32:0] _T_20; // @[FPBASE.scala 13:39:@16.6] | |
wire [32:0] _T_21; // @[FPBASE.scala 13:39:@17.6] | |
wire [31:0] _T_22; // @[FPBASE.scala 13:39:@18.6] | |
wire [31:0] _T_23; // @[FPBASE.scala 20:30:@19.6] | |
wire [31:0] _T_26; // @[FPBASE.scala 20:35:@21.6] | |
wire [31:0] _GEN_0; // @[FPBASE.scala 27:26:@11.4] | |
wire signx; // @[FPBASE.scala 15:28:@24.4] | |
wire [7:0] _T_28; // @[FPBASE.scala 16:27:@27.4] | |
wire _T_30; // @[FPBASE.scala 27:17:@28.4] | |
wire [31:0] _T_39; // @[FPBASE.scala 20:30:@37.6] | |
wire [31:0] _T_42; // @[FPBASE.scala 20:35:@39.6] | |
wire [31:0] _GEN_1; // @[FPBASE.scala 27:26:@29.4] | |
wire signy; // @[FPBASE.scala 15:28:@42.4] | |
wire [7:0] _T_45; // @[FPBASE.scala 13:33:@45.4] | |
wire [8:0] _T_47; // @[FPBASE.scala 13:39:@46.4] | |
wire [8:0] _T_48; // @[FPBASE.scala 13:39:@47.4] | |
wire [7:0] bias; // @[FPBASE.scala 13:39:@48.4] | |
wire [8:0] expx0; // @[FPMUL.scala 100:20:@54.4 FPMUL.scala 103:9:@56.4] | |
wire [8:0] expy0; // @[FPMUL.scala 101:20:@55.4 FPMUL.scala 104:9:@57.4] | |
wire [9:0] _T_58; // @[FPMUL.scala 105:19:@58.4] | |
wire [8:0] expzz0; // @[FPMUL.scala 105:19:@59.4] | |
wire [8:0] _GEN_6; // @[FPMUL.scala 108:19:@62.4] | |
wire [9:0] _T_61; // @[FPMUL.scala 108:19:@62.4] | |
wire [9:0] _T_62; // @[FPMUL.scala 108:19:@63.4] | |
wire [8:0] _T_63; // @[FPMUL.scala 108:19:@64.4] | |
wire [7:0] expz0; // @[FPMUL.scala 107:19:@61.4 FPMUL.scala 108:9:@65.4] | |
wire [8:0] _T_66; // @[FPMUL.scala 111:19:@67.4] | |
reg _T_69; // @[FPBASE.scala 175:36:@70.4] | |
reg [31:0] _RAND_0; | |
reg _T_71; // @[FPBASE.scala 175:28:@72.4] | |
reg [31:0] _RAND_1; | |
reg _T_73; // @[FPBASE.scala 175:20:@74.4] | |
reg [31:0] _RAND_2; | |
reg signz_r; // @[FPBASE.scala 175:12:@76.4] | |
reg [31:0] _RAND_3; | |
reg [7:0] _T_76; // @[FPBASE.scala 171:28:@78.4] | |
reg [31:0] _RAND_4; | |
reg [7:0] _T_78; // @[FPBASE.scala 171:20:@80.4] | |
reg [31:0] _RAND_5; | |
reg [7:0] expz0_r; // @[FPBASE.scala 171:12:@82.4] | |
reg [31:0] _RAND_6; | |
reg [7:0] _T_81; // @[FPBASE.scala 171:28:@84.4] | |
reg [31:0] _RAND_7; | |
reg [7:0] _T_83; // @[FPBASE.scala 171:20:@86.4] | |
reg [31:0] _RAND_8; | |
reg [7:0] expz0p_r; // @[FPBASE.scala 171:12:@88.4] | |
reg [31:0] _RAND_9; | |
reg _T_91; // @[FPBASE.scala 171:28:@93.4] | |
reg [31:0] _RAND_10; | |
reg _T_93; // @[FPBASE.scala 171:20:@95.4] | |
reg [31:0] _RAND_11; | |
reg zero_r; // @[FPBASE.scala 171:12:@97.4] | |
reg [31:0] _RAND_12; | |
wire [23:0] manx; // @[FPBASE.scala 26:23:@8.4 FPBASE.scala 28:15:@12.6 FPBASE.scala 30:15:@22.6] | |
wire [11:0] _T_96; // @[FPMUL.scala 51:15:@100.4] | |
wire [23:0] many; // @[FPBASE.scala 26:23:@26.4 FPBASE.scala 28:15:@30.6 FPBASE.scala 30:15:@40.6] | |
wire [11:0] _T_97; // @[FPMUL.scala 52:15:@101.4] | |
wire [11:0] _T_98; // @[FPMUL.scala 53:15:@102.4] | |
wire [11:0] _T_99; // @[FPMUL.scala 54:15:@103.4] | |
reg [23:0] _T_102; // @[FPMUL.scala 56:21:@105.4] | |
reg [31:0] _RAND_13; | |
reg [23:0] _T_105; // @[FPMUL.scala 57:21:@108.4] | |
reg [31:0] _RAND_14; | |
reg [23:0] _T_108; // @[FPMUL.scala 58:21:@111.4] | |
reg [31:0] _RAND_15; | |
reg [23:0] _T_111; // @[FPMUL.scala 59:21:@114.4] | |
reg [31:0] _RAND_16; | |
wire [47:0] _GEN_7; // @[FPMUL.scala 69:17:@123.4] | |
wire [47:0] _T_126; // @[FPMUL.scala 69:17:@123.4] | |
wire [35:0] _GEN_8; // @[FPMUL.scala 70:17:@125.4] | |
wire [35:0] _T_127; // @[FPMUL.scala 70:17:@125.4] | |
wire [35:0] _GEN_9; // @[FPMUL.scala 71:17:@127.4] | |
wire [35:0] _T_128; // @[FPMUL.scala 71:17:@127.4] | |
wire [47:0] _T_115; // @[FPMUL.scala 62:21:@117.4 FPMUL.scala 70:11:@126.4] | |
wire [48:0] _T_129; // @[FPMUL.scala 74:28:@130.4] | |
reg [47:0] _T_132; // @[FPMUL.scala 74:21:@132.4] | |
reg [63:0] _RAND_17; | |
wire [47:0] _T_117; // @[FPMUL.scala 63:21:@118.4 FPMUL.scala 71:11:@128.4] | |
wire [47:0] _T_119; // @[FPMUL.scala 64:21:@119.4 FPMUL.scala 72:11:@129.4] | |
wire [48:0] _T_133; // @[FPMUL.scala 75:28:@135.4] | |
reg [47:0] _T_136; // @[FPMUL.scala 75:21:@137.4] | |
reg [63:0] _RAND_18; | |
wire [48:0] _T_137; // @[FPMUL.scala 77:26:@140.4] | |
reg [47:0] m; // @[FPMUL.scala 77:19:@142.4] | |
reg [63:0] _RAND_19; | |
wire _T_144; // @[FPMUL.scala 139:10:@149.4] | |
wire [23:0] _T_147; // @[FPMUL.scala 140:12:@152.6] | |
wire [23:0] _T_148; // @[FPMUL.scala 141:14:@154.6] | |
wire _T_150; // @[FPMUL.scala 141:32:@155.6] | |
wire [23:0] _T_151; // @[FPMUL.scala 144:12:@160.6] | |
wire [22:0] _T_152; // @[FPMUL.scala 145:14:@162.6] | |
wire _T_154; // @[FPMUL.scala 145:32:@163.6] | |
wire [23:0] mm; // @[FPMUL.scala 139:29:@151.4] | |
wire rbit; // @[FPMUL.scala 139:29:@151.4] | |
wire [7:0] expz; // @[FPMUL.scala 139:29:@151.4] | |
wire [22:0] _T_155; // @[FPMUL.scala 148:16:@167.4] | |
wire [22:0] _GEN_10; // @[FPMUL.scala 148:27:@168.4] | |
wire [22:0] manz; // @[FPMUL.scala 148:27:@168.4] | |
wire [8:0] _T_156; // @[Cat.scala 30:58:@169.4] | |
wire [31:0] res_normal; // @[Cat.scala 30:58:@170.4] | |
reg [31:0] _T_160; // @[FPMUL.scala 159:18:@178.4] | |
reg [31:0] _RAND_20; | |
assign _T_12 = io_x[30:23]; // @[FPBASE.scala 16:27:@9.4] | |
assign _T_14 = _T_12 == 8'h0; // @[FPBASE.scala 27:17:@10.4] | |
assign _T_18 = 32'h1 << 5'h18; // @[FPBASE.scala 13:33:@15.6] | |
assign _T_20 = _T_18 - 32'h1; // @[FPBASE.scala 13:39:@16.6] | |
assign _T_21 = $unsigned(_T_20); // @[FPBASE.scala 13:39:@17.6] | |
assign _T_22 = _T_21[31:0]; // @[FPBASE.scala 13:39:@18.6] | |
assign _T_23 = _T_22 & io_x; // @[FPBASE.scala 20:30:@19.6] | |
assign _T_26 = _T_23 | 32'h800000; // @[FPBASE.scala 20:35:@21.6] | |
assign _GEN_0 = _T_14 ? 32'h0 : _T_26; // @[FPBASE.scala 27:26:@11.4] | |
assign signx = io_x[31]; // @[FPBASE.scala 15:28:@24.4] | |
assign _T_28 = io_y[30:23]; // @[FPBASE.scala 16:27:@27.4] | |
assign _T_30 = _T_28 == 8'h0; // @[FPBASE.scala 27:17:@28.4] | |
assign _T_39 = _T_22 & io_y; // @[FPBASE.scala 20:30:@37.6] | |
assign _T_42 = _T_39 | 32'h800000; // @[FPBASE.scala 20:35:@39.6] | |
assign _GEN_1 = _T_30 ? 32'h0 : _T_42; // @[FPBASE.scala 27:26:@29.4] | |
assign signy = io_y[31]; // @[FPBASE.scala 15:28:@42.4] | |
assign _T_45 = 8'h1 << 3'h7; // @[FPBASE.scala 13:33:@45.4] | |
assign _T_47 = _T_45 - 8'h1; // @[FPBASE.scala 13:39:@46.4] | |
assign _T_48 = $unsigned(_T_47); // @[FPBASE.scala 13:39:@47.4] | |
assign bias = _T_48[7:0]; // @[FPBASE.scala 13:39:@48.4] | |
assign expx0 = {{1'd0}, _T_12}; // @[FPMUL.scala 100:20:@54.4 FPMUL.scala 103:9:@56.4] | |
assign expy0 = {{1'd0}, _T_28}; // @[FPMUL.scala 101:20:@55.4 FPMUL.scala 104:9:@57.4] | |
assign _T_58 = expx0 + expy0; // @[FPMUL.scala 105:19:@58.4] | |
assign expzz0 = _T_58[8:0]; // @[FPMUL.scala 105:19:@59.4] | |
assign _GEN_6 = {{1'd0}, bias}; // @[FPMUL.scala 108:19:@62.4] | |
assign _T_61 = expzz0 - _GEN_6; // @[FPMUL.scala 108:19:@62.4] | |
assign _T_62 = $unsigned(_T_61); // @[FPMUL.scala 108:19:@63.4] | |
assign _T_63 = _T_62[8:0]; // @[FPMUL.scala 108:19:@64.4] | |
assign expz0 = _T_63[7:0]; // @[FPMUL.scala 107:19:@61.4 FPMUL.scala 108:9:@65.4] | |
assign _T_66 = expz0 + 8'h1; // @[FPMUL.scala 111:19:@67.4] | |
assign manx = _GEN_0[23:0]; // @[FPBASE.scala 26:23:@8.4 FPBASE.scala 28:15:@12.6 FPBASE.scala 30:15:@22.6] | |
assign _T_96 = manx[23:12]; // @[FPMUL.scala 51:15:@100.4] | |
assign many = _GEN_1[23:0]; // @[FPBASE.scala 26:23:@26.4 FPBASE.scala 28:15:@30.6 FPBASE.scala 30:15:@40.6] | |
assign _T_97 = many[23:12]; // @[FPMUL.scala 52:15:@101.4] | |
assign _T_98 = manx[11:0]; // @[FPMUL.scala 53:15:@102.4] | |
assign _T_99 = many[11:0]; // @[FPMUL.scala 54:15:@103.4] | |
assign _GEN_7 = {{24'd0}, _T_102}; // @[FPMUL.scala 69:17:@123.4] | |
assign _T_126 = _GEN_7 << 24; // @[FPMUL.scala 69:17:@123.4] | |
assign _GEN_8 = {{12'd0}, _T_105}; // @[FPMUL.scala 70:17:@125.4] | |
assign _T_127 = _GEN_8 << 12; // @[FPMUL.scala 70:17:@125.4] | |
assign _GEN_9 = {{12'd0}, _T_108}; // @[FPMUL.scala 71:17:@127.4] | |
assign _T_128 = _GEN_9 << 12; // @[FPMUL.scala 71:17:@127.4] | |
assign _T_115 = {{12'd0}, _T_127}; // @[FPMUL.scala 62:21:@117.4 FPMUL.scala 70:11:@126.4] | |
assign _T_129 = _T_126 + _T_115; // @[FPMUL.scala 74:28:@130.4] | |
assign _T_117 = {{12'd0}, _T_128}; // @[FPMUL.scala 63:21:@118.4 FPMUL.scala 71:11:@128.4] | |
assign _T_119 = {{24'd0}, _T_111}; // @[FPMUL.scala 64:21:@119.4 FPMUL.scala 72:11:@129.4] | |
assign _T_133 = _T_117 + _T_119; // @[FPMUL.scala 75:28:@135.4] | |
assign _T_137 = _T_132 + _T_136; // @[FPMUL.scala 77:26:@140.4] | |
assign _T_144 = m[47]; // @[FPMUL.scala 139:10:@149.4] | |
assign _T_147 = m[47:24]; // @[FPMUL.scala 140:12:@152.6] | |
assign _T_148 = m[23:0]; // @[FPMUL.scala 141:14:@154.6] | |
assign _T_150 = _T_148 != 24'h0; // @[FPMUL.scala 141:32:@155.6] | |
assign _T_151 = m[46:23]; // @[FPMUL.scala 144:12:@160.6] | |
assign _T_152 = m[22:0]; // @[FPMUL.scala 145:14:@162.6] | |
assign _T_154 = _T_152 != 23'h0; // @[FPMUL.scala 145:32:@163.6] | |
assign mm = _T_144 ? _T_147 : _T_151; // @[FPMUL.scala 139:29:@151.4] | |
assign rbit = _T_144 ? _T_150 : _T_154; // @[FPMUL.scala 139:29:@151.4] | |
assign expz = _T_144 ? expz0p_r : expz0_r; // @[FPMUL.scala 139:29:@151.4] | |
assign _T_155 = mm[22:0]; // @[FPMUL.scala 148:16:@167.4] | |
assign _GEN_10 = {{22'd0}, rbit}; // @[FPMUL.scala 148:27:@168.4] | |
assign manz = _T_155 | _GEN_10; // @[FPMUL.scala 148:27:@168.4] | |
assign _T_156 = {signz_r,expz}; // @[Cat.scala 30:58:@169.4] | |
assign res_normal = {_T_156,manz}; // @[Cat.scala 30:58:@170.4] | |
assign io_z = _T_160; // @[FPMUL.scala 159:8:@180.4] | |
`ifdef RANDOMIZE_GARBAGE_ASSIGN | |
`define RANDOMIZE | |
`endif | |
`ifdef RANDOMIZE_INVALID_ASSIGN | |
`define RANDOMIZE | |
`endif | |
`ifdef RANDOMIZE_REG_INIT | |
`define RANDOMIZE | |
`endif | |
`ifdef RANDOMIZE_MEM_INIT | |
`define RANDOMIZE | |
`endif | |
`ifndef RANDOM | |
`define RANDOM $random | |
`endif | |
`ifdef RANDOMIZE | |
integer initvar; | |
initial begin | |
`ifdef INIT_RANDOM | |
`INIT_RANDOM | |
`endif | |
`ifndef VERILATOR | |
`ifdef RANDOMIZE_DELAY | |
#`RANDOMIZE_DELAY begin end | |
`else | |
#0.002 begin end | |
`endif | |
`endif | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_0 = {1{`RANDOM}}; | |
_T_69 = _RAND_0[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_1 = {1{`RANDOM}}; | |
_T_71 = _RAND_1[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_2 = {1{`RANDOM}}; | |
_T_73 = _RAND_2[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_3 = {1{`RANDOM}}; | |
signz_r = _RAND_3[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_4 = {1{`RANDOM}}; | |
_T_76 = _RAND_4[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_5 = {1{`RANDOM}}; | |
_T_78 = _RAND_5[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_6 = {1{`RANDOM}}; | |
expz0_r = _RAND_6[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_7 = {1{`RANDOM}}; | |
_T_81 = _RAND_7[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_8 = {1{`RANDOM}}; | |
_T_83 = _RAND_8[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_9 = {1{`RANDOM}}; | |
expz0p_r = _RAND_9[7:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_10 = {1{`RANDOM}}; | |
_T_91 = _RAND_10[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_11 = {1{`RANDOM}}; | |
_T_93 = _RAND_11[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_12 = {1{`RANDOM}}; | |
zero_r = _RAND_12[0:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_13 = {1{`RANDOM}}; | |
_T_102 = _RAND_13[23:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_14 = {1{`RANDOM}}; | |
_T_105 = _RAND_14[23:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_15 = {1{`RANDOM}}; | |
_T_108 = _RAND_15[23:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_16 = {1{`RANDOM}}; | |
_T_111 = _RAND_16[23:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_17 = {2{`RANDOM}}; | |
_T_132 = _RAND_17[47:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_18 = {2{`RANDOM}}; | |
_T_136 = _RAND_18[47:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_19 = {2{`RANDOM}}; | |
m = _RAND_19[47:0]; | |
`endif // RANDOMIZE_REG_INIT | |
`ifdef RANDOMIZE_REG_INIT | |
_RAND_20 = {1{`RANDOM}}; | |
_T_160 = _RAND_20[31:0]; | |
`endif // RANDOMIZE_REG_INIT | |
end | |
`endif // RANDOMIZE | |
always @(posedge clock) begin | |
_T_69 <= signx ^ signy; | |
_T_71 <= _T_69; | |
_T_73 <= _T_71; | |
signz_r <= _T_73; | |
_T_76 <= _T_63[7:0]; | |
_T_78 <= _T_76; | |
expz0_r <= _T_78; | |
_T_81 <= _T_66[7:0]; | |
_T_83 <= _T_81; | |
expz0p_r <= _T_83; | |
_T_91 <= _T_14 | _T_30; | |
_T_93 <= _T_91; | |
zero_r <= _T_93; | |
_T_102 <= _T_96 * _T_97; | |
_T_105 <= _T_96 * _T_99; | |
_T_108 <= _T_98 * _T_97; | |
_T_111 <= _T_98 * _T_99; | |
_T_132 <= _T_129[47:0]; | |
_T_136 <= _T_133[47:0]; | |
m <= _T_137[47:0]; | |
if (zero_r) begin | |
_T_160 <= 32'h0; | |
end else begin | |
_T_160 <= res_normal; | |
end | |
end | |
endmodule |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment