1绪论
1.1 背景
信号发生器作为一种历史悠久的测量仪器,早在20年代电子设备刚出现时就产生了。随着通信和雷达技术的发展,40年代出现了主要用于测试各种接收机的标准信号发生器,使得信号发生器从定性分析的测试仪器发展成定量分析的测量仪器。同时还出现了可用来测量脉冲电路或用作脉冲调制器的脉冲信号发生器。
1.2 FPGA简介
FPGA(Field-Programmable Gate Array),即现场可编程门阵列,它是在PAL、GAL、CPLD等可编程器件的基础上进一步发展的产物。它是作为专用集成电路(ASIC)领域中的一种半定制电路而出现的,既解决了定制电路的不足,又克服了原有可编程器件门电路数有限的缺点。
FPGA一般来说比ASIC(专用集成芯片)的速度要慢,无法完成复杂的设计,但是功耗较低。但是他们也有很多的优点比如可以快速成品,可以被修改来改正程序中的错误和更便宜的造价。厂商也可能会提供便宜的但是编辑能力差的FPGA。因为这些芯片有比较差的可编辑能力,所以这些设计的开发是在普通的FPGA上完成的,然后将设计转移到一个类似于ASIC的芯片上。
1.3 Quartus II简介
Quartus II design 是最高级和复杂的,用于system-on-a-programmable-chip (SOPC)的设计环境。 Quartus II design 提供完善的 timing closure 和 LogicLock™ 基于块的设计流程。Quartus II design是唯一一个包括以timing closure 和 基于块的设计流为基本特征的programmable logic device (PLD)的软件。 Quartus II 设计软件改进了性能、提升了功能性、解决了潜在的设计延迟等,在工业领域率先提供FPGA与mask-programmed devices开发的统一工作流程。
Altera的Quartus II可编程逻辑软件属于第四代PLD开发平台。该平台支持一个工作组环境下的设计要求,其中包括支持基于Internet的协作设计。Quartus平台与Cadence、ExemplarLogic、 MentorGraphics、Synopsys和Synplicity等EDA供应商的开发工具相兼容。改进了软件的LogicLock模块设计功能,增添 了FastFit编译选项,推进了网络编辑性能,而且提升了调试能力。
Verilog HDL在Quartus II 中的使用流程如图1-1所示:
图1-1 应用流程图

1.4 Modelsim简介
Mentor公司的ModelSim是业界最优秀的HDL语言仿真软件,它能提供友好的仿真环境,是业界唯一的单内核支持VHDL和Verilog混合仿真的仿真器。它采用直接优化的编译技术、Tcl/Tk技术、和单一内核仿真技术,编译仿真速度快,编译的代码与平台无关,便于保护IP核,个性化的图形界面和用户接口,为用户加快调错提供强有力的手段,是FPGA/ASIC设计的首选仿真软件。

2系统设计方案
2.1系统总体设计
本系统以FPGA芯片为中心,外加辅助电路,选取 DDS技术。该系统由FPGA 主控电路,D/A转换电路,调节按键和低通滤波电路,Guagle Wave—任意波形发生器,设置我们需要的波形,依次保存为mif文件,在与波形ROM关联起来,然后经相位累加器输出的地址信息不断寻址从波形ROM输出波形数据从mif文件读取的是离散的波形数据,还得经由数模转换器将离散的序列转换成连续的模拟量,再使用低通滤波器过滤谐波,输出平滑的函数波形。课题要求是需要输出四类波形,由此需要使用四块ROM储存器,依次放入四种波形的波形幅度量化数据,然后使用一个四选一的波形选择器,波形选择模块控制输出波形形状。

图2-1系统总体设计图

