建立一个C的范围为0~255,内容是(C)2/4的查表

占用256个存储空间,但可以计算出+-127的两个数之积。传统算法需要至少127×127个存储空间。

查找表模块的建立:

module lut_module
(input CLK,input RSTn,input [7:0]Addr,output [15:0]Q
);/*****************************/reg [15:0]rQ;always @ ( posedge CLK or negedge RSTn )if( !RSTn )rQ <= 16'd0;elsecase( 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

根据ab=( a + b ) 2 /4  - ( a - b ) 2 /4,取I1=a+b,I2=a-b,然后I1,I2取正数,调用rom模块求出(C)2/4; 然后相减(加补码)

module lut_multiplier_module
(input CLK,input RSTn,input Start_Sig,input [7:0]A,input [7:0]B,output Done_Sig,output [15:0]Product,/***************************/output [8:0]SQ_I1_Sig,output [8:0]SQ_I2_Sig,output [15:0]SQ_Q1_Sig,output [15:0]SQ_Q2_Sig/***************************/);/***************************/wire [15:0]Q1_Sig;wire [15:0]Q2_Sig;/***************************/reg [3:0]i;reg [8:0]I1;reg [8:0]I2;reg [15:0]Data;reg isDone;always @ ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;I1 <= 9'd0;I2 <= 9'd0;Data <= 16'd0;isDone <= 1'b0;endelse if( Start_Sig )case( i )0:begin I1 <= { A[7], A } + { B[7], B }; I2 <= { A[7], A } + { ~B[7], ( ~B + 1'b1 ) }; i <= i + 1'b1; end 1:beginI1 <= I1[8] ? ( ~I1 + 1'b1 ) : I1;I2 <= I2[8] ? ( ~I2 + 1'b1 ) : I2;i <= i + 1'b1; end2:begin i <= i + 1'b1; end3:begin Data <= Q1_Sig + ( ~Q2_Sig + 1'b1 ); i <= i + 1'b1; end4:begin isDone <= 1'b1; i <= i + 1'b1; end5:begin isDone <= 1'b0; i <= 4'd0; endendcase/***************************/lut_module    U1(.CLK ( CLK ), .RSTn( RSTn ),.Addr ( I1[7:0] ),.Q ( Q1_Sig ));/***************************/lut_module    U2(.CLK ( CLK ), .RSTn( RSTn ),.Addr ( I2[7:0] ),.Q ( Q2_Sig ));/***************************/assign Done_Sig = isDone;assign Product = Data;/***************************/assign SQ_I1_Sig = I1;assign SQ_I2_Sig = I2;assign SQ_Q1_Sig = Q1_Sig;assign SQ_Q2_Sig = Q2_Sig;/***************************/endmodule

还可通过quartus直接建立rom宏模块,.mif文件由file-new-other files-Memory Initialization File建立,填入上述地址、数据。

测试激励文本lut_multiplier_module.vt

`timescale 1 ps/ 1 ps
module lut_multiplier_module_simulation();reg CLK;reg RSTn;reg Start_Sig;reg [7:0]A;reg [7:0]B;wire Done_Sig;wire [15:0]Product;/*************************/wire [8:0]SQ_I1_Sig;wire [8:0]SQ_I2_Sig;wire [15:0]SQ_Q1_Sig;wire [15:0]SQ_Q2_Sig;/*************************/lut_multiplier_module U1(.CLK(CLK),.RSTn(RSTn),.Start_Sig(Start_Sig),.A(A),.B(B),.Done_Sig(Done_Sig),.Product(Product),.SQ_I1_Sig(SQ_I1_Sig),.SQ_I2_Sig(SQ_I2_Sig),.SQ_Q1_Sig(SQ_Q1_Sig),.SQ_Q2_Sig(SQ_Q2_Sig)     );/******************************/initial                                                begin                                                  RSTn = 0; #10; RSTn = 1;CLK = 0; forever #10 CLK = ~CLK;          end /******************************/     reg [3:0]i;always @ ( posedge CLK or negedge RSTn )if( !RSTn )begini <= 4'd0;Start_Sig <= 1'b0;A <= 8'd0;B <= 8'd0; end    else case( i )0: // A = -127 , B = 127 if( Done_Sig ) begin Start_Sig <= 1'b0; i <= i + 1'b1; endelse begin A <= 8'b10000001; B <= 8'd127; Start_Sig <= 1'b1; end1: // A = 2 , B = - 4if( Done_Sig ) begin Start_Sig <= 1'b0; i <= i + 1'b1; endelse begin A <= 8'd2; B <= 8'b11111100; Start_Sig <= 1'b1; end2: // A = 10 , B = 100if( Done_Sig ) begin Start_Sig <= 1'b0; i <= i + 1'b1; endelse begin A <= 8'd10; B <= 8'd100; Start_Sig <= 1'b1; end3: // A = -127 , B = -127if( Done_Sig ) begin Start_Sig <= 1'b0; i <= i + 1'b1; endelse begin A <= 8'b10000001; B <= 8'b10000001; Start_Sig <= 1'b1; end4:i <= 4'd4;    endcase    endmodule

转载于:https://www.cnblogs.com/shaogang/p/4260758.html

Quarter square 查找表乘法器,手动建立rom相关推荐

  1. 数字电路基础知识——组合逻辑电路之乘法器的设计(一)—— 并行、移位相加、加法树、查找表乘法器

    数字电路基础知识--乘法器的设计(一)-- 并行.移位相加.加法树.查找表 乘法器的设计主要应用在数字信号处理和数字通信,本节主要介绍乘法器的四种实现方法.使用并行乘法器.移位相加乘法器.查找表乘法器 ...

  2. sin查找表 matlab,利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨

    1.使用matlab制作.coe文件 查找表的构造 构造256点的正余弦表 exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表 matlab代码: 求sin fid = ...

  3. 修改6S Fortran77 代码,建立查找表

    逐像元大气校正,常预先计算查找表(LUT,LookUp Tabel),6S大气辐射传输模式也可以用来计算LUT.但6S源程序输出信息多,且浮点数输出精度低,不利于提取关键信息生成LUT,本文描述了怎样 ...

  4. OpenCV 【十二】OpenCV如何扫描图像、利用查找表和计时

    目录 OpenCV如何扫描图像.利用查找表和计时 1.函数计算时间测试case 2. Mat图像的存储机理 3. 像素遍历的3--4种方式 4. 实例 OpenCV如何扫描图像.利用查找表和计时 如何 ...

  5. OpenCV之core 模块. 核心功能(1)Mat - 基本图像容器 OpenCV如何扫描图像、利用查找表和计时 矩阵的掩码操作 使用OpenCV对两幅图像求和(求混合(blending))

    Mat - 基本图像容器 目的 从真实世界中获取数字图像有很多方法,比如数码相机.扫描仪.CT或者磁共振成像.无论哪种方法,我们(人类)看到的是图像,而让数字设备来"看"的时候,则 ...

  6. FPGA图像处理_查找表的使用(正弦函数的实现)(含源码)

    查找表在计算机科学中,是指用简单的查询操作来替换运行时计算的数组或者associative array这样的数据结构.由于从内存中提取数值经常要比复杂的计算速度快很多,因此这样的到的速度提升是很显著的 ...

  7. 基于高效查找表的无记忆非线性自适应基带预失真架构

    原文标题为:<Efficient Lookup Table-Based Adaptive Baseband PredistortionArchitecture for Memoryless No ...

  8. 独家|OpenCV 1.2 如何用OpenCV扫描图像、查找表和测量时间(附链接)

    翻译:陈之炎 校对:张一然.林夕本文约4400字,建议阅读10分钟本文为大家系统地介绍了OpenCV官方教程. 目标 在这里将寻求以下问题的答案: 如何遍历图像的各个像素? OpenCV的矩阵值是如何 ...

  9. simulink传递函数_又见Simulink库模型之(6):查找表

    在搭建Simulink模型时,有一部分实际对象输入与输出的关系并不是显而易见的,无法用传递函数等精确方式建模.但是我们可以通过实验的方式,通过施加不同的输入,测量相应的输出,从而建立输入与输出的关系. ...

最新文章

  1. CVPR2020:点云分类的自动放大框架:PointAugment
  2. CTFshow 命令执行 web60
  3. java 生成缩略图_Java实现等比例缩略图
  4. MyBatis全局配置文件和映射文件
  5. vue 高阶面试题_大厂面试题合集
  6. 日常记录,记下来自己的遇到的问题
  7. Dubbo 的设计思想,真优秀!
  8. phoenix hbase java_spark通过phoenix读写hbase(Java版)
  9. Abaqus运行fortan报错:“Error in job Job-1: Problem during compilation - D:\test.for”
  10. 今天不学习,明天变垃圾
  11. 【产业互联网周报】微软、谷歌再布局边缘云;美团放弃公有云业务;开普云登陆科创板...
  12. #VCS# 关于VCS 编译选项 《-v 、 -y 、+libext+》 的理解
  13. ERP/MIS系统中集成命令行式的功能调用
  14. matlab函数:residue和residuez的用法
  15. 互联网架构之 “高可用” 详解
  16. 韩国KOBA蓄电池 全系列电池供应
  17. LeakCanary 详解
  18. UNCTF2022 wp Re ezzzzre
  19. 刷题day65:整数拆分
  20. 利用python对图像进行傅里叶变换_Python模拟及其在傅里叶变换全息图教学中的应用...

热门文章

  1. java从入门到秃头,小白的秃头之路
  2. macosx 不允许无名信号量_个人对S12X的协处理器XGATE的信号量semaphore的理解
  3. nodejs实践录:我的nodejs编码风格
  4. 匹配特殊字符的正则表达式
  5. Eclipse安装UML 插件
  6. html协商缓存没起作用,用了CDN缓存,就会跳过强缓存和协商缓存吗?
  7. 95-40-014-生产者-KafkaProducer
  8. 【Es】Es 选主流程
  9. 【java】Java 原子性、有序性与Happens-Before
  10. 【Spring】Spring 如何解决循环依赖问题