一、实验目标
使用正弦波信号发生器,生成仿真波形。
二、实验原理
用VHDL代码完成正弦信号发生器以及data_rom的功能,生成一组正弦信号数据rom.mif。进行波形仿真,给正弦信号发生器一组周期为10ns的时钟信号,生成正弦仿真波形。
三、实验准备
代码
正弦信号发生器
LIBRARY IEEE; --正弦信号发生器源文件
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY SINGT IS
PORT ( CLK : IN STD_LOGIC; --信号源时钟
DOUT : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );--8位波形数据输出
END;
ARCHITECTURE DACC OF SINGT IS
COMPONENT data_rom --调用波形数据存储器LPM_ROM文件:data_rom.vhd声明
PORT(address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);--6位地址信号
inclock : IN STD_LOGIC ;--地址锁存时钟
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END COMPONENT;
SIGNAL Q1 : STD_LOGIC_VECTOR (5 DOWNTO 0); --设定内部节点作为地址计数器
BEGIN
PROCESS(CLK ) --LPM_ROM地址发生器进程
BEGIN
IF CLK'EVENT AND CLK = '1' THEN Q1<=Q1+1; --Q1作为地址发生器计数器
END IF;
END PROCESS;
u1 : data_rom PORT MAP(address=>Q1, q => DOUT,inclock=>CLK);--例化
END;
data_rom
LIBRARY ieee;
USE ieee.std_logic_1164.all;
LIBRARY altera_mf;
USE altera_mf.altera_mf_components.all; --使用宏功能库中的所有元件
ENTITY data_rom IS
PORT (address : IN STD_LOGIC_VECTOR (5 DOWNTO 0);
inclock : IN STD_LOGIC ;
q : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END data_rom;
ARCHITECTURE SYN OF data_rom IS
SIGNAL sub_wire0 : STD_LOGIC_VECTOR (7 DOWNTO 0);
COMPONENT altsyncram --例化altsyncram元件,调用了LPM模块altsyncram
GENERIC ( --参数传递语句
intended_device_family : STRING; --类属参量数据类型定义
width_a : NATURAL;
widthad_a : NATURAL;
numwords_a : NATURAL;
operation_mode : STRING;
outdata_reg_a : STRING;
address_aclr_a : STRING;
outdata_aclr_a : STRING;
width_byteena_a : NATURAL;
init_file : STRING;
lpm_hint : STRING;
lpm_type : STRING );
PORT ( clock0 : IN STD_LOGIC ; --altsyncram元件接口声明
address_a: IN STD_LOGIC_VECTOR (5 DOWNTO 0);
q_a : OUT STD_LOGIC_VECTOR (7 DOWNTO 0) );
END COMPONENT;
BEGIN
q <= sub_wire0(7 DOWNTO 0);
altsyncram_component : altsyncram
GENERIC MAP ( intended_device_family => "Cyclone", --参数传递映射
width_a => 8, --数据线宽度8
widthad_a => 6, --地址线宽度6
numwords_a => 64, --数据数量64
operation_mode => "ROM", --LPM模式ROM
outdata_reg_a => "UNREGISTERED", --输出无锁存
address_aclr_a => "NONE", --无异步地址清0
outdata_aclr_a => "NONE", --无输出锁存异步清0
width_byteena_a => 1, -- byteena_a输入口宽度1
init_file => "C:\intelFPGA_lite\test\SINGT\rom.mif", --ROM初始化数据文件,此处已修改过
lpm_hint => "ENABLE_RUNTIME_MOD=YES, INSTANCE_NAME=NONE",
lpm_type => "altsyncram" ) --LPM类型
PORT MAP (clock0 => inclock, address_a => address,q_a => sub_wire0 );
END SYN;
必要文件
block.bdf
rom.mif
要注意的是,这里的数据要改为十进制显示格式再修改。
四、实验过程
元件图
测试波形
测试:使用data_rom模块读入手动生成的数据rom.mif,给CLK输入端输入周期为50ns的时钟信号,如图成功生成正弦信号的仿真波形。
实验结果:由rom.mif数据文件可知,从255到0再到255为一个完整的正弦波波形,图中可以看出成功进行了一个完整的正弦波波形仿真。
五、实验总结
本次实验做的是正弦信号发生器,输出仿真波形。其中最明显的感知就是本次实验的难度陡然上升,除了要写VHDL代码,还要设计其他文件,如.bdf和.mif,在写VHDL时,要注意文件的路径不能写错,否则程序会无法正确获取数据。在完成本次实验后,我对Quartus Ⅱ中各类文件之间的关系理解更加清晰了,比如.bdf为格式文件,.mif为数据文件。实验虽然做了很久,但我并没有感觉到枯燥,我喜欢这种遇到困难然后自己寻找解决办法最终攻克困难的过程。
原文地址:http://www.cnblogs.com/blockche/p/16815417.html
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,请务用于商业用途!
3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需!
7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员!
8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载
声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性