图2-2 系统总体RTL视图
2.2按键控制模块
由于开发板使用的按键开关为机械弹性开关,当机械触点断开、闭合时, 由于机械触点的弹性作用,一个按键开关在闭合时不会马上稳定地接通,在断开时也不会立刻断开。因而在闭合及断开的瞬间均伴随有一连串的抖动,为了不产生这种现象而做 的措施就是按键消抖。由于按键个数较多,常用软件方法去抖,即检测出按键闭合后执行一个延时程序,根 据抖动的时间为 5ms~10ms,我们产生一个 20ms 的延时,让前沿抖动消失后再一次检测键的状态,如果仍保持闭合状态电平,则确认为真正有键按下。
2.3 DDS模块
为了使DDS简易信号发生器实现正弦波、方波、三角波和锯齿波 4 种波形的 输出,需要事先在波形数据表 ROM 中存入 4 种波形信号各自的完整周期波形数据。ROM 作为只读存储器,在进行 IP 核设置时需要指定初始化文件,我们将波形数据作为初始化文 件写入其中,文件格式为 MIF 文件。 使用 MatLab 绘制 4 种信号波形,对波形进行等间隔采样,以采样次数作为 ROM 存储 地址,将采集的波形幅值数据做为存储数据写入存储地址对应的存储空间。在本次实验中 我们对 4 种信号波形进行分别采样,采样次数为 2 12 = 4096 次,采集的波形幅值数据位宽 为 8bit,将采集数据保存为 MIF 文件。
2.4数模转换模块
由系统设计图可知,要让信号发生器系统输出波形,还需要使用DA转换模块,这里我选择和板卡相配套的外载ADDA模块,外载 AD/DA 板卡的 DA 部分使用高速 DA 芯片 AD9708,AD9708 由 ANALOG 公司生 产,属于 TxDAC™系列高性能、低功耗 CMOS 数模转换器(DAC)的 8 位分辨率产品。
AD9708 提供出色的交流和直流性能,同时支持最高 125 MSPS 的更新速率。具有灵活 的单电源工作电压范围(2.7 V 至 5.5 V)和低功耗特性,非常适合便携式和低功耗应用。 通过降低满量程电流输出,可以将功耗进一步降至 45 mW,而性能不会明显下降,

图2.3 外载ADDA模块

3各模块方案验证
顶层模块包括 4 部分,D/A 转换器交由外部挂载 的高速 AD/DA 板卡处理,其他 3 部分,相位累加器、相位调制器、波形数据表 ROM 由 FPGA 负责。所以我们要建立一个单独的模块对 DDS 部分进行处理;实验目标还提到要使用按键实现 4 种波形的切换,按键消抖模块必不可少;同时也要声明一个按键控制模块对4 个输入按键进行控制。
3.1顶层模块
时钟、复位和代表波形选择的 4 个按键信号通过顶层传入按键控制模块(key_control),
按键控制模块内部实例化 4 个按键消抖模块,对输入的 4 路按键信号分别进行消抖处理; 消抖处理后的 4 路按键信号组成波形选择信号输入 dds 模块(dds), dds 模块中实例化一个ROM IP核,按顺序存入了一个完整周期的正弦波、方波、三角波、锯齿波的信号波形,根据输入波形选择信号对 rom 中对应信号波形进行读取,将读出波形的幅度数字值输出,传入外部挂载的高速 AD/DA 板卡的 DA 端,板卡根据输入的数字信号生成对应波形的模拟信号。其中,输出信号的频率和相位的调节可在 dds 模块中通过修改参数实现。
图3-1 系统总体RTL视图
3.2 数据选择模块
本实验设计的 DDS 信号发生器,可以实现 4 种信号波形的输出,使用外部物理按键实现波形的切换,一个按键控制一种波形,共使用 4 个按键。外部物理按键的触发信号通过顶层模块输入按键控制模块,按键控制模块内部实例化 4 个按键消抖消抖模块,分别对4路按键信号做消抖处理。消抖处理后的 4 路按键信号组成位宽为 4bit 的波形选择信号并输出至 DDS 模块。波形选择信号初值为 4’b0000,当某一按键按下,波形选择信号对应位电平拉高。

图3-2 数据选择模块RTL视图
3.3 DDS模块
我们设计的 DDS 简易信号发生器想要实现正弦波、方波、三角波和锯齿波 4 种波形的 输出,需要事先在波形数据表 ROM 中存入 4 种波形信号各自的完整周期波形数据。ROM 作为只读存储器,在进行 IP 核设置时需要指定初始化文件,我们将波形数据作为初始化文件写入其中,文件格式为 MIF 文件。

图3-3 DDS模块RTL视图

