建立一个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. Json与Bean互转,Timestamp类型的问题

    Json与Java Bean互相转换时,Bean中的Timestamp字段是无法直接处理的,需要实现两个转换器. DateJsonValueProcessor的作用是Bean转换为Json时将Time ...

  2. 使用spring手动获取Bean的时候,不能强转回它自己。

    这个问题好像有点长,描述一下: 就是通过类名的方式获取Bean后,得到一个Object对象,但是这个Object不能再强转回Bean了.抛出的异常时类型转换异常.  java.lang.ClassCa ...

  3. 运行R 报错R cannot R_TempDir, 继而发现/dev/mapper/VG00-LV01 磁盘空间已满

    今天在运行R脚本的时候报了个错:Fatal error: cannot create 'R_TempDir'.排除了是自己写的代码的问题,想着应该是某个没见过的原因,google之,发现网上的说法是/ ...

  4. @UniqueConstraint

    jedis UniqueConstraint定义在Table或SecondaryTable元数据里,用来指定建表时需要建唯一约束的列. 元数据属性说明: columnNames:定义一个字符串数组,指 ...

  5. TripleDES加解密Java、C#、php通用代码

    TripleDES说明:     TripleDES(3Des)和Des都是对称加密算法,TripleDes是Des加密算法的增强版本,这里主要说的是TripleDes加密算法的应用.     工作中 ...

  6. splinter(python操作浏览器魔魁啊)

    from splinter import Browser def main(): browser = Browser() browser.visit('http://google.com') brow ...

  7. Go Data Structures: Interfaces

    refer:http://research.swtch.com/interfaces Go Data Structures: Interfaces Posted on Tuesday, Decembe ...

  8. UE3 ExampleGame Android版无法运行解决方案

    首先将 UE3\UnrealEngine3\UDKGame\Build\Android 文件夹 拷贝到 ExampleGame\Build下面.里面有相应的android 配置文件.xml 若果此时 ...

  9. MFC 不让程序显示在任务栏上

    如果是对话框程序直接在对话框的 初始化时,修改样式 ModifyStyleEx(WS_EX_APPWINDOW,WS_EX_TOOLWINDOW); 但是对于多文档或是单文档,则没有对应的对话框样式需 ...

  10. BZOJ2037: [Sdoi2008]Sue的小球

    Description Sue 和Sandy最近迷上了一个电脑游戏,这个游戏的故事发在美丽神秘并且充满刺激的大海上,Sue有一支轻便小巧的小船.然而,Sue的目标并不是当一个海 盗,而是要收集空中漂浮 ...