方波发生器实验报告

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

方波发生器及其调制

一、实验内容

设计一方波信号发生器,采用ROM进行一个周期数据存储,并通过地址发生器产生方波信号。并通过控制端输入a对方波信号进行调幅和调频。ROM(4位地址16位数据)

二、实验原理

方波信号发生器是由地址发生器和方波数据存储器ROM两块构成,输入为时钟脉冲,输出为8位二进制。

1地址发生器的原理

地址发生器实质上就是计数器,ROM 的地址是4位数据,相当于16位循环计数器。

2.只读存储器ROM 的设计

(1)、VHDL 编程的实现

①基本原理:为每一个存储单元编写一个地址,只有地址指定的存储单元才能与公共的I/O 相连,然后进行存储数据的读写操作。

②逻辑功能:地址信号的选择下,从指定存储单元中读取相应数据。

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=2n (n=1,2,…),若输入的信号频率为f ,那么分频器的输出信号的频率为f/2n(n=1,2,…)。

调幅原理:通过移位寄存器改变方波幅值(左移)。

三、 设计方案

1. 基于VHDL 编程的设计

在地址信号的选择下,从指定存储单元中读取相应数据 ,系统框图如下:

FPGA

四、 原理图

1、VHDL 编程的实现

地址发生器

方波数据存储ROM 分频和调幅

(1)、顶层原理图

(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

process(clk1khz)

begin

if(clk1khz'event 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 is

port

(

addr:in std_logic_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","0000 0000","00000000",

"00000010","00000010","00000010","00000010","00000010","00000010","00000010","0000001 0");

begin

process(en,addr)

variable temp:integer range 0 to 15;

begin

if(en='1')then

temp:=conv_integer(addr);

qout<=rom(temp);

else

qout<=(others=>'Z');

end if;

end process;

end behave;

(4)调幅与调频程序

entity tiaozhi is

port(

data:in std_logic_vector(7 downto 0);

a:in std_logic_vector(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 is

signal 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_vector(7 downto 0); signal q4:std_logic_vector(7 downto 0); begin

process(clk,count,a,q1,q2,q3,q4)

begin

相关文档
最新文档