4系统仿真测试
4.1按键消抖仿真
按键的抖动会产生抖动,抖动的时间是小于 10ms 的,而当有20ms 的时间内都没有抖动就说明按键已经处于稳定状态了。仿真代码如下:
`timescale 1ns/1ns
module tb_key_control();
parameter CNT_1MS = 20’d19 ,
CNT_11MS = 21’d69 ,
CNT_41MS = 22’d149 ,
CNT_51MS = 22’d199 ,
CNT_60MS = 22’d249 ;
wire [3:0] wave_select ;
//reg define
reg sys_clk ;
reg sys_rst_n ;
reg [21:0] tb_cnt ;
reg key_in ;
reg [1:0] cnt_key ;
reg [3:0] key ;
//defparam define
defparam key_control_inst.CNT_MAX = 24;
//sys_rst_n,sys_clk,key
initial
begin
sys_rst_n = 1’b0;
sys_clk = 1’b0;
key = 4’b0000;
#200;
sys_rst_n = 1’b1;
end
always #10 sys_clk = ~sys_clk;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
tb_cnt <= 22’b0;
else if(tb_cnt == CNT_60MS)
tb_cnt <= 22’b0;
else
tb_cnt <= tb_cnt + 1’b1;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
key_in <= 1’b1;
else if((tb_cnt >= CNT_1MS && tb_cnt <= CNT_11MS)
|| (tb_cnt >= CNT_41MS && tb_cnt <= CNT_51MS))
key_in <= {$random} % 2;
else if(tb_cnt >= CNT_11MS && tb_cnt <= CNT_41MS)
key_in <= 1’b0;
else
key_in <= 1’b1;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
cnt_key <= 2’d0;
else if(tb_cnt == CNT_60MS)
cnt_key <= cnt_key + 1’b1;
else
cnt_key <= cnt_key;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
key <= 4’b1111;
else
case(cnt_key)
0: key <= {3’b111,key_in};
1: key <= {2’b11,key_in,1’b1};
2: key <= {1’b1,key_in,2’b11};
3: key <= {key_in,3’b111};
default:key <= 4’b1111;
endcase
key_control key_control_inst
(.sys_clk (sys_clk), //系统时钟,50MHz
.sys_rst_n (sys_rst_n ), //复位信号,低电平有效
.key (key), //输入4位按键
.wave_select (wave_select) //输出波形选择
);
endmodule

图4-1 按键消抖模块仿真波形图
4.2系统总体仿真
整个系统是在前几个个模块的基础上实现的,对于整个系统来说,输入端口为初始时钟激励信号sys_clk、控制复位信号sys_rst_n,数据选择按键key,输出有DAC模块时钟dac_data 和DAC模块波形数据dac_data 。下面代码中延时后改变key信号的值来模拟按键的按下,达到切换波形的效果。仿真结果如图4.2所示。仿真代码如下:
`timescale 1ns/1ns
module tb_top_dds();
parameter CNT_1MS = 20’d19000 ,
CNT_11MS = 21’d69000 ,
CNT_41MS = 22’d149000 ,
CNT_51MS = 22’d199000 ,
CNT_60MS = 22’d249000 ;
wire dac_clk ;
wire [7:0] dac_data ;
reg sys_clk ;
reg sys_rst_n ;
reg [21:0] tb_cnt ;
reg key_in ;
reg [1:0] cnt_key ;
reg [3:0] key ;
defparam top_dds_inst.key_control_inst.CNT_MAX = 24;
initial
begin
sys_clk = 1’b0;
sys_rst_n <= 1’b0;
key <= 4’b0000;
#200;
sys_rst_n <= 1’b1;
end

always #10 sys_clk = ~sys_clk;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
tb_cnt <= 22’b0;
else if(tb_cnt == CNT_60MS)
tb_cnt <= 22’b0;
else
tb_cnt <= tb_cnt + 1’b1;
always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
key_in <= 1’b1;
else if((tb_cnt >= CNT_1MS && tb_cnt <= CNT_11MS)
|| (tb_cnt >= CNT_41MS && tb_cnt <= CNT_51MS))
key_in <= {$random} % 2;
else if(tb_cnt >= CNT_11MS && tb_cnt <= CNT_41MS)
key_in <= 1’b0;
else
key_in <= 1’b1;

always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
cnt_key <= 2’d0;
else if(tb_cnt == CNT_60MS)
cnt_key <= cnt_key + 1’b1;
else
cnt_key <= cnt_key;

always@(posedge sys_clk or negedge sys_rst_n)
if(sys_rst_n == 1’b0)
key <= 4’b1111;
else
case(cnt_key)
0: key <= {3’b111,key_in};
1: key <= {2’b11,key_in,1’b1};
2: key <= {1’b1,key_in,2’b11};
3: key <= {key_in,3’b111};
default:key <= 4’b1111;
endcase
top_dds top_dds_inst
(
.sys_clk (sys_clk ),
.sys_rst_n (sys_rst_n ),
.key (key ),
.dac_clk (dac_clk ),
.dac_data (dac_data )
);
endmodule

