首页 > 其他分享 >【计组实验】实验f3 正弦信号发生器

【计组实验】实验f3 正弦信号发生器

时间:2022-10-22 10:01:46浏览次数:42  
标签:STD f3 计组 -- DOWNTO VECTOR 实验 LOGIC rom

一、实验目标

使用正弦波信号发生器,生成仿真波形。

二、实验原理

用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

image-20221022093558931

rom.mif

image-20221022093623998

要注意的是,这里的数据要改为十进制显示格式再修改。

四、实验过程

元件图

image-20221022093646416

测试波形

image-20221022094120407

image-20221022094156609

测试:使用data_rom模块读入手动生成的数据rom.mif,给CLK输入端输入周期为50ns的时钟信号,如图成功生成正弦信号的仿真波形。

实验结果:由rom.mif数据文件可知,从255到0再到255为一个完整的正弦波波形,图中可以看出成功进行了一个完整的正弦波波形仿真。

五、实验总结

本次实验做的是正弦信号发生器,输出仿真波形。其中最明显的感知就是本次实验的难度陡然上升,除了要写VHDL代码,还要设计其他文件,如.bdf和.mif,在写VHDL时,要注意文件的路径不能写错,否则程序会无法正确获取数据。在完成本次实验后,我对Quartus Ⅱ中各类文件之间的关系理解更加清晰了,比如.bdf为格式文件,.mif为数据文件。实验虽然做了很久,但我并没有感觉到枯燥,我喜欢这种遇到困难然后自己寻找解决办法最终攻克困难的过程。

标签:STD,f3,计组,--,DOWNTO,VECTOR,实验,LOGIC,rom
From: https://www.cnblogs.com/blockche/p/16815417.html

相关文章

  • 【计组实验】实验f2 一位全加器
    一、实验目标测试全加器f_adder的功能,并做出仿真波形。二、实验原理全加器f_adder由两个半加器h_adder和一个或门or2a组成,先完成半加器和或门的VHDL代码,然后在全加器的V......
  • 取出df3["text"]里 tblActors字段的内容,如果没有就填充一个值,怎么破?
    大家好,我是Python进阶者。一、前言前几天在Python最强王者交流群【WYM】问了一个Pandas处理的问题,提问截图如下:数据截图如下:二、实现过程这个数据格式本身就有点奇......
  • 实验6:开源控制器实践——RYU
    一、L2Switch和POX的Hub模块有何不同h1pingh3h1pingh2Hub和L2Switch模块都是洪泛转发,但L2Switch模块下发的流表无法查看,而Hub模块下发的流表可以查看。二......
  • Redis搭建Sentinel实验环境
    环境准备在物理机上启动3台物理机,IP地址分别为:192.168.56.4,192.168.56.5,192.168.56.6。1.确保3台虚拟机的网络是相互联通的。2.确保已经在3台虚拟机上安装了redis(本示例......
  • 实验2
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0......
  • 实验一:决策树算法实验
    实验一:决策树算法实验|博客班级|https://edu.cnblogs.com/campus/czu/classof2020BigDataClass3-MachineLearning||----|----|----||作业要求|https://edu.cnblogs.com/......
  • 实验3 数组、指针与现代C++标准库
    一.实验结论:1.实验任务5:Info.hpp:#include<iostream>#include<string>#include<iomanip>usingnamespacestd;classInfo{public:Info(){}Info(st......
  • 实验3
    task5#include<iostream>usingnamespacestd;#include<iomanip>classInfo{private:stringnickname,contact,city;intn;public:Info(string......
  • 实验2
    #include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5intmain(){inti,number;srand(time(0));for(i=0;i<=N;++i){......
  • 网络工程知识(二)VLAN的基础和配置:802.1q帧;Access、Trunk、Hybrid接口工作模式过程与配
    介绍-VLANVLAN(VirtualLocalAreaNetwork)即虚拟局域网,工作在数据链路层。交换机将通过:接口、MAC、基于子网、协议划分(IPv4和IPv6)、基于策略的方式划分VLAN的方式,将接......