1.3 DDS模块设计
1.3.1 控制波形类型
消抖过后的按键输入到本模块,同样使用明德扬至简设计法和计数器模板,可以秒速写出控制波形类型的代码。按键1每按下一次,即key_done[0]有效时,wave_cnt加1,加到3时归0,否则保持不变。wave_cnt为0时输出正弦波,1时输出三角波,2时输出锯齿波,默认时输出正弦波;至简设计法和计数器模板有多好用,越用越绝精妙。完整代码如下:
1.3.2 改变波形频率
话不多说,反手又是一个明德扬计数模板。按键2每按下一次,即key_done[1]有效时,i乘以2,加到64时归0,否则保持不变。这里通过i可以改变频率的原理是ROM中512个数据为一个周期,i等于1的话,采集一个周期需要512次,clk/512即为频率,i为2时,只需要采集256次即完成一个周期,频率为clk/256。 当然也可以直接通过分频改变clk,从而达到改变频率的效果。完整代码如下:
1.3.3 改变波形相位
依旧是百用不厌的计数器模板,按键3每按下一次,即key_done[2]有效时,初始相位加30,加到360时归0,否则保持不变。达到改变相位的目的。
因此,通过至简设计法、计数器模板,可以轻松达到设计目标。完整代码如下:
1.3.4 mIF文件的生成
程序中我们会用到一个ROM用于存储512个8位的波形数据,首先我们需要准备ROM的初始化文件(mif文件)。以下为生成正弦波数据mif文件的方法:首先打开Guagle_wave工具,选择菜单"查看"->”全局参数设置”,设置参数如下:
调用ROMIP核,并将mif导入ROM,其他波形同理。