图4-2 系统整体仿真波形图
本次的仿真结果使用 ModelSim 软件对顶层模块进行仿真,由图可知,输入与输出信号额能正常传入 传出顶层模块,并按照要求输出信号。

5、程序下载与实物演示
5.1分频模块综合图

图5.1 分频模块综合图
5.2引脚分配
本次课程设计所用的fpga开发板引脚图如图4-1所示:

图5-2 fpga开发板引脚图
5.3实物测试
将以sof为后缀的文件下载到开发板中,Quartus II的程序下载界面如图4-3所示:

图5-3 程序下载界面
实物效果图如图4-4所示:

5-4 实物图
将外载DA模块和板卡组合,用信号线连接DA模块和示波器,上电后,按下按键,在示波器上显示对应的波形。
6、结论
通过上述仿真结果可以得出,基本上满足题目要求的输出四种波形,并能够改变输出波形的频率以及幅度功能。也侧面说明仅使用八位的相位累加器能够满足课题的条件,本系统采用的波形数据为8*255的数据,四片ROM依次放入四种波形的数据。当然,通过改变波形ROM的波形数据,我们可以设计出输出任意波形的信号发生器,相位累加器也可以进行改进,比如用24位的累加器,增加波形的采样点数,那么输出波形的失真度将会大大降低。
任何事情都不能一蹴而就的,毕业设计也是。在设计信号发生器的这段时间遇到了很多难题。首先就是对仿真软件的陌生;选择系统方案是的纠结,起初是想是代码实现波形的输出,三角波、方波等都是线性函数,我们可以编写函数,在时钟的作用下累加,频率控制字改变时钟频率,进而改变输出波形的频率;设置一个最大值,幅度控制字改变最大值,累加值大于最大值就重新开始,但是最后由于正弦波信号时非线性的,而且使用这个函数法会造成比较大的波形失真,选择放弃。第三就是仿真遇到的问题,在顶层模块波形仿真时,对各个输入端已经设置好了对应的输入,但是仿真结果是没有输出,复查了每个模块,没有找到原因。经过不断的尝试后,把波形仿真的input 设置为功能仿真,并创建功能网表,才输出正确的结果。最后在锁定引脚,下载程序后,使用逻辑解析仪显示设计的输出波形,但是并没有接触过signalTapII,在硬件测试过程中产生了种种问题。不得已去论坛找资料自学,终究使signalTapI显示出正弦波、三角波、方波和锯齿波。达到了预先的目标,证明了系统的准确性。
在本次设计中也让我感受到了硬件描述语言覆盖面广、描述能力强以及使用方便、便于修改的特点,本设计也具有一定的实用价值。因为主要做的是软件仿真,在具体硬件实现过程中由于器件本身存在的误差,影响了波形采样,致使最后输出的波形略有失真,也侧面反映了软件和硬件必须要有良好的结合。

怎么csdn贴一张图片这么麻烦啊!!!!!!!!!!!!!
代码就不放了,完全适用野火fpga征途开发板25_DDS
传送门:https://doc.embedfire.com/products/link/zh/latest/index.html

