
1实验目的
熟悉QuartusII及其LPM_ROM与FPGA硬件资源的使用方法。
2实验原理
正弦信号发生器的结构由3部分组成,数据计数器或地址发生器、数据ROM和D/A。性能良好的正弦信号发生器的设计,要求此3部分具有高速性能,且数据ROM在高速条件下,占用最少的逻辑资源,设计流程最便捷,波形数据获最方便。图5.12.1所示是此信号发生器结构图,顶层文件SINGT.VHD在FPGA中实现,包含2个部分:ROM的地址信号发生器由5位计数器担任,和正弦数据ROM,其原理图如图5.12.2所示。拒此,ROM由LPM_ROM模块构成能达到最优设计,LPM_ROM底层是FPGA中的EAB或ESB等。地址发生器的时钟CLK的输入频率f0与每周期的波形数据点数(在此选择点)以及D/A输出的频率f的关系是:
图5.12.1 正弦信号发生器结构图
图5.12.2 正弦信号发生器原理图
3 实验内容
在Quartus II上完成正弦信号发生器设计,包括仿真和资源利用情况了解(假设利用Cyclone器件)。最后在实验系统上实测,包括SignalTap II测试、FPGA中ROM的在系统数据读写测试和利用示波器测试。最后完成EPCS1配置器件的编程。
4 实验预习与思考
如果CLK的输入频率是50MHz,ROM中一个周期的正弦波数据是128个,要求输出的正弦波频率不低于150KHz,DAC0832是否能适应此项工作?为什么?
5 原理图的建立与仿真
(1) 为此工程建立文件夹,文件夹名为zxb
(2) 建立原理图文件, 单击New→Device Dising→Block Diagram/Schematic file→OK,弹出原理图窗口如图5.12.3所示,
图5.12.3 原理图建立窗口
(3) 双击原理图窗口的任意处弹出如图5.12.4窗口,在窗口的Name处输入input(输入节点),点击ok,然后保存,文件名为cnt.
图5.12.4 原理图输入窗口
(4) 创建工程与第2章2.1节的方法相同。
(5)六位二进制计数器原理图的生成方法
①建立VHDL语言的原理图,
单击工具栏的File→New→Device Dising→VHDL File→OK,弹出原程序输入窗口,将原程序写入。原程序如下:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_11.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY CNT6b IS
PORT (CLK,RST,EN : IN STD_LOGIC;
CQ : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);
END CNT6b;
ARCHITECTURE behav OF CNT6b IS
BEGIN
计数器异步复位
ELSIF CLK'EVENT AND CLK='1' THEN --检测时钟上升沿
IF EN = '1' THEN --检测是否允许计数(同步使能)
CQI := CQI + 1; --允许计数
CQ<=CQI;
END behav;
②存盘,命名.
③生成原理图
单击工具栏的File→Credte Update→ Create Symbol Files for Current File。此处要等待一点时间,检查原代码是否正确,若没问题将弹出原理图建立成功的提示如图5.12.5所示。
图5.12.5 原理图建立成功提示
④双击已创建的cnt原理图窗口弹出图5.12.6窗口,单击窗口左上脚Project即可看到刚才建好的CNT6b工程文件,用鼠标左键选择CNT6b,再单击ok即可将cnt6原理图模块调入原理图窗口。
图5.12.6 调出已建好的CNT6b工程文件
⑤输出、输入节点复制有多种方法:按住键盘上的Ctrl键,然后用鼠标拖动输入节点即可完成复制,也可以采用复制粘贴的方法,或者在从元件库中再调输入、输出节点。
(6)定制LPM_ROM元件
①单击File →New→other Files→Hexadecimal[lntel-Fmat]File] (16进制格式),弹出图5.12.7窗口,将255改成,单击OK进入下一个窗口如图5.12.8所示。在图5.12.8窗口中输入正弦波的个点,输入完成存盘。
图5.12.7 正弦波的个点文件生成
图5.12.8 正弦波的个点的输入
②调用ROM方法:打开MegaWizard Plug-In Manager初始对话框。在Tools菜单中选择MegaWizard Plug-In Manager,产生如图5.12.9的界面,选择Create a new custom…项,定制一个新的模块(如果要修改一个已编好的LPM模块,则选择Edit an existing custom…项)。单击Next按钮后,进入图5.12.10窗口,在左栏选择Storage项下的LPM_ROM,再选择Cyclone器件和VHDL语言方式;最后输入ROM文件存放的路径和文件名:E\\zxb\\rom6.vhd。
图5.12.9 定制新的宏模块
图5.12.10 LPM宏模块设定
③设置完成单击Next进入图5.12.11窗口,选择ROM控制线、地址线和数据线。在图5.12.11和5.12.12窗口中选择地址线位宽和ROM中数据数分别为8和,在“What should the RAM block tybe be”选择默认的Auto.;选择地址锁存控制信号inclock。
图5.12.11 器件参数设置
图5.12.12 选择地址锁存信号
④设置完成单击next按钮进入图5.12.13所示窗口。在图5.12.13所示窗口的“Do you want to…”栏上选择“Yes, use this for the memory content data”项,并按Browse按钮,选择指定路径上的文件cnt.hex。
在“Allow in-System Memory…”栏上选择打勾,并在“The Instance ID of this ROM”栏输入roma,作为此ROM进行“在系统”测试和读写(如果需要读写多个嵌入式的LPM_ROM或 LPM_RAM ,ID号roma就作为此 ROM的识别名称),这种读写不影响 FPGA 中电子系统的正常工作。
图5.12.13 调入ROM初始化数据文件并选择在系统读写功能
⑤连续单击next按钮,最后单击按钮完成。
(6)仿真
仿真方法与计数器的仿真方法相同。正弦波RTL电路如图5.12.14所示,仿真结果如图5.12.15所示,从图5.12.15中可知正弦波的输出结果是按16进制显示个点,但为了图的清楚,该图只显示了部分结果。
图5.12.14 RTL电路
图5.12.15 正弦波仿真结果
(6)引脚下载配置
引脚下载配置可参考2.2节的方法,电路结构选择模式5(N0.5),其引脚具体设置如图5.12.16所示。
图5.12.16引脚设置
(7)嵌入式逻辑分析仪的设置
嵌入式逻辑分析仪的设置可参考第2章的2.3节的方法,其分析结果如图5.12.17所示。图中Q的输出方式是可选择的,用鼠标右键单击,在弹出的快捷菜单中选择Bus Display Format→Unsigned Line Chart。用同样的方法可设置cnt6b的输出方式,在弹出的块捷菜单中选择Bus Display Format→Signed Line Char.
图5.12.17 逻辑分析仪分析结果
从逻辑分析仪的输出结果可以看出q的输出为正弦波,cnt6b的输出采用的是有符号线性输出方式。信号输出的D/A使用实验系统上的DAC0832,注意其转换速率是1μs。其引脚功能简述如下:
ILE:数据锁存允许信号,高电平有效,系统板上已直接连在+5V上;WR1、WR2:写信号1、2,低电平有效;XFER:数据传送控制信号,低电平有效;VREF:基准电压,可正可负,-10V~+10V;RFB:反馈电阻端;IOUT1/IOUT2:电流输出端。D/A转换量是以电流形式输出的,所以必须将电流信号变为电压信号;AGND/DGND:模拟地与数字地。在高速情况下,此二地的连接线必须尽可能短,且系统的单点接地点须接在此连线的某一点上。
建议选择GW48系统的电路模式No.5,DAC0832的8位数据口D[7..0]分别与FPGA的PIO31、30..、24相连,如果目标器件是EP1CQ240,则对应的引脚是:21,41,128,132,133,134,135,136;时钟CLK接系统的clock0,对应的引脚是28,选择的时钟频率不能太高(转换速率1μs,)。还应该注意,DAC0832电路须接有+/-12V电压:GW48系统的+/-12V电源开关在系统左侧上方。然后下载SINGT.sof到FPGA中;波形输出在系统左下角,将示波器的地与GW48系统的地(GND)相接,信号端与“AOUT”信号输出端相接。如果希望对输出信号进行滤波,将GW48系统左下角的拨码开关的“8”向下拨,则波形滤波输出,向上拨则未滤波输出。
6.实验报告
(1)详细分析各模块的逻辑功能,及其他们工作原理,详细记录并分析实验内容和实验内容的过程和结果,完成实验报告。
(2)本次实验体会。
7.实验练习题
按照本次实验的方法调出图5.12.7生成的正弦波个点文件,改变其中的任意3个点的数据,用逻辑分析仪重做分析。
