利用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_ ...
随机推荐
- SQL 存储过程 通过多个ID更新数据 分类: SQL Server 2014-12-08 16:08 299人阅读 评论(0) 收藏
下面举个例子说明: 我想让一部分品牌的名称(即Brand_Name)后面加上1,Brand_ID是主键,sql语句很容易实现,但是存储过程如何写呢? 错误写法如下: //*************** ...
- 用Autohotkey让powerpoint幻灯片一直播放
有台电脑专门接了个大电视循环播放一个幻灯片,但是有时候会弹出一些对话框,比如windows要更新之类的,这样的话powerpoint就不是active的进城了,这样幻灯片就会停下来,还需要人去手动点一 ...
- 【原创】javascript——事件思维导图
- poj1673
所谓Exocenter就是垂心.不难证明. #include <iostream> #include <math.h> #include <stdio.h> str ...
- Light OJ 1114 Easily Readable 字典树
题目来源:Light OJ 1114 Easily Readable 题意:求一个句子有多少种组成方案 仅仅要满足每一个单词的首尾字符一样 中间顺序能够变化 思路:每一个单词除了首尾 中间的字符排序 ...
- [Redux] Adding React Router to the Project
We will learn how to add React Router to a Redux project and make it render our root component. Inst ...
- WebRTC clientICE 延迟问题
本文原创自 http://blog.csdn.net/voipmaker 转载注明出处. 近期在优化WebRTCclient呼叫延迟问题.原因是ICE协议栈在收集地址到探測协商过程花费非常长时间.这 ...
- jsp页面使用javascript添加页面元素示例代码
<body> <input type="button" value="test" onclick="javascript:a( ...
- openmpi+NFS+NIS搭建分布式计算集群
1. 配置防火墙 正确配置防火墙的过滤规则,否则会造成NFS文件系统的挂载失败,NIS账户认证的失败,mpirun远程任务实例投放的失败.一般情况下,计算集群是在内部局域网中使用,所以可 ...
- poj 3565 ants
/* poj 3565 递归分治 还有用KM的做法 这里写的分治 按紫书上的方法 不过那里说的有点冗杂了 可以简化一下 首先为啥可以分治 也就是分成子问题解决 只要有一个集合 黑白的个数相等 就一定能 ...