利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨
1.使用matlab制作.coe文件
查找表的构造
构造256点的正余弦表
exp(-j*2*pi*(0:255)/256),分别得到 cos和sin的查找表
matlab代码: 求sin
fid = fopen('sin.txt','a' );
str1 = 'MEMORY_INITIALIZATION_RADIX=10;';
str2 = 'MEMORY_INITIALIZATION_VECTOR=';
fprintf(fid,'\t%s\n \t%s\n', str1,str2);
for k=:;
y(k) =sin(*pi*k/);
y(k) = int16(y(k)*^); // 这一步主要是考虑是表中数据的格式Q(s,,),完成浮点数到定点数之间的转换.
fprintf(fid,'\t%d%c\n',y(k),',');
end
fclose(fid);
matlab代码:求cos
fid = fopen('cos.txt','a' );
str1 = 'MEMORY_INITIALIZATION_RADIX=10;';
str2 = 'MEMORY_INITIALIZATION_VECTOR=';
fprintf(fid,'\t%s\n \t%s\n', str1,str2);
for k=:;
y(k) =cos(*pi*k/);
y(k) = int16(y(k)*^);
fprintf(fid,'\t%d%c\n',y(k),',');
end
fclose(fid);
运行这两个matlab程序可以得到cos.txt, sin.txt文件,里面存放了适合放在ROM中的数据格式。
注意点:
(1). COE文件格式
在txt文件开头:
MEMORY_INITIALIZATION_RADIX=10; //表示ROM内容的数据格式是10进制
MEMORY_INITIALIZATION_VECTOR=
在txt文件的最后一个数字后加入分号“;”。这里需要修改cos.txt,sin.txt,将最后的,改为;
(2)将cos.txt, sin.txt文件后缀直接改为coe文件类型。
-->如何修改txt 文件类型?
默认情况下,Windows的文件后辍名是隐藏的,因此,为了更改文件的后辍名,首先必须让文件名的后辍显示出来。
方法如下:在文件窗口下选择工具>文件夹选项>查看>高级设置中不勾选隐藏已知文件类型的扩展名,即可显示文件后缀名,然后直接更改为.coe后缀即可!
2. 定制rom
注意点:
(1)memory type :single port ROM
(2)memory size :
width 为数据的宽度
Depth 为数据的个数,它决定了输入的addr的位数。比如,depth = 256, addr则为8位。
(3)选择初始化文件。cos.coe, sin.coe ,选择旁边的show 可以查看添加是否正确。
这一步会生成对应的.mig、.vhd 文件。
3. 仿真验证ROM是否正常工作
(1)新建top文件
entity look_up_sin is
port(
clk: in std_logic;
rst: in std_logic;
addr:in std_logic_vector( downto ); --Q(,)
sin_out:out std_logic_vector( downto )--Q(,)
);
end look_up_sin;
architecture Behavioral of look_up_sin is
COMPONENT sin_rom
PORT (
clka : IN STD_LOGIC;
addra : IN STD_LOGIC_VECTOR( DOWNTO );
douta : OUT STD_LOGIC_VECTOR( DOWNTO )
);
END COMPONENT;
begin
Inst_sin_rom : sin_rom
PORT MAP (
clka => clk,
addra => addr,
douta => sin_out
);
end Behavioral;
(2)remove sin_rom.XCO ip核文件,添加sin_rom.vhd文件。当文件sin.coe放在ipcore_dir目录下面时,不需要这一步。应直接用sin_rom.xco,不然仿真会提醒
sin.mif文件找不到!!
(3)新建testbench文件。
仿真结果如下:
对比sin_txt文件
文章转载自: http://blog.csdn.net/shanekong/article/details/44731951
利用Xilinx中的ROM构造查找表来计算sin和cos的方法探讨的更多相关文章
- 利用.Net中Process类调用netstat命令来判断计算端口的使用情况
利用.Net中Process类调用netstat命令来判断计算端口的使用情况: Process p = new Process();p.StartInfo = new ProcessStartInfo ...
- Lua查找表元素过程(元表、__index方法是如何工作的)
近日开始研究Lua,在元表的使用上照猫画虎地搞了两下,实现了“面向对象”,但究其本质却略有不解,后咨询牛哥得解,特此记录. Lua的表本质其实是个类似HashMap的东西,其元素是很多的Key-Val ...
- 算法与数据结构(九) 查找表的顺序查找、折半查找、插值查找以及Fibonacci查找
今天这篇博客就聊聊几种常见的查找算法,当然本篇博客只是涉及了部分查找算法,接下来的几篇博客中都将会介绍关于查找的相关内容.本篇博客主要介绍查找表的顺序查找.折半查找.插值查找以及Fibonacci查找 ...
- OpenCV基础篇之查找表
程序及分析 /* * FileName : lookup_table.cpp * Author : xiahouzuoxin @163.com * Version : v1.0 * Date : Su ...
- Speed-BI 多事实表与表间计算的应用:销售目标达成分析 另一种实现方法
在前一篇<Speed-BI多事实表与表间计算的应用(excel多Sheet关联分析):销售目标达成分析>http://www.powerbibbs.com/forum. ... 7583& ...
- OpenCV学习笔记:如何扫描图像、利用查找表和计时
目的 我们将探索以下问题的答案: 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 这里我们测试的,是一种简单的 ...
- 1.2OpenCV如何扫描图像,利用查找表和计时
查找表 颜色缩减法:如果矩阵元素存储的是单通道像素,使用C或C++的无符号字符类型,那么像素可有256个不同值. 但若是三通道图像,这种存储格式的颜色数就太多了(确切地说,有一千六百多万种).用如此之 ...
- OpenCV从入门到放弃系列之——如何扫描图像、利用查找表和计时
目的 如何遍历图像中的每一个像素? OpenCV的矩阵值是如何存储的? 如何测试我们所实现算法的性能? 查找表是什么?为什么要用它? 测试用例 颜色空间缩减.具体做法就是:将现有颜色空间值除以某个输入 ...
- Quarter square 查找表乘法器,手动建立rom
建立一个C的范围为0~255,内容是(C)2/4的查表 占用256个存储空间,但可以计算出+-127的两个数之积.传统算法需要至少127×127个存储空间. 查找表模块的建立: module lut_ ...
随机推荐
- uva10622 Perfect P-th Powers
留坑(p.343) 完全不知道哪里有问题qwq 从31向下开始枚举p,二分找存在性,或者数学函数什么的也兹辞啊 #include<cstdio> #include<cstring&g ...
- 使用redis来实现分布式锁
在实际的工作中,有部分的特定场景需要使用到分布式锁来进行跨服务器资源的统一调配.之前在一家医疗互联网公司,因为黄牛抢号等原因,造成同一个患者同一时段在同一个医生处,挂到了两个及以上的号,我对之前我司实 ...
- C++一些注意点之操作符重载
重载操作符需要注意 (1)重载操作符必须具有一个类类型操作数.不能重载内建类型的操作符. operator +(int,int);//这个是错误的,都为内建类型 operator +(int,clas ...
- VirtualBox 运行失败
运行 VirtualBox --help 安装 VirtualBox 后 运行 报错内核没加载问题 需要设置环境变量 内核加载的环境变量 export KERN_DIR=/usr/src/kernel ...
- TCP 函数
[root@localhost tt]# man listen LISTEN() Linux Programmer’s Manual LISTEN() NAME listen - listen for ...
- iOS-Storyboad动态刷新
iOS-Storyboad动态刷新 什么叫做Storyboard动态刷新 在项目开发中,如果可以在xib(storyboard)中,动态显示运行效果图,那么实在是太爽了.在Xcode 6之后就为我们提 ...
- iOS UIKit:viewController之Present (3)
弹出和转换view controller技术是一种快速且简单的方式将新view content展示在屏幕中.目前有两种方式弹出新的view controller:Present方式和segues方式. ...
- PHP中的循环while、do...while、for、foreach四种循环。
php中的while循环,循环执行代码块制定的次数,或者当指定的条件为真时循环执行代码块. 在我们编写代码是时候,我们经常需要一块代码块重复执行多次.我们就可以使用while循环语句来完成这个任务. ...
- HTML5移动开发中的input输入框类型
HTML5规范引入了许多新的input输入框类型 在HTML5移动开发中,通过这些新的输入框类型来显示定制后的键盘布局,用户体验更好,更容易填写各种表单 本文中,实测手机为肾4S与米4 数字类型num ...
- linux,安装软件报错cannot create regular file '/usr/local/man/man1': No such file or directory
make install时报错,如下 install: cannot create regular file '/usr/local/man/man1': No such file or direct ...