相位累加器流程图如图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 - -