资源预览内容
第1页 / 共6页
第2页 / 共6页
第3页 / 共6页
第4页 / 共6页
第5页 / 共6页
第6页 / 共6页
亲,该文档总共6页全部预览完了,如果喜欢就下载吧!
资源描述
ASIC实验报告基于Altera DE2的DDS设计设计思路概述DDS建立在采样定理基础上,首先对需要产生的波形进行采样,将采样值量化后存入查找表,然后通过地址读出数据,再经过D/A得到模拟量。以输出正弦波为例,Asin(t+),A是幅度,使用乘法器得到,我们主要是控制相位,即控制频率与初相。 等时间输出,可以视为相位是累加变化的。相位输出就是ROM的地址信号,通过改变步长K,达到控制频率的效果。总体设计框图及详细说明我们设计的部分主要是控制逻辑与数字频率合成DDS的部分。控制逻辑主要负责发送复位信号、发送波形选择信号,发送相位控制字K。复位信号可以送至相位累加器,使其置零,而波形选择信号,可以是作为复用输出的选择信号,相位控制字则送到相位累加器。首先我们通过matlab产生正弦序列,模拟采样量。这里要注意matlab产生的是浮点数,我们可以根据设计要求选取幅度值后,通过round函数使其成为整数。假设时钟周期是Tc,则输出的正弦序列周期Ts=Tc*N/K(N是每个周期的采样点数,K是频率控制字)。所以频率fs=K*fc/N,根据奈奎斯特定理,fs2f采样,显然f采样就是时钟频率fc。因此K要小于N/2。设计中要求我们每个周期采样216次(因此K215),并且用16bit表示。但是由于ROM空间不够,因此利用正弦序列的对称性,只需要采样1/4周期的值,即需要214个采样点。而且全部是非负的值,因此可以只用15bit表示。大大减少需要的存储空间。指标分析,ROM大小为214*15bit,时钟50MHz,fmax25MHz,fmin76.3Hz(即分辨率)。模块设计框图、相关时序1. 复位按键状态机 模块图 状态机由于按键按下后会自动弹起,所以只能用状态机,不能用简单的译码判断。这里采用moore机,reset输出只与状态有关。2. ROM模块直接调用altera的IP核,存储器初始化文件mif通过quartus建立,数据由matlab 生成,直接复制插入到mif中。3. 信号处理逻辑模块在这里与设计框图略微有点不同,我们把构造地址也归入此模块。此模块主要实现这么几个功能。1. 构造正逆向地址,因为正弦序列的轴对称性,必须要构造正逆向地址,逆向地址其实只需要用地址总长度减去正向地址。取1:0flag计数4个1/4周期,当flag0=1时应该用逆向地址,flag0=0时应该用正向地址。2. 生成需要的正弦序列,因为存储的是15bit原码,实际要求为16位,所以我们要扩充位数,而且还要适当取补码。当flag1=0时,应该用原码输出,补上最高位,当flag1=1时,应该用补码输出,进行符号扩展。3. 利用正弦序列生成三角波、方波、锯齿波序列。4. 地址累加器由寄存器与加法器构成,在时钟触发下,将寄存器中数值与频率控制字相加,然后将结果保存至寄存器中。5. 信号选择模块由复用器构成,在控制逻辑影响下,切换多种波形的输出。代码及必要注释1.复位按键状态机module state(clk,button,reset); /reset按键的状态机localparam 1:0 got1=0,got0=1,got01=3;input button;input clk;output reset;reg 1:0current;reg reset;always (negedge clk) /通过检测01序列判断是否按下按键case(current)got0: begin reset=1; if(button=0) current=got0; else current=got01; endgot1: begin reset=1; if(button=0) current=got0; else current=got1; endgot01:begin reset=0; current=got1; enddefault:begin reset=1; current=got1;end endcaseendmodule2.主模块module dds1(button,change,data,clk,qout);input 1:0change;/波形选择开关input button;/复位按键input 14:0data;/频率控制字input clk;output 15:0qout;reg 13:0add;reg 13:0add1;wire 14:0sin_DR;wire 15:0rec;reg 15:0trio;reg 15:0sin_DR1;reg 1:0flag;wire 1:0current;wire reset;reg 15:0qout;wire 15:0qout1;state state1(clk,button,reset); /复位状态机例化always (negedge clk or negedge reset) /带复位功能的相位累加器begin if(reset)beginadd=4h0000;end else add=add+data;endalways (negedge add13 or negedge reset) /1/4周期计数器 if(reset) flag=0; else flag=flag+1;always (negedge clk) /构造正逆向地址 if(flag0=1) add1=214-1-add; else add1=add;sinROM sindate(.address(add1),.clock(clk),.q(sin_DR);/例化ROMalways (sin_DR) /构造原码补码 sin_DR1=flag1,15flag1sin_DR+flag1;assign sin=sin_DR1;always (add1,flag) trio=2flag1,14flag1add1+flag1;assign rec=16flag1;assign qout1=(change1=0)?sin:(change0=0)?trio:rec);always (negedge clk) qout=qout1;endmodule实验现象与结论本来应该用signaltap来分析波形。但是忘记截图,这里只能用modelsim的仿真波形来代替。显然功能仿真中没有算入延时等影响。当然即使采用时序仿真,也不能得到与实际一样的波形。频率控制字为101,根据计算频率大约为7.7*104Hz,周期大约为1.29*10-5s,即约为1.29*107ps,基本与图形数据吻合。但是波形中出现了一些错误的脉冲,是因为代码设计中在取补码时存在一些问题。思考题1. DDS的频率控制字(步长)与数字频率的关系?在前面设计思路中已分析。假设时钟周期是Tc,则输出的正弦序列周期Ts=Tc*N/K(N是每个周期的采样点数,K是频率控制字)。所以频率fs=K*fc/N,由数字信号知道=*T,这里的T也就是Tc,两边同时除以2就得到模拟频率与数字频率的关系,所以f(数字)=K/N。2. 按照我们的设计,输出信号的频率是什么样的?输出信号的频率的调整分辨率是多少?在前面设计思路中已分析。根据奈奎斯特定理,fs2f采样,显然f采样就是时钟频率fc。因此K要小于N/2。设计中要求我们每个周期采样216次(因此K215),并且用16bit表示。但是由于ROM空间不够,因此利用正弦序列的对称性,只需要采样1/4周期的值,即需要214个采样点。而且全部是非负的值,因此可以只用15bit表示。大大减少需要的存储空间。指标分析,ROM大小为214*15bit,时钟50MHz,fmax25MHz,fmin763Hz(即分辨率)。3. 按照我们的设计,输出信号的频率误差、量化误差呈现什么样的规律?由于频率分辨率大约为0.76KHz,因此实际频率与要求频率大概会在-0.76KHz,0.76KHz间波动,大概成均匀分布。这里的量化是采用四舍五入法,是一种均匀量化器。由通信原理中均匀量化器的信噪比公式(S/N)=6.02n+4.77+20log10D,n为量化器宽度,这里是16,D=有效值/幅度值,对正弦信号D=2。所以(S/N)98dB。本来误差产生谐波分量,对于多次谐波分量,对于输出高频信号,谐波分量频率差距较大可以直接通过滤波器滤掉。但是由于采样。Gp(jf)=1Tn=-Gaj(f+kfc),频谱搬移过程中可能出现某些谐波分量被搬移到所需频率的附近,此时不容易利用滤波器过滤。4.我们的设计是否完善?有哪些不完善,如何改进?为什么?不完善,相位累加器可以采用流水线的方式实现。利用预先进位算法。ROM的空间仍旧占用太大。利用三角恒等式可以进一步压缩ROM空间。
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号