基于FPGA的正弦信号发生器设计

前言

用FPGA做正弦信号发生器是我上大学期间在实验室里做的,主要用的ROM-IP和DA数模转化芯片,将数字信号转为模拟信号后,通过示波器进行显示。

      我记得当时用FPGA做了正弦、三角波、方波信号,然后通过DA输出在示波器上显示信号........现在回想起来,自己感觉挺有意思的,当时学习时确实花费了不少时间去搞它。

      好多同学通过关注《FPGA的故事》公众号,咨询我是不是可以讲一下正弦信号发生器的设计?

     为了感谢大家对《FPGA的故事》公众号的关注,我把一些上学期间做的小实验慢慢分享给大家,希望对大家学习FPGA有帮助!

     希望大家继续关注《FPGA的故事》,你们的支持就是我最大的动力!

应用知识储备说明

用FPGA做正弦信号发生器,从专业学科角度来说它属于通信行业了。在通信行业里,信号的处理肯定要用到两种信号类型:模拟信号和数字信号(这个概念大家可以自己上网查一下,这里不详细介绍)。这两种信号之间如何进行转化呢,就要用到AD芯片和DA芯片。

我想大家都知道AD和DA这两个名词吧,我们现在就用正弦信号发生器做个说明吧。

基于FPGA的正弦信号发生器设计

我把上大学期间做个实验给大家讲一下,如上图所展示的一样。当时我是通过信号发生器产生一定频率的正弦信号,然后再通过AD芯片(模拟转数字)将信号发生器输出的模拟信号转为数字信号;再将转化后的数字信号通过FPGA进行采集,把采集到的数据传递给DA芯片(数字转模拟),最后通过示波器观察信号是不是正弦波。

今天我们要做的实验,由于没有真实额信号源发生器,以及AD、DA和示波器;只能通过在FPGA中模拟正弦波的数字信号来搞了,然后通过仿真软件进行测试。

程序设计

我们这里要用到FPGA的ROM-IP来做实验,原理就是把正弦信号波形的数据存储到ROM中,然后从里面读出来就行了,如下图所示。

注意:由于大家使用的FPGA芯片不同(alter 或者Xilinx),生成的ROM操作流程也不同,这里不再介绍。

基于FPGA的正弦信号发生器设计

     我们使用波形软件生成自己想要的波形参数,然后把生成的数据转换为coe文件,如下图所示。

基于FPGA的正弦信号发生器设计

基于FPGA的正弦信号发生器设计

这些准备后,我们调用一个ROM-IP将参数导入,就可以写代码控制ROM了。(此时,感觉自己又回到了大学时代,心情激动.......)

  •                                                                          top程序接口

名称

方向

位宽

说明

clk

Input

1

工作时钟

reset

Input

1

复位信号(active high)

data

Output

8

波形数据

代码:

基于FPGA的正弦信号发生器设计

测试文件:

基于FPGA的正弦信号发生器设计

仿真结果:如下图所示,对data_out通过鼠标右键选择为模拟信号,数据信号就会变成正弦波形模式。

基于FPGA的正弦信号发生器设计