基于FPGA的正弦信号发生器设计
前言
用FPGA做正弦信号发生器是我上大学期间在实验室里做的,主要用的ROM-IP和DA数模转化芯片,将数字信号转为模拟信号后,通过示波器进行显示。
我记得当时用FPGA做了正弦、三角波、方波信号,然后通过DA输出在示波器上显示信号........现在回想起来,自己感觉挺有意思的,当时学习时确实花费了不少时间去搞它。
好多同学通过关注《FPGA的故事》公众号,咨询我是不是可以讲一下正弦信号发生器的设计?
为了感谢大家对《FPGA的故事》公众号的关注,我把一些上学期间做的小实验慢慢分享给大家,希望对大家学习FPGA有帮助!
希望大家继续关注《FPGA的故事》,你们的支持就是我最大的动力!
应用知识储备说明
用FPGA做正弦信号发生器,从专业学科角度来说它属于通信行业了。在通信行业里,信号的处理肯定要用到两种信号类型:模拟信号和数字信号(这个概念大家可以自己上网查一下,这里不详细介绍)。这两种信号之间如何进行转化呢,就要用到AD芯片和DA芯片。
我想大家都知道AD和DA这两个名词吧,我们现在就用正弦信号发生器做个说明吧。
我把上大学期间做个实验给大家讲一下,如上图所展示的一样。当时我是通过信号发生器产生一定频率的正弦信号,然后再通过AD芯片(模拟转数字)将信号发生器输出的模拟信号转为数字信号;再将转化后的数字信号通过FPGA进行采集,把采集到的数据传递给DA芯片(数字转模拟),最后通过示波器观察信号是不是正弦波。
今天我们要做的实验,由于没有真实额信号源发生器,以及AD、DA和示波器;只能通过在FPGA中模拟正弦波的数字信号来搞了,然后通过仿真软件进行测试。
程序设计
我们这里要用到FPGA的ROM-IP来做实验,原理就是把正弦信号波形的数据存储到ROM中,然后从里面读出来就行了,如下图所示。
注意:由于大家使用的FPGA芯片不同(alter 或者Xilinx),生成的ROM操作流程也不同,这里不再介绍。
我们使用波形软件生成自己想要的波形参数,然后把生成的数据转换为coe文件,如下图所示。
这些准备后,我们调用一个ROM-IP将参数导入,就可以写代码控制ROM了。(此时,感觉自己又回到了大学时代,心情激动.......)
- top程序接口
名称 |
方向 |
位宽 |
说明 |
clk |
Input |
1 |
工作时钟 |
reset |
Input |
1 |
复位信号(active high) |
data |
Output |
8 |
波形数据 |
代码:
测试文件:
仿真结果:如下图所示,对data_out通过鼠标右键选择为模拟信号,数据信号就会变成正弦波形模式。