标签:
1.lut乘法器:
ab = ( ( a + b )2 )/4 - ( ( a - b )2 )/4
(一)取得 I1,取得 I2。
I1 <= { A[7], A } + { B[7], B }; // C =A + B;
I2 <= { A[7], A } + { ~B[7], ( ~B + 1‘b1 ) }; // C = A - B;
(二)正值化 I1 和 I2。
I1 <= I1[8] ? ( ~I1 + 1‘b1 ) : I1;
I2 <= I2[8] ? ( ~I2 + 1‘b1 ) : I2;
(三)正值化后的 I1 和 I2 送往查表。
首先必须建立一个0-255的查表模块
module lut_module ( input clk, input rst_n, input [7:0] addr, output [15:0] q ); //---------------- reg [15:0] rq; always@(posedge clk or negedge rst_n) if(!rst_n) rq <= 16‘d0; else case (addr) 0,1 : rq <= 16‘d0; 2 : rq <= 16‘d1; 3 : rq <= 16‘d2; 4 : rq <= 16‘d4; 5 : rq <= 16‘d6; 6 : rq <= 16‘d9; 7 : rq <= 16‘d12; 8 : rq <= 16‘d16; 9 : rq <= 16‘d20; 10 : rq <= 16‘d25; 11 : rq <= 16‘d30; 12 : rq <= 16‘d36; 13 : rq <= 16‘d42; 14 : rq <= 16‘d49; 15 : rq <= 16‘d56; 16 : rq <= 16‘d64; 17 : rq <= 16‘d72; 18 : rq <= 16‘d81; 19 : rq <= 16‘d90; 20 : rq <= 16‘d100; 21 : rq <= 16‘d110; 22 : rq <= 16‘d121; 23 : rq <= 16‘d132; 24 : rq <= 16‘d144; 25 : rq <= 16‘d156; 26 : rq <= 16‘d169; 27 : rq <= 16‘d182; 28 : rq <= 16‘d196; 29 : rq <= 16‘d210; 30 : rq <= 16‘d225; 31 : rq <= 16‘d240; 32 : rq <= 16‘d256; 33 : rq <= 16‘d272; 34 : rq <= 16‘d289; 35 : rq <= 16‘d306; 36 : rq <= 16‘d324; 37 : rq <= 16‘d342; 38 : rq <= 16‘d361; 39 : rq <= 16‘d380; 40 : rq <= 16‘d400; 41 : rq <= 16‘d420; 42 : rq <= 16‘d441; 43 : rq <= 16‘d462; 44 : rq <= 16‘d484; 45 : rq <= 16‘d506; 46 : rq <= 16‘d529; 47 : rq <= 16‘d552; 48 : rq <= 16‘d576; 49 : rq <= 16‘d600; 50 : rq <= 16‘d625; 51 : rq <= 16‘d650; 52 : rq <= 16‘d676; 53 : rq <= 16‘d702; 54 : rq <= 16‘d729; 55 : rq <= 16‘d756; 56 : rq <= 16‘d784; 57 : rq <= 16‘d812; 58 : rq <= 16‘d841; 59 : rq <= 16‘d870; 60 : rq <= 16‘d900; 61 : rq <= 16‘d930; 62 : rq <= 16‘d961; 63 : rq <= 16‘d992; 64 : rq <= 16‘d1024; 65 : rq <= 16‘d1056; 66 : rq <= 16‘d1089; 67 : rq <= 16‘d1122; 68 : rq <= 16‘d1156; 69 : rq <= 16‘d1190; 70 : rq <= 16‘d1225; 71 : rq <= 16‘d1260; 72 : rq <= 16‘d1296; 73 : rq <= 16‘d1332; 74 : rq <= 16‘d1369; 75 : rq <= 16‘d1406; 76 : rq <= 16‘d1444; 77 : rq <= 16‘d1482; 78 : rq <= 16‘d1521; 79 : rq <= 16‘d1560; 80 : rq <= 16‘d1600; 81 : rq <= 16‘d1640; 82 : rq <= 16‘d1681; 83 : rq <= 16‘d1722; 84 : rq <= 16‘d1764; 85 : rq <= 16‘d1806; 86 : rq <= 16‘d1849; 87 : rq <= 16‘d1892; 88 : rq <= 16‘d1936; 89 : rq <= 16‘d1980; 90 : rq <= 16‘d2025; 91 : rq <= 16‘d2070; 92 : rq <= 16‘d2116; 93 : rq <= 16‘d2162; 94 : rq <= 16‘d2209; 95 : rq <= 16‘d2256; 96 : rq <= 16‘d2304; 97 : rq <= 16‘d2352; 98 : rq <= 16‘d2401; 99 : rq <= 16‘d2450; 100 : rq <= 16‘d2500; 101 : rq <= 16‘d2550; 102 : rq <= 16‘d2601; 103 : rq <= 16‘d2652; 104 : rq <= 16‘d2704; 105 : rq <= 16‘d2756; 106 : rq <= 16‘d2809; 107 : rq <= 16‘d2862; 108 : rq <= 16‘d2916; 109 : rq <= 16‘d2970; 110 : rq <= 16‘d3025; 111 : rq <= 16‘d3080; 112 : rq <= 16‘d3136; 113 : rq <= 16‘d3192; 114 : rq <= 16‘d3249; 115 : rq <= 16‘d3306; 116 : rq <= 16‘d3364; 117 : rq <= 16‘d3422; 118 : rq <= 16‘d3481; 119 : rq <= 16‘d3540; 120 : rq <= 16‘d3600; 121 : rq <= 16‘d3660; 122 : rq <= 16‘d3721; 123 : rq <= 16‘d3782; 124 : rq <= 16‘d3844; 125 : rq <= 16‘d3906; 126 : rq <= 16‘d3969; 127 : rq <= 16‘d4032; 128 : rq <= 16‘d4096; 129 : rq <= 16‘d4160; 130 : rq <= 16‘d4225; 131 : rq <= 16‘d4290; 132 : rq <= 16‘d4356; 133 : rq <= 16‘d4422; 134 : rq <= 16‘d4489; 135 : rq <= 16‘d4556; 136 : rq <= 16‘d4624; 137 : rq <= 16‘d4692; 138 : rq <= 16‘d4761; 139 : rq <= 16‘d4830; 140 : rq <= 16‘d4900; 141 : rq <= 16‘d4970; 142 : rq <= 16‘d5041; 143 : rq <= 16‘d5112; 144 : rq <= 16‘d5184; 145 : rq <= 16‘d5256; 146 : rq <= 16‘d5329; 147 : rq <= 16‘d5402; 148 : rq <= 16‘d5476; 149 : rq <= 16‘d5550; 150 : rq <= 16‘d5625; 151 : rq <= 16‘d5700; 152 : rq <= 16‘d5776; 153 : rq <= 16‘d5852; 154 : rq <= 16‘d5929; 155 : rq <= 16‘d6006; 156 : rq <= 16‘d6084; 157 : rq <= 16‘d6162; 158 : rq <= 16‘d6241; 159 : rq <= 16‘d6320; 160 : rq <= 16‘d6400; 161 : rq <= 16‘d6480; 162 : rq <= 16‘d6561; 163 : rq <= 16‘d6642; 164 : rq <= 16‘d6724; 165 : rq <= 16‘d6806; 166 : rq <= 16‘d6889; 167 : rq <= 16‘d6972; 168 : rq <= 16‘d7056; 169 : rq <= 16‘d7140; 170 : rq <= 16‘d7225; 171 : rq <= 16‘d7310; 172 : rq <= 16‘d7396; 173 : rq <= 16‘d7482; 174 : rq <= 16‘d7569; 175 : rq <= 16‘d7656; 176 : rq <= 16‘d7744; 177 : rq <= 16‘d7832; 178 : rq <= 16‘d7921; 179 : rq <= 16‘d8010; 180 : rq <= 16‘d8100; 181 : rq <= 16‘d8190; 182 : rq <= 16‘d8281; 183 : rq <= 16‘d8372; 184 : rq <= 16‘d8464; 185 : rq <= 16‘d8556; 186 : rq <= 16‘d8649; 187 : rq <= 16‘d8742; 188 : rq <= 16‘d8836; 189 : rq <= 16‘d8930; 190 : rq <= 16‘d9025; 191 : rq <= 16‘d9120; 192 : rq <= 16‘d9216; 193 : rq <= 16‘d9312; 194 : rq <= 16‘d9409; 195 : rq <= 16‘d9506; 196 : rq <= 16‘d9604; 197 : rq <= 16‘d9702; 198 : rq <= 16‘d9801; 199 : rq <= 16‘d9900; 200 : rq <= 16‘d10000; 201 : rq <= 16‘d10100; 202 : rq <= 16‘d10201; 203 : rq <= 16‘d10302; 204 : rq <= 16‘d10404; 205 : rq <= 16‘d10506; 206 : rq <= 16‘d10609; 207 : rq <= 16‘d10712; 208 : rq <= 16‘d10816; 209 : rq <= 16‘d10920; 210 : rq <= 16‘d11025; 211 : rq <= 16‘d11130; 212 : rq <= 16‘d11236; 213 : rq <= 16‘d11342; 214 : rq <= 16‘d11449; 215 : rq <= 16‘d11556; 216 : rq <= 16‘d11664; 217 : rq <= 16‘d11772; 218 : rq <= 16‘d11881; 219 : rq <= 16‘d11990; 220 : rq <= 16‘d12100; 221 : rq <= 16‘d12210; 222 : rq <= 16‘d12321; 223 : rq <= 16‘d12432; 224 : rq <= 16‘d12544; 225 : rq <= 16‘d12656; 226 : rq <= 16‘d12769; 227 : rq <= 16‘d12882; 228 : rq <= 16‘d12996; 229 : rq <= 16‘d13100; 230 : rq <= 16‘d13225; 231 : rq <= 16‘d13340; 232 : rq <= 16‘d13456; 233 : rq <= 16‘d13572; 234 : rq <= 16‘d13689; 235 : rq <= 16‘d13806; 236 : rq <= 16‘d13924; 237 : rq <= 16‘d14042; 238 : rq <= 16‘d14161; 239 : rq <= 16‘d14280; 240 : rq <= 16‘d14400; 241 : rq <= 16‘d14520; 242 : rq <= 16‘d14641; 243 : rq <= 16‘d14762; 244 : rq <= 16‘d14884; 245 : rq <= 16‘d15006; 246 : rq <= 16‘d15129; 247 : rq <= 16‘d15252; 248 : rq <= 16‘d15376; 249 : rq <= 16‘d15500; 250 : rq <= 16‘d15625; 251 : rq <= 16‘d15750; 252 : rq <= 16‘d15876; 253 : rq <= 16‘d16002; 254 : rq <= 16‘d16129; 255 : rq <= 16‘d16256; endcase //----------------- assign q = rq; endmodule
(四)取得查表结果 Q1_Sig 和 Q2_Sig 然后相减。
Data <= Q1_Sig + ( ~Q2_Sig + 1‘b1 ); i <= i + 1‘b1; end
(五)主module lut_multiplier_module 中需要注意的,调用时:
lut_module u1 ( .clk(clk), .addr(i1[1][7:0]), .q(q1_sig) ); lut_module u2( .clk(clk), .addr(i2[1][7:0]), .q(q2_sig) ); //------------------ assign product = q1_sig + (~q2_sig + 1‘d1);
标签:
原文地址:http://www.cnblogs.com/Dream666/p/4575061.html