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

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

查找表模块的建立:

module lut_module
(
input CLK,
input RSTn, input [:]Addr,
output [:]Q
); /*****************************/ reg [:]rQ; always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
rQ <= 'd0;
else
case( Addr ) , : rQ <= 'd0;
: rQ <= 'd1;
: rQ <= 'd2;
: rQ <= 'd4;
: rQ <= 'd6;
: rQ <= 'd9;
: rQ <= 'd12;
: rQ <= 'd16;
: rQ <= 'd20;
: rQ <= 'd25;
: rQ <= 'd30;
: rQ <= 'd36;
: rQ <= 'd42;
: rQ <= 'd49;
: rQ <= 'd56;
: rQ <= 'd64;
: rQ <= 'd72;
: rQ <= 'd81;
: rQ <= 'd90;
: rQ <= 'd100;
: rQ <= 'd110;
: rQ <= 'd121;
: rQ <= 'd132;
: rQ <= 'd144;
: rQ <= 'd156;
: rQ <= 'd169;
: rQ <= 'd182;
: rQ <= 'd196;
: rQ <= 'd210;
: rQ <= 'd225;
: rQ <= 'd240;
: rQ <= 'd256;
: rQ <= 'd272;
: rQ <= 'd289;
: rQ <= 'd306;
: rQ <= 'd324;
: rQ <= 'd342;
: rQ <= 'd361;
: rQ <= 'd380;
: rQ <= 'd400;
: rQ <= 'd420;
: rQ <= 'd441;
: rQ <= 'd462;
: rQ <= 'd484;
: rQ <= 'd506;
: rQ <= 'd529;
: rQ <= 'd552;
: rQ <= 'd576;
: rQ <= 'd600;
: rQ <= 'd625;
: rQ <= 'd650;
: rQ <= 'd676;
: rQ <= 'd702;
: rQ <= 'd729;
: rQ <= 'd756;
: rQ <= 'd784;
: rQ <= 'd812;
: rQ <= 'd841;
: rQ <= 'd870;
: rQ <= 'd900;
: rQ <= 'd930;
: rQ <= 'd961;
: rQ <= 'd992;
: rQ <= 'd1024;
: rQ <= 'd1056;
: rQ <= 'd1089;
: rQ <= 'd1122;
: rQ <= 'd1156;
: rQ <= 'd1190;
: rQ <= 'd1225;
: rQ <= 'd1260;
: rQ <= 'd1296;
: rQ <= 'd1332;
: rQ <= 'd1369;
: rQ <= 'd1406;
: rQ <= 'd1444;
: rQ <= 'd1482;
: rQ <= 'd1521;
: rQ <= 'd1560;
: rQ <= 'd1600;
: rQ <= 'd1640;
: rQ <= 'd1681;
: rQ <= 'd1722;
: rQ <= 'd1764;
: rQ <= 'd1806;
: rQ <= 'd1849;
: rQ <= 'd1892;
: rQ <= 'd1936;
: rQ <= 'd1980;
: rQ <= 'd2025;
: rQ <= 'd2070;
: rQ <= 'd2116;
: rQ <= 'd2162;
: rQ <= 'd2209;
: rQ <= 'd2256;
: rQ <= 'd2304;
: rQ <= 'd2352;
: rQ <= 'd2401;
: rQ <= 'd2450;
: rQ <= 'd2500;
: rQ <= 'd2550;
: rQ <= 'd2601;
: rQ <= 'd2652;
: rQ <= 'd2704;
: rQ <= 'd2756;
: rQ <= 'd2809;
: rQ <= 'd2862;
: rQ <= 'd2916;
: rQ <= 'd2970;
: rQ <= 'd3025;
: rQ <= 'd3080;
: rQ <= 'd3136;
: rQ <= 'd3192;
: rQ <= 'd3249;
: rQ <= 'd3306;
: rQ <= 'd3364;
: rQ <= 'd3422;
: rQ <= 'd3481;
: rQ <= 'd3540;
: rQ <= 'd3600;
: rQ <= 'd3660;
: rQ <= 'd3721;
: rQ <= 'd3782;
: rQ <= 'd3844;
: rQ <= 'd3906;
: rQ <= 'd3969;
: rQ <= 'd4032;
: rQ <= 'd4096;
: rQ <= 'd4160;
: rQ <= 'd4225;
: rQ <= 'd4290;
: rQ <= 'd4356;
: rQ <= 'd4422;
: rQ <= 'd4489;
: rQ <= 'd4556;
: rQ <= 'd4624;
: rQ <= 'd4692;
: rQ <= 'd4761;
: rQ <= 'd4830;
: rQ <= 'd4900;
: rQ <= 'd4970;
: rQ <= 'd5041;
: rQ <= 'd5112;
: rQ <= 'd5184;
: rQ <= 'd5256;
: rQ <= 'd5329;
: rQ <= 'd5402;
: rQ <= 'd5476;
: rQ <= 'd5550;
: rQ <= 'd5625;
: rQ <= 'd5700;
: rQ <= 'd5776;
: rQ <= 'd5852;
: rQ <= 'd5929;
: rQ <= 'd6006;
: rQ <= 'd6084;
: rQ <= 'd6162;
: rQ <= 'd6241;
: rQ <= 'd6320;
: rQ <= 'd6400;
: rQ <= 'd6480;
: rQ <= 'd6561;
: rQ <= 'd6642;
: rQ <= 'd6724;
: rQ <= 'd6806;
: rQ <= 'd6889;
: rQ <= 'd6972;
: rQ <= 'd7056;
: rQ <= 'd7140;
: rQ <= 'd7225;
: rQ <= 'd7310;
: rQ <= 'd7396;
: rQ <= 'd7482;
: rQ <= 'd7569;
: rQ <= 'd7656;
: rQ <= 'd7744;
: rQ <= 'd7832;
: rQ <= 'd7921;
: rQ <= 'd8010;
: rQ <= 'd8100;
: rQ <= 'd8190;
: rQ <= 'd8281;
: rQ <= 'd8372;
: rQ <= 'd8464;
: rQ <= 'd8556;
: rQ <= 'd8649;
: rQ <= 'd8742;
: rQ <= 'd8836;
: rQ <= 'd8930;
: rQ <= 'd9025;
: rQ <= 'd9120;
: rQ <= 'd9216;
: rQ <= 'd9312;
: rQ <= 'd9409;
: rQ <= 'd9506;
: rQ <= 'd9604;
: rQ <= 'd9702;
: rQ <= 'd9801;
: rQ <= 'd9900;
: rQ <= 'd10000;
: rQ <= 'd10100;
: rQ <= 'd10201;
: rQ <= 'd10302;
: rQ <= 'd10404;
: rQ <= 'd10506;
: rQ <= 'd10609;
: rQ <= 'd10712;
: rQ <= 'd10816;
: rQ <= 'd10920;
: rQ <= 'd11025;
: rQ <= 'd11130;
: rQ <= 'd11236;
: rQ <= 'd11342;
: rQ <= 'd11449;
: rQ <= 'd11556;
: rQ <= 'd11664;
: rQ <= 'd11772;
: rQ <= 'd11881;
: rQ <= 'd11990;
: rQ <= 'd12100;
: rQ <= 'd12210;
: rQ <= 'd12321;
: rQ <= 'd12432;
: rQ <= 'd12544;
: rQ <= 'd12656;
: rQ <= 'd12769;
: rQ <= 'd12882;
: rQ <= 'd12996;
: rQ <= 'd13100;
: rQ <= 'd13225;
: rQ <= 'd13340;
: rQ <= 'd13456;
: rQ <= 'd13572;
: rQ <= 'd13689;
: rQ <= 'd13806;
: rQ <= 'd13924;
: rQ <= 'd14042;
: rQ <= 'd14161;
: rQ <= 'd14280;
: rQ <= 'd14400;
: rQ <= 'd14520;
: rQ <= 'd14641;
: rQ <= 'd14762;
: rQ <= 'd14884;
: rQ <= 'd15006;
: rQ <= 'd15129;
: rQ <= 'd15252;
: rQ <= 'd15376;
: rQ <= 'd15500;
: rQ <= 'd15625;
: rQ <= 'd15750;
: rQ <= 'd15876;
: rQ <= 'd16002;
: rQ <= 'd16129;
: rQ <= '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 [:]A,
input [:]B, output Done_Sig,
output [:]Product, /***************************/ output [:]SQ_I1_Sig,
output [:]SQ_I2_Sig,
output [:]SQ_Q1_Sig,
output [:]SQ_Q2_Sig /***************************/ ); /***************************/ wire [:]Q1_Sig;
wire [:]Q2_Sig; /***************************/ reg [:]i;
reg [:]I1;
reg [:]I2;
reg [:]Data;
reg isDone; always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
begin
i <= 'd0;
I1 <= 'd0;
I2 <= 'd0;
Data <= 'd0;
isDone <= 'b0;
end
else if( Start_Sig )
case( i ) :
begin
I1 <= { A[], A } + { B[], B };
I2 <= { A[], A } + { ~B[], ( ~B + 'b1 ) };
i <= i + 'b1;
end :
begin
I1 <= I1[] ? ( ~I1 + 'b1 ) : I1;
I2 <= I2[] ? ( ~I2 + 'b1 ) : I2;
i <= i + 'b1;
end :
begin i <= i + 'b1; end :
begin Data <= Q1_Sig + ( ~Q2_Sig + 'b1 ); i <= i + 1'b1; end :
begin isDone <= 'b1; i <= i + 1'b1; end :
begin isDone <= 'b0; i <= 4'd0; end endcase /***************************/ lut_module U1
(
.CLK ( CLK ),
.RSTn( RSTn ),
.Addr ( I1[:] ),
.Q ( Q1_Sig )
); /***************************/ lut_module U2
(
.CLK ( CLK ),
.RSTn( RSTn ),
.Addr ( I2[:] ),
.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  ps/  ps
module lut_multiplier_module_simulation(); reg CLK;
reg RSTn; reg Start_Sig;
reg [:]A;
reg [:]B; wire Done_Sig;
wire [:]Product; /*************************/ wire [:]SQ_I1_Sig;
wire [:]SQ_I2_Sig;
wire [:]SQ_Q1_Sig;
wire [:]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 = ; #; RSTn = ;
CLK = ; forever # CLK = ~CLK;
end /******************************/ reg [:]i; always @ ( posedge CLK or negedge RSTn )
if( !RSTn )
begin
i <= 'd0;
Start_Sig <= 'b0;
A <= 'd0;
B <= 'd0;
end
else
case( i ) : // A = -127 , B = 127
if( Done_Sig ) begin Start_Sig <= 'b0; i <= i + 1'b1; end
else begin A <= 'b10000001; B <= 8'd127; Start_Sig <= 'b1; end : // A = 2 , B = - 4
if( Done_Sig ) begin Start_Sig <= 'b0; i <= i + 1'b1; end
else begin A <= 'd2; B <= 8'b11111100; Start_Sig <= 'b1; end : // A = 10 , B = 100
if( Done_Sig ) begin Start_Sig <= 'b0; i <= i + 1'b1; end
else begin A <= 'd10; B <= 8'd100; Start_Sig <= 'b1; end : // A = -127 , B = -127
if( Done_Sig ) begin Start_Sig <= 'b0; i <= i + 1'b1; end
else begin A <= 'b10000001; B <= 8'b10000001; Start_Sig <= 'b1; end :
i <= 'd4; endcase endmodule

Quarter square 查找表乘法器,手动建立rom的更多相关文章

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

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

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

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

  3. OpenCV学习笔记:如何扫描图像、利用查找表和计时

    目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的 ...

  4. OpenCV从入门到放弃系列之——如何扫描图像、利用查找表和计时

    目的 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 颜色空间缩减.具体做法就是:将现有颜色空间值除以某个输入 ...

  5. C语言数据结构基础学习笔记——静态查找表

    查找:在数据集合中寻找满足某种条件的数据元素的过程称为查找. 查找表:用于查找的数据集合称为查找表,一般有以下操作:①查找是否在表中:②查找属性:③进行操作. 查找表又分为: ①静态查找表:只可以进行 ...

  6. 【C/C++】查找(一):静态查找表

    {静态查找表 + 动态查找表} 所谓动态,就是,找的时候没有则添加,或者能删除 关键字:primary key:用来表示查找表中的一条记录 {主关键字 + 次关键字} 主关键字是唯一的,用来唯一的标识 ...

  7. 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找

    今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...

  8. JAVASE02-Unit05: 集合操作 —— 查找表

    Unit05: 集合操作 -- 查找表 使用该类测试自定义元素的集合排序 package day05; /** * 使用该类测试自定义元素的集合排序 * @author adminitartor * ...

  9. Lua查找表元素过程(元表、__index方法是如何工作的)

    近日开始研究Lua,在元表的使用上照猫画虎地搞了两下,实现了“面向对象”,但究其本质却略有不解,后咨询牛哥得解,特此记录. Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Val ...

随机推荐

  1. DB2操作命令

    本文详细汇总了DB2的常用操作命令,分享给大家.对于使用db2的朋友可以参考下. DB2数据库管理客户端从v9.7版本之后就不再带有控制中心了,而是使用 Data Studio Client.安装 D ...

  2. Numpy应用100问

    对于从事机器学习的人,python+numpy+scipy+matplotlib是重要的基础:它们基本与matlab相同,而其中最重要的当属numpy:因此,这里列出100个关于numpy函数的问题, ...

  3. tp框架总结(二)

    一.函数库和类库 项目中的常用的函数库要封装到项目Common/function.php中  在项目中可以直接调用  [ 函数();] import方法是ThinkPHP内建的类库导入方法,提供了方便 ...

  4. DHCP服务器原理

    DHCP服务器   port:67 DHCP 这个服务可以自动的分配 IP 与相关的网络参数给客户端, 来提供客户端自动以服务器提供的参数来设定他们的网络   12.1 DHCP 运作的原理      ...

  5. Math类中的BigDecimal

    如果我们编译运行下面这个程序会看到什么? public class Test {    public static void main(String args[]) {                 ...

  6. 路由器TL-WR941N V5.1:救砖、MOD

    完成效果图: --- 拆芯片时需要贴上胶带,防止误伤: --- 堆锡拆除旧的flash芯片: --- 购入物品: --- 编程器刷入Breed: --- Web刷机: --- 预处理材料: --- 7 ...

  7. DotNet Core 1.0 集成 CentOS 开发与运行环境部署

    一.     DotNet Core 1.0 开发环境部署 操作系统安装 我们使用CentOS 7.2.1511版本. 安装libunwind库 执行:sudo yum install libunwi ...

  8. JavaScript DOM编程艺术读书笔记(一)

    第一章,第二章 DOM:是一套对文档的内容进行抽象和概念化的方法. W3C中的定义:一个与系统平台和编程语言无关的接口,程序和脚本可以通过这个接口动态的访问和修改文档的内容,结构和样式. DHTML( ...

  9. MySql的连接查询

    类似于oracle的连接查询,mysql连接查询也有左外连接.右外连接.内连接查询.但是,不同的是没有直接 的全外连接查询. 这里介绍MySql的连接查询: 这里已两张表为例:STUDENT 表 和 ...

  10. VS工程里的文件都是啥?如何打包? 2015-03-04

    打完补充:以下内容全部是我一家之言,只是愿意分享,内容如有不妥还请见谅. ====================================================== 刚才接收了一份代 ...