基于vhdl的DDS设计Word下载.docx

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

基于vhdl的DDS设计Word下载.docx

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

基于vhdl的DDS设计Word下载.docx

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('

/sin_coe.txt'

y_sin);

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文件,用记事本打开,在最上面加上

同时数据结尾用分号结尾

最后另存为,选择后缀为.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.或者把数据存成文本文件

sin.coe'

'

%d'

a);

然后打开文件,把

memory_initialization_radix=10;

加进去

如下所示:

6393 

12539 

18204 

23170 

27245 

30273 

32137 

32767

32137 

-6393

-12539 

-18204 

-23170 

-27245 

-30273 

-32137 

-32767 

-30273

-27245 

-12539 

-6393;

数据之间用空格隔开,最后一个数据用“;

”结束(eg:

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

当前位置:首页 > 求职职场 > 社交礼仪

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

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