(原创声明:该文是作者的原创,面向对象是FPGA入门者,后续会有进阶的高级教程。宗旨是让每个想做FPGA的人轻松入门,作者不光让大家知其然,还要让大家知其所以然!每个工程作者都搭建了全自动化的仿真环境,只需要双击top_tb.bat文件就可以完成整个的仿真(前提是安装了modelsim),降低了初学者的门槛。如需整个工程请留言(WX:Blue23Light),不收任何费用,但是仅供参考,不建议大家获得资料后从事一些商业活动!)
既然前面通过DDS可以产生不同频率的正弦波(余弦波),那就可以让两个不同频率的正弦波叠加,后续再设计滤波器吧高频的正弦波滤除。
这节课先实现两个不同频率正弦波的叠加,功能很简单,知识点主要就是加减运算的位数扩展。
工程的要求是系统时钟是100MHz,低电平复位,实现7.8125K和500K频率正弦波的叠加。之所以选择7.8125K的正弦波,是想每50个系统时钟从ROM里面读出来一个数据,这样正弦波的频率就是(100M/(256*50))=7.8125K,为什么选择50个系统时钟读一次ROM,主要是滤波算法处理需要一定的时间,50个时钟周期就是2MHz的处理频率。
频率控制字F_WORD设置为500K/(100M/2^32)=21474836。
每50个系统时钟从ROM中读出来一个数据,得到频率是7.8125K的正弦波。
500KHz的正弦波用DDS来实现。
下面是实现两个不同频率正弦波的叠加,这儿用到了位数的扩展。因为wave_out0和wave_out1都是8bit有符号的整数,取值范围是-128——127,那wave_out0和wave_out1相加后的取值范围是-256-255,所以输出wave_out必须扩展一位才能保证结果不会溢出。而wave_out0和wave_out1只需要把符号位扩展一位直接叠加即可。
双击sim目录下的top_tb.bat文件,完成自动化的仿真。
仿真波形如下所示,由于采样率的问题,波形叠加后会有很多的毛刺。
下节课我们就设计滤波器,将高频的毛刺滤掉!