设计DDS的核心就是调用IP ROM,vivado调用ROM的方法和ISE相类似,都是加载.coe文件,我这里特地做笔记,以防忘记。
这是DDS的原理图,DDS并没有像它的名字一样说的那么玄乎,它的核心便是控制频率的fword字输入,和相位字pword输入,最后调用IP核查找表即可,代码也十分简单,下面给出DDS design代码。
DDS_design
使用vivado调用IP核ROM教程如下
点击IP catalog
选择block memory,然后双击
将show disabled ports 选项勾选掉
输入ROM名,我这里为了演示重新配置一个方波ROM,命名为square_rom
这里选择single ports ROM
按如上图所示勾选参数,port width是数据宽度,我们根据代码要求设置为10位,
port width是数据深度,即有多少个这样的数据,我打开生成的square.coe文件可以清楚的看到一共有4096这样的数据。
always enable是ROM一直处于工作状态,不需要使能信号。
这里是加载.coe文件,勾选load init file 然后点击browse将刚才生成的square.coe文件加载到ROM中,最后点击OK。
选择generate生成IP核
打开如图所示文件,
将生成的IP核实例化,即可
最后编写测试文件进行测试
最后右键点击da_data选择wave style选择analog,将会看到模拟波形,但是有时候还是需要设置一下模拟波形的显示,同样右键点击da_data选择wave style选择analog setting,选择如下图所示参数。
最后便大功告成,即可得打方波的波形图
大家还可以按照这种方法将其他两种波形都做出来。
coe文件是你定制RAM的时候初始化文件,FPGA上电就加载在RAM 里面了,如果想要读数据,你只需要给地址和读信号就可以了。不过,RAM是随机存取存储器,可以修改存储中的数据,所以它可以读,也可以写。
那个idata是写有效的时候,送入ram的信号。读 *** 作时不用考虑。
如果你不想修改储存数据(只读不写),可以使用ROM的IP核。
在用core gen 产生rom的时候,有个步骤,导入用户的coe文件(所有rom的参数都可以在这个文件中设置,如果不设置,rom生成之后,使用默认参数):-----------------------
一个标准的coe文件的格式如下:
MEMORY_INITIALIZATION_RADIX=2//数据格式,此为2进制,还可以为8,10,16进制
MEMORY_INITIALIZATION_VECTOR=
01110100,
00100000,
11110101,
10000000,
01111000,
00100010,
00000001,
00010100,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
01110100,
00000101,
11110101,
10000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000,
00000000
-----------------------
再举一个例子:
Xilinx FIR滤波器系数文件格式
radix = 10 //系数的进制,此为10进制,也可以为2, 10,16进制
coefdata =
coef1,
coef2,
coef3,
…
coefN
文件扩展名为.coe。FIR的datasheet里没有写进制位8的情况。
在ise下,ROM初始化是靠加载coe文件完成的。其格式如下:
MEMORY_INITIALIZATION_RADIX=2//表示ROM内容的数据格式是2进制
MEMORY_INITIALIZATION_VECTOR=
00000000
00000001
00000011
但是当数据量很大的时候,直接写很不方便。
下面我将介绍,借助matlab工具来快速完成包含大量数据的coe文件的编写。
1、在matlab中将数据录入,如果数据是在txt文件中,可以读文件录入(网上很容易找到相关命令)。
2、将数据存成n行1列的数组。
3、通常录入的数据都是10进制的。可以用命令A=dec2bin(I)转为2进制字符,再用M=str2num(A)转换为数字显示。
如15,经过两次转化即为11111111;
4、将matlab数据窗口中的A双击出来,会显示n行1列的2进制数(类似excel),直接全选复制数据到txt文件中;
在txt文件开头加入:
MEMORY_INITIALIZATION_RADIX=2//表示ROM内容的数据格式是2进制
MEMORY_INITIALIZATION_VECTOR=
在txt文件的最后一个数字后加入分号“;”。
5、将txt文件后缀直接改为coe文件类型。这时我们需要的coe文件就产生了。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)