Skip to content

Instantly share code, notes, and snippets.

@dadeba
Last active December 8, 2018 10:31
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save dadeba/911e1e12fe277f7832903c97d9bf59bf to your computer and use it in GitHub Desktop.
Save dadeba/911e1e12fe277f7832903c97d9bf59bf to your computer and use it in GitHub Desktop.
pipelined FPMUL
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