基于FPGA的正弦信号发生器设计—毕业设计 下载本文

内容发布更新时间 : 2024/12/23 0:16:39星期一 下面是文章的全部内容请认真阅读。

相位累加器流程图如图4.3所示 开 始 时钟上升沿到? NO YES

相位累加

累加值寄存

高W位输出

结 束 图4.3 相位累加器流程图

设计要求输出频率范围为1KHZ—10MHZ,频率步进为100HZ。根据第二章介绍最高输

出一般是系统时钟的40%。经过计算,设计选用系统时钟为30MHZ时能实现设计要求。

f?30MHz?40%?12MHz?10MHz

确定相位累加字长时,考虑到频率分辨率要等于或小于频率步进值,而且累加器字

长一般为8的整数倍。由第二章公式2.2计算后得出符合设计要求的累加器字长为N=24。

图4.4 相位累加器模块

fmin?fclk30MHz??1.788Hz?100Hz2N224由上分析设计的相位累加器模块如图4.4所示。

K[23..0]为输入的频率字,EN为高电平使能,RESET是高电平清零,CLK为系统时钟

输入,DOUT[7..0]是相位累加器高8位输出,该输出将作为波形存储器地址线对波形ROM进行寻址。图4.5为该模块的时序仿真图。

- - 19 - -

图4.5 相位累加器进行累加、清零的时序仿真图

4.2.2 波形ROM的设计

这个模块是一个相对简单的模块。首先要确定波形ROM的地址线位数和数据的字长,根据噪声功率的角度看波形ROM的地址线位数应该等于或略大于字长。由于设计选择的DAC位数为8,这样ROM的字长很明显该和DAC的字长相一致。而地址线的位数同样确定为8位。

波形存储器利用相位累加器输出的高8位作为地址线来对其进行寻址,最后输出该相

位对应的二进制正弦幅值。正弦数据的产生可采用如下办法:

在MATLAB中编辑程序:

>> clear tic; t=2*pi/256 t=[0:t:2*pi]; y=128*sin(t)+128; round(y); t =0.0245 ans

将得出的结果转化为8位的二进制数据,起幅值对应在00000000-11111111区间内。

最后利用得到的二进制数据用VHDL编写程序实现正弦ROM的设计。

图4.6 正弦波形ROM

- - 20 - -

图4.6为正弦波形ROM模块,该模块时序仿真如图4.7所示。

图4.7 波形ROM时序仿真图

4.2.3 频率控制模块的设计

设计要求频率步进为100HZ,但由于频率范围很宽,要求改变频率时如果跨度较大则

需要很长的时间通过频率步进端来改变输出频率。因此在实际频率控制模块中,增加了4个附加的频率步进按钮。分别为最小步进(100HZ)的10倍、100倍、1000倍和10000倍即1KHZ、10KHZ、100KHZ和1MHZ。这样从大到小地利用频率步进值便可很快地调到所需要的频点。

实现这个设计的方法也很简单,由第二章公式 f0?k?fc/2N可以看出,当fc/2N确

定后f0与K成正比关系。计算出输出频率f0?100HZ时K的值,则这个K的值就是频率字步进100HZ时频率字K的增量,记为?K。要成倍地增加步进频率,则只需以相同的倍数增加?K的值。

将f0?100HZ,fC?30MHZ,N=24 带入f0?k?fc/2N得到100HZ步进时?K值为

56。则实现1KHZ、10KHZ、100KHZ和1MHZ的步进K的增量分别为10?K、100?K、1000?K和10000?K。

由于设计要求频率输出范围为1KHZ-10MHZ,则K值的最小值为560,最大值为5600000。

设系统其始和复位时K的初值为560,即初始化频率为1KHZ。然后再根据所要输出的频率调整相应的步进量。图4.9为频率控制模块流程图。

图4.8为VHDL设计的频率控制模块

模块各引脚说明如下: RESET为频率字复位端,高电平有效。CLK接入的是系统时钟,目的是驱动模 块内部延时计数器,该计数器的作用是:当进行频

率操作时,频率的增、减确认信号必须在按键状 图4.8 频率控制模块 态稳定后才能进行,所以加入一定的延时。同时

还可以达到按键去抖动的效果。STEP1[4..0]:频率步进“增”操作端,各端口分别为STEP1(4)步进100HZ,STEP1(3)步进1KHZ,STEP1(2)步进10KHZ,STEP1(1)步进

- - 21 - -

100KHZ,STEP1(0)步进1MHZ。STEP2[4..0]:频率步进“减”操作端,各端口对应操作值同上。

KOUT为输出频率字,送至DDS主模块。

开 始

频率字赋初值 有键按下? N Y Y

复位键? N 频率增操作? N Y 频率减操作 增加对应值 减少对应值

频率字输出 结 束 图4.9 频率控制模块流程图

频率控制模块时序仿真如图4.10所示。

图4.10 频率控制模块时序仿真图

- - 22 - -

4.3 外围硬件设计

4.3.1 显示模块

该模块与频率控制模块有直接的联系,其功能就是显示输出频率值,显示方式为十进制数。由于最大频率值为10MHZ为8位数,则需要8个数码管做为频率值显示。又最小频率步进为100HZ,则只需要设计六位十进制加、减法计数器进行从百位到十兆位的频率的增、减操作,个位和十位数据恒定为零。

图4.11 频率值计数输出模块

图4.11为计数输出模块,与频率控制模块类似,RESET端为频率初始化,CLK为接入系统时钟,STEP1、STEP2分别为频率增、减控制端,KOUT为显示数据输出。该模块时序仿真图如图4.12所示

图4.12 频率值计数模块

图4.13为输出频率译码扫描显示模块,其功能为将计数模块输出的频率值译成七段

码并扫描显示。DATA1[3..0]到DATA6[3..0]为频率数据百位至十兆位BCD码输入端,SCAN[7..0]是输出扫描信号,DISPOUT[6..0]则为数据七段码输出。

图4.13 译码扫描显示模块

- - 23 - -