1、 1 EDA课程设计报告 正弦波信号发生器的设计 2 一、设计目的: 进一步熟悉 QuartusII 及其 LPM_ROM 与 FPGA 硬件资源的使用方法。 培养动手能力以及合作能力。 二、设计要求: 1、clk 为 12MHz。 2、通过 DAC0832 输出正弦波电压信号,电压范围 0-5V。 3、通过示波器观察波形。 三、设计内容: 在 QUARTUSII 上完成正弦波信号发生器的设 计,包括仿真和资源利用情况了解(假设利用 Cyclone器件) 。 最后在实验系统上实测, 包括 FPGA 中 ROM的在系统数据读写测试和利用示波器测试。 信号输出的 D/A 使用实验系统上的 ADC0
2、832。 四、 设计原理: 图 1 所示的正弦波信号发生器的结构由四部分 组成: 1、 计数器或地址发生器(这里选择 10 位) 。 3 2、 正弦信号数据 ROM (10 位地址线, 8 位数据线) , 含有 1024 个 8 位数据(一个周期) 。 3、 VHDL 顶层设计。 4、 8 位 D/A(实验中可用 ADC0832 代替) 。 图 1 所示的信号发生器结构图中,顶层文件 singt.vhd 在 FPGA 中实现,包含两个部分:ROM 的 地址信号发生器, 由 10 位计数器担任;一个正弦数 据 ROM, 由 LPM_ROM 模块构成。 LPM_ROM 底层是 FPGA 中的 EA
3、B、ESB 或 M4K 等模块。地址发生器的时钟 clk 的输入频率 fo 与每周期的波形数据点数(在此 选择 1024 点) ,以及 D/A 输出的频率 f 的关系是: f=fo/1024 图 1 正弦信号发生器结构框图 VHDL 顶层设计 singt.vhd 10 位计数器 (地址发生器) 正弦波数据 存储 ROM 8 位 D/A 4 FPGADAC08328 clk 运放 Vo 按键 图 2 正弦波信号发生器的设计图 五、 设计步骤: 1、 建立.mif 格式文件 首先,mif 文件可用 C 语言程序生成,产生正弦波 数值的 C 程序如下: #include #include main(
4、) int i; float s; for(i=0;i sdata.mif; 将生成的 sdata.mif 文件, 再加上.mif 文件的 头部说明即可。 .mif 文件的头部说明如下所示: WIDTH=8; DEPTH=1024; ADDRESS_RADIX=DEC; DATA_RADIX=DEC; CONTENT BEGIN 0:127; 1:130; 2:133; 3:136; 6 4:139; 5:143; 6:146; (数据略去) 1016:102; 1017:105; 1018:108; 1019:111; 1020:115; 1021:118; 1022:121; 1023:1
5、24; END; 2、 在设计正弦波信号发生器前,必须首先完成存 放波形数据 ROM 的设计。利用 MegaWizard Plug-In manager 定制正弦信号数据 ROM 宏功能块,并将以 上的波形数据加载于此 ROM 中。设计步骤如下: 1) 打开 MegaWizard Plug-In manager 初始对话 7 框。在 Tools 菜单中选择 MegaWizard Plug-In manager 产生一个对话框,选择 Create a new custom.项,即定制一个新的模块。单击 Next 按 钮后,在所产生的对话框的左栏选择 Storage 项下 的 LPM_ROM,再选
6、择 Cyclone器件和 VHDL 语言方 式;最后输入 ROM 文件存放的路径和文件名: e:wwwrom_1024.vhd,单击 Next 按钮。 2) 选择 ROM 控制线、 地址线和数据线。 在弹出的 对话框中选择地址线位宽和 ROM中数据数分别为 10 和 1024;选择地址锁存控制信号 clock。 3) 单击 Next 按钮在对话框的“What should the RAM” 栏选择默认的 Auto。 在栏选择 “Do you want toYes,use this file for memory content data” 项,并按 Browse 钮,选择指定路径上的文件 rom_1024.mif。在“Allow In-System Memory” 栏选择打勾,并在“The Instance ID of this ROM” 栏输入 ROM1,作为 ROM 的 ID 名称。最后单击 Next 按钮,再单击 Finish 按钮后完成 ROM 定制。 8 4) 打开此文件可以看到其中调用初始化数据文 件的语句为:init_file = “sd