基于vhdl的DDS设计.docx

上传人:b****6 文档编号:8121766 上传时间:2023-01-28 格式:DOCX 页数:19 大小:814.59KB
下载 相关 举报
基于vhdl的DDS设计.docx_第1页
第1页 / 共19页
基于vhdl的DDS设计.docx_第2页
第2页 / 共19页
基于vhdl的DDS设计.docx_第3页
第3页 / 共19页
基于vhdl的DDS设计.docx_第4页
第4页 / 共19页
基于vhdl的DDS设计.docx_第5页
第5页 / 共19页
点击查看更多>>
下载资源
资源描述

基于vhdl的DDS设计.docx

《基于vhdl的DDS设计.docx》由会员分享,可在线阅读,更多相关《基于vhdl的DDS设计.docx(19页珍藏版)》请在冰豆网上搜索。

基于vhdl的DDS设计.docx

基于vhdl的DDS设计

基_于vhdl的DDS设计

&&BASYS板上实现DDS设计&&

1.创建新工程DDS

2.设置参数

3.添加或新建VHDLmodel

编译综合

4.将VHDL模块转化成图形化符号,以便之后在原理图输入法中应用

将fredevider3、phaseregister转化为SchematicSymbol。

5.创建IP核(Rom)

Rom宽度为8bit,深度为256

一路next到page4,导入.coe文件(.coe文件的生成见附)

字体为红色则存在错误,黑色为正确,点Generate,等待生成IP核。

6.原理图输入法创建顶层文件(.sch)

点finish后进入top.sch原理图设计界面

选择自己的工程路径,Symbols中出现fredevider3、phaseregister、rom的图形化符号。

连接器件

编译综合

无错误即可

7.波形仿真

reset先设为1再设为0,产生复位信号;periodn[1:

0]设为“00”;pir[4:

0]设为“00001”(步进角);保存top_test。

8.编写ucf文件,进行管脚配置

一个DDS工程便完成了

编译综合,生成.bit文件

用Digilent将.bit文件下载到basys板子即可。

附:

对于ROM模块,主要是生成相应的.coe文件。

1.在Matlab中生成正余弦波形的浮点值,并量化为16bit定点波形数值:

%生成ROM的.coe文件

clc

clearall

closeall

 x=linspace(0,pi/2,1024);    %在区间[0,2pi]之间等间隔地取1024个点

 y_cos=cos(x);

 y_sin=sin(x);

 

 y_cos=y_cos*2^16;   

 y_sin=y_sin*2^16;

 

 fid=fopen('D:

/cos_coe.txt','wt');   fprintf(fid,'%16.0f\n',y_cos);

 fclose(fid);

 

 fid=fopen('D:

/sin_coe.txt','wt');

 fprintf(fid,'%16.0f\n',y_sin);     

 fclose(fid);

2.生成.coe文件在D盘根目录下,将cos_coe.txt和sin_coe.txt的后缀改成.coe。

打开文件,把每一行之间的空格用文本替换功能换成“,”(这可以通过强大的UltraEdit来实现!

),并在最后一行添加一个分号“;”。

最后,在文件的最开始添加下面两行:

memory_initialization_radix=10;

memory_initialization_vector=

然后,保存文件退出。

3.将coe文件加载到BLOCKROM所生成的ROM中。

新建一个BLOCKROM的IPCore,其位置为“Memories&StorageElements---->RAMs&ROMs----->BlockMemoryGeneratorv2.4”。

在第1页中选择“singleportrom”,在第2页中选择位宽为16,深度为1024,在第3页下载coe文件,如下图,然后双击Finish,完成IPCore的生成。

如果coe文件生成得不对,Browse前面的框中是显示红色的文件名,coe文件错误类型主要有数据基数不对和数据的长度不对两种。

coe文件的格式如下:

MEMORY_INITIALIZATION_RADIX=10;

MEMORY_INITIALIZATION_VECTOR=

512,515,518,522,525,528,531,535,538,54

12,23;

注意:

前面的2行不要动,RADIX后面的数字表示的是进制,这里取10进制。

结尾用的是分号

在matlab中关键的步骤如下,我们以一个周期1000个采样,位数为10位的正弦表格为例子。

n=0:

999;y=round(sin(2*pi*0.001*n)*512)+512;//后面加上512是为了防止出现负数

y=mod(y,1024);//因为是10位,所以,没有1024,对1024取余数,把1024转化成0

dlmwrite('b.txt',y);//dlmwrite函数是使得产生的数据之间是用逗号隔开的。

得到b.txt文件,用记事本打开,在最上面加上

MEMORY_INITIALIZATION_RADIX=10;

MEMORY_INITIALIZATION_VECTOR=

同时数据结尾用分号结尾

最后另存为,选择后缀为.coe,将文件导入到ROM以后,单击show,或者是显示初始数据的按钮(各个ISE不太一样),说明数据导入正确。

这是一个coe文件的例子

;Sampleinitializationfilefora

;32-bitwideby16deepRAM(这是注释说明性文字)

memory_initialization_radix=16;(2,10,16,分别表示2进制,10进制,16进制)

memory_initialization_vector=

01234567

89ABCDEF;(最后用“;”结尾)

目标:

生成一个正弦查找表,共32个数,数据宽度16;

1.在matlab中输入a=sin(pi*(0:

31)/16)*32767;//生成16位

符号数,32767为2的15次方减1;

2. a=int16( a);//把a转换成16位整数

3.这时可以把matlab里显示的数据copy出来

memory_initialization_radix=10;

memory_initialization_vector=

paste在这里最后用“;”结尾,然后存成coe文件。

4.或者把数据存成文本文件

fid=fopen('sin.coe','wt');

fprintf(fid,'%d',a);

fclose(fid);

然后打开文件,把

memory_initialization_radix=10;

memory_initialization_vector=

加进去

如下所示:

memory_initialization_radix=10;

memory_initialization_vector=

0       6393      12539      18204      23170      27245      30273      32137      32767

32137      30273      27245      23170      18204      12539       6393          0      -6393

-12539     -18204     -23170     -27245     -30273     -32137     -32767     -32137     -30273

-27245     -23170     -18204     -12539      -6393;

数据之间用空格隔开,最后一个数据用“;”结束(eg:

-6393;)

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 中国风

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1