lut 查找表乘法器

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);

 

posted @ 2015-06-14 14:43  Dreammer  阅读(1208)  评论(0编辑  收藏  举报