fpga课设-多功能信号发生器相关推荐

  1. imut FPGA课设 基于FPGA的VGA弹球游戏设计 *秋昊

    写在前面的话: 本文主要呈现了一篇IMUT的FPGA课设报告. 课设报告内容(word版),视频演示,程序源码,专业创新实践简介,专业创新实践指导书均已放入下面的百度云链接中,也不大,总共不到20MB ...

  2. 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计)

    基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 文章目录 基于低功耗蓝牙和微信小程序的门禁系统(FPGA课设设计) 一.低功耗蓝牙(BLE)的配置和与FPGA通信代码 1.1 低功耗蓝牙的介 ...

  3. FPGA实现10M多功能信号发生器

    10M多功能信号发生器 废话 总体方案论证与选择 DDS模块方案论证 总体设计方框图 直接数字频率合成技术的基本原理 Verilog HDL代码实现与仿真 信号发生器模块 频率控制字和相位累加器 废话 ...

  4. 基于uniapp+unicloud的日记系统,可课设毕设,有地图定位、图片、视频等功能,可以在手机和模拟器上运行,真机运行

    日记系统 基于uniapp的日记系统,采用unicloud云数据库进行存储,拥有注册登录,发布.删除.修改和查看日记的功能,可以进行地图定位功能,图片.视频的增删改查,还可进行日记首页的封面和头像的更 ...

  5. 飞机订票系统 python实现(大二上数据结构课设)

    说明: 本博客是从课设报告中截取的重要部分.这个飞机订票系统是本人大二上的数据结构课设,功能相对完善,界面相对美观.图形界面,本来想用Qt5(python中一个图形界面的类库,风格偏向于win10)去 ...

  6. 基于FPGA的数字时钟的设计课设(HUAT)

    目录 前言 一.数字时钟课设目标 二.部分代码 1.clock.v代码的编写 2.完整代码 3.仿真代码 总结 前言 学校黄老师的FPGA的设计课设,最后的课设为数字时钟,实现分时的计数功能,带有整点 ...

  7. 纯硬件分立式数字电子钟proteus仿真(数电课设,含时间显示、校准、整点报时、闹钟功能)

    [纯硬件分立式数字电子钟proteus仿真(数电课设,含时间显示.校准.整点报时.闹钟功能)] 数电课设的仿真题目,老师给了优秀,拿出来给大家做个参考,整体电路图如下: 整个设备包括显示环节.闹钟环节 ...

  8. 51单片机数字电子钟设计(数电课设,含时间显示、校准、整点报时、闹钟功能)

    51单片机数字电子钟设计(数电课设,含时间显示.校准.整点报时.闹钟功能) 首先展示硬件设计部分,此处采用proteus仿真演示.其中液晶屏上面一行显示的是实际时间,下面一行显示的是设定闹钟时间.通过 ...

  9. 智能小车硬件课设(循迹,避障,蓝牙等功能实现)

    硬件课设一直拖到还有几天要毕业了才分享一下,做的很粗糙,只是分享一下我们实现的方法,可作为参考. 1.硬件方面用的是N4的板子,如下 2.整个小车完成后如图 3.代码部分是用verilog完成的,项目 ...

最新文章

  1. dataTable.NET的column index的不同定義
  2. 对学校的希望和寄语_家长对学校的寄语怎么写
  3. python时间格式_python 格式化日期
  4. 解读Laravel,看PHP如何实现Facade?
  5. 乱码 设置界面_三星手机突发系统崩溃,现黑屏、乱码!回应了
  6. 使用 Task 简化异步编程
  7. iPhone 12s渲染图曝光,刘海变小了!
  8. python 列表和字段的相关函数
  9. 《PhoneGap移动应用开发手册》——1.5节获取设备位置传感器信息
  10. 华为外包数据库面试问题分享20211225
  11. 微信小程序开发之视频video组件报错:渲染层网络层错误
  12. 数学不行计算机选什么专业好,数学差合适什么专业能学计算机吗?对数学要求低的专业有哪些...
  13. MIS迭代一:增删改查功能测试
  14. 存在正文时不允许未命名的原型参数_用Swift开发macOS程序, 六、原型、格式与开发说明...
  15. lua 区间比较_自然区间匹配算法 - borey的个人空间 - OSCHINA - 中文开源技术交流社区...
  16. mysql 添加字段 描述_mysql新建表 中是否自带描述字段?
  17. 华北电大学计算机考研资料汇总
  18. 合并PDF文件-pdftk下载
  19. Atitit 几大研发体系对比 Stage-Gate体系 PACE与IPD体系 敏捷开发体系 CMMI体系 艾龙 著 1. 3. 1.5:业界领先的研发管理体系简介 2 1 2. 《产品及生命周期
  20. 南京工业大学python课件_南京工业大学-NJUT.ppt

热门文章

  1. Midjourney AI绘画工具使用保姆级教程
  2. 关于统计学中q-q图为什么正态分布是一条直线(R语言绘图说明)
  3. 周鸿祎:把自己当成打工的,一辈子都是打工的!
  4. Stable diffusion安装踩坑(winMaciOS)
  5. superset连接数据库,以及汉化
  6. 《跨境电商——速卖通搜索排名规则解析与SEO技术》一一1.1 初识速卖通的搜索引擎...
  7. 八(7)Elasticsearch02
  8. 华为手机打开图片很慢是怎么回事_华为手机相册打开很慢怎么解决?
  9. 哈密顿圈问题是NP完全的
  10. 微信抢号软件_“微信营销管理软件”企业微信个人号微信管控系统