1、方波发生器实验报告方波发生器及其调制一、实验内容设计一方波信号发生器,采用ROM进展一个周期数据存储,并通过地址发生器产生方波信号。并通过控制端输入a对方波信号进展调幅和调频。 ROM4位地址16位数据 二、 实验原理方波信号发生器是由地址发生器和方波数据存储器ROM两块构成,输入为时钟脉冲,输出为8位二进制。 1地址发生器的原理 地址发生器实质上就是计数器,ROM的地址是4位数据,相当于16位循环计数器。 2.只读存储器ROM的设计 (1)、VHDL编程的实现 根本原理:为每一个存储单元编写一个地址,只有地址指定的存储单元才能与公共的I/O相连,然后进展存储数据的读写操作。逻辑功能:地址信号
2、的选择下,从指定存储单元中读取相应数据。3调幅与调频通过输入信号a(3位数据),选择不同调制,如a=000,2分频a=001,4分频a=010,8分频a=011,16分频a=100,2倍调幅a=101,4倍调幅a=110,8倍调幅a=111,16倍调幅分频原理:偶数分频,即分频系数N=2nn=1,2,假设输入的信号频率为f,那么分频器的输出信号的频率为f/2n(n=1,2,)。调幅原理:通过移位存放器改变方波幅值左移。三、 设计方案1. 基于VHDL编程的设计 在地址信号的选择下,从指定存储单元中读取相应数据 ,系统框图如下: FPGA四、 原理图 1、VHDL编程的实现 (1)、顶层原理图
3、(2)、地址发生器的VHDL语言的实现library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity addr_count is port (clk1khz: in std_logic;qout: out integer range 0 to 15);end addr_count;architecture behave of addr_count is signal temp: integer range 0 to 15;begin proc
4、ess(clk1khz) begin if(clk1khzevent and clk1khz=1) then if(temp=15) then temp=0; else temp=temp+1; end if; end if; qout=temp; end process;end behave;(3)ROM的VHDL语言的实现library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity rom isport( addr:in std_log
5、ic_vector(3 downto 0); en:in std_logic; qout:out std_logic_vector(7 downto 0);end rom;architecture behave of rom is type memory is array(0 to 15) of std_logic_vector(7 downto 0); constant rom:memory:=(00000000,00000000,00000000,00000000,00000000,00000000,00000000,00000000, 00000010,00000010,00000010
6、,00000010,00000010,00000010,00000010,00000010);begin process(en,addr) variable temp:integer range 0 to 15; begin if(en=1)then temp:=conv_integer(addr); qout=rom(temp); else qoutZ); end if; end process;end behave;(4)调幅与调频程序entity tiaozhi isport(data:in std_logic_vector(7 downto 0);a:in std_logic_vect
7、or(2 downto 0);clk:in std_logic;sl_in :in std_logic;clk1:out std_logic;qout:out std_logic_vector(7 downto 0);end tiaozhi;architecture behave of tiaozhi issignal count:std_logic_vector(15 downto 0); signal q1:std_logic_vector(7 downto 0); signal q2:std_logic_vector(7 downto 0); signal q3:std_logic_ve
8、ctor(7 downto 0); signal q4:std_logic_vector(7 downto 0);beginprocess(clk,count,a,q1,q2,q3,q4)beginif(clkevent and clk=1) thencount=count+1;q1=data(6 downto 0)& sl_in;q2=q1(6 downto 0) & sl_in;q3=q2(6 downto 0) & sl_in;q4 clk1 clk1 clk1 clk1 qout qout qout qout=q4;end case;end process;end behave;5仿真
9、结果如下产生的方波信号当控制端输入为:101时,4倍调幅当控制端输入为100时,2倍调幅当控制端输入为110时,8倍调幅当控制端输入为111时,16倍调幅当控制端输入为000时,2分频当控制端输入为001时,4分频当控制端输入为010时,8分频当控制端输入为011时,16分频五 设计总结1. 评估在这次EDA实验设计中,我们完成的是一个方波信号发生器的设计,在这次设计中,让我们了解到了ROM,地址发生器,分频和调幅的设计方法,进一步掌握了Quartus的常见使用方法, 并掌握了方波信号发生器的设计原理,对我们来说,此次实验的收获在于数据存储器ROM的设计,我们相信,这对于以后的实验将会有很大的帮助。此次的实验还算成功,从电路模块的设计到电路的仿真成功能独立完成,这是对自己的一次很大的鼓励,我们相信,以后的课程将会学的更好。2.问题:不能对信号clk进展调幅,要重新产生一个方波信号才能调幅解决:通过循环计数器产生多电平方波,再对其进展移位,得到调幅信号
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1