fpga课设

您所在的位置:网站首页 广告营销包括哪些行业 fpga课设

fpga课设

2023-06-11 01:50| 来源: 网络整理| 查看: 265

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



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3