1、实验 6_正弦信号发生器设计一、工作原理正弦信号发生器工作原理框图如下:其中正弦波数据存储器采用 6 位地址线,8 位数据线。即可存储 26(64 个 8 位数据)个字节数据。由 FPGA 中的宏功能模块实现。D/A 输出信号频率 f 与地址计数器输入时钟信号 CLK 频率 f0、每周期波形数据点数的关系如下:f=f0/64二、定制波形数据存储文件初始化数据存储文件有两种格式:.mif 文件和.hex 文件。建立.mif 文件过程如下:1、执行“FileNew” 菜单,弹出建立文件对话框如下:选择“Memory Initialization File”选项建立数据存储文件,其字节数取:64;数
2、据位宽取:8 位,并输入 64 个 8 位数据如下图所示:VHDL 顶层设计 (singt.vhd)6 位地址计数器 正弦波数据存储ROM8 位 D/A2、执行“FileSave”菜单,将上面的数据存储文件保存在工程目录 data 文件夹内。文件命名为:romd.mif。如下图所示:三、定制宏功能模块(LPM_ROM)元件1、执行“ToolsMegaWizard Plug-In Manager”菜单,弹出如下图所示对话框:选择“Create a new custom”定制一个新的模块。单击“Next”按钮,打开如下对话框:在左栏选择“LPM_ROM” ,在左上角分别选择:Cyclone 器件、
3、VHDL 语言方式,以及需要输出的 ROM 数据存储文件目录及文件名,假设定义为 romd.vhd2、单击“Next”按钮,弹出如下对话框:选择存储文件数据宽度为 8 位,字节数为 64,选择双时钟方式。单击“Next”按钮,弹出如下对话框:3、单击“Next”按钮,弹出如下对话框:在图中设置初始化数据存储文件的路径,以及此存储文件的名称 ROM1。4、单击“Next”按钮,弹出如下对话框:5、单击“Next”按钮,弹出如下对话框:6、单击“Finish”按钮,完成宏功能模块文件的定制。7、打开定制好的宏功能模块文件 romd.vhd,可以看到其中调用初始化数据文件的语句为:init_file
4、 = “E:/EDA2/第七章/ 实例 1_正弦信号发生器设计/data/romd.mif“,将其修改为:init_file = “./data/romd.mif“, 即采用相对路径,以便于移动到其它路径。四、完成顶层文件设计1、编辑顶层文件 VHDL 源程序如下:-模块功能:正弦波发生器顶层设计文件-入口参数:时钟信号 clk-出口参数:8 位数据输出:dout-程序编写:zqp-创建时间:2007-10-16-联系方式:QQ:30871641-修改日志:- NO.1:-LIBRARY IEEE;USE IEEE.STD_LOGIC_1164.ALL; -使用标准逻辑矢量USE IEEE.S
5、TD_LOGIC_UNSIGNED.ALL;ENTITY singt IS PORT ( clk : IN STD_LOGIC;dout : OUT STD_LOGIC_VECTOR(7 DOWNTO 0); -8 位波形数据输出 END;ARCHITECTURE one OF singt ISCOMPONENT romd -调用波形数据存储文件PORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0); -6 位地址信号inclock : IN STD_LOGIC ; -地址锁存时钟q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) -8 位数据输出);END COMPONENT;SIGNAL q1: STD_LOGIC_VECTOR(5 DOWNTO 0); -内部节点作为地址计数器BEGINPROCESS(clk)BEGIN IF CLKEVENT AND CLK=1 THEN q1=q1+1;END IF;END PROCESS;u1 : romd PORT MAP(address=q1,q=dout,inclock=clk);-元件例化END;2、建立工程编译3、建立矢量波形文件仿真建立矢量波形文件仿真得到仿真波形图如下: