基于QUARTUSII的FPGA波形发生器 - 图文

2020-05-05 13:22

正弦波、不同占空比矩形波信号发生器设计

一、设计目的

1、掌握正弦波、不同占空比矩形波信号发生的设计方法。 2、掌握QUARTUSII 软件VHDL语言输入设计的全过程。 3、掌握数据存储及传递的过程。

二、设计要求

本实验要求基于EDA/SOPC实验平台上的FPGA及DAC,产生一定频率的正弦波、不同占空比矩形波信号,能通过键盘控制输出信号,并测量输出信号的频率和输出电压,计算输出频率与原设计频率的误差。

三、方案设计

信号发生器组成方框图为:

图1 组成方框图

设计的方案:

1、制作正弦波.mif文件

A、采用excel下拉自动累加、逻辑运算功能生成512位的正弦波数据。将得到的excel

文件另存为“Unicode文本(*.txt)”文件。

B、打开quartus2,新建一个TXT文件(file-new-other file-txt文件),将MIF文件的格式说明拷贝过来,再得到的TXT文本文件中的数据全部复制到begin与end中间,另存为“.mif”。

下面是mif文件的格式:WIDTH=8;

DEPTH=512;

ADDRESS_RADIX=UNS;

1

DATA_RADIX=UNS;

CONTENT BEGIN . . . End;

2、将电路分为4大模块,第一个模块是分频电路;第二、三个模块是正弦波和方波产

生电路;第四个模块是选择输出模块。 3、输出波形理论值:

A、每个时钟信号上升沿,分频电路自动累加一。当分频输入为“11111”时吗,

输出频率最大,为外部时钟频率的1/2。

图 2 分频电路仿真图

B、储存一个周期的信号的储存器是512位,每来一个时钟信号从一个储存单位取一个数据。

所以输出的最大的频率为fin(输入频率)/512*2;同理可知输出的最小频率为fin(输入频率)/512*32*2。

本实验时钟信号输入采用1.5mhz时钟信号,理论频率值为:

最大频率 最小频率 1464.84hz 45.78hz 表1 输出频率理论值 四、设计原理和电路图

(1)分频电路

该电路的根本任务是对输入的时钟信号进行分频。实现这一功能可用累加器、锁存器和比较器等。在时钟信号上升沿时立即对锁存器的数据(cnt5)进行累加。同时还必须注意,检查cnt5是否为“11111”。当cnt5为“11111”时,对输出频率进行取反。同时对cnt5进行更新。

分频电路Vhdl设计

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity fenpin is

port( clk: in std_logic;

2

f1: in std_logic_vector(4 downto 0); newclk:out std_logic ); end fenpin;

architecture one of fenpin is

signal abc: std_logic;

begin

process(clk,f1) -----对时钟进行分频,控制信号频率。

variable cnt5:std_logic_vector(4 downto 0);

begin

if (clk'event and clk='1') then

if cnt5=\ else cnt5:=cnt5+1; end if; end if;

newclk<=abc;

end process; end;

图2 分频电路

F1五个输入为分频控制键。Clk为外电路输入时钟信号,newclk为输出时钟信号。

(2)方波和正弦波lpm_rom元件

该电路的根本任务是读取波形8位数字量。可由累加器、锁存器和储存器组成。累加器对9位地址进行累加,使电路能够逐级读取储存器单位数据。当地址累加到511时,将其制0。

3

A、定制lpm_rom文件

新建一个block文件,搜索lpm_rom文件,然后根据设计向导完成lpm_rom元件定制。

B、正弦波8为数字量取址vhdl设计

library ieee;

use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all;

entity sin1 is

port( clk:in std_logic;

sin:out std_logic_vector(7 downto 0) ); end;

architecture one of sin1 is

component lpm_rom0

port(address:in std_logic_vector(8 downto 0); clock:in std_logic;

q:out std_logic_vector(7 downto 0) );

end component;

signal q1:std_logic_vector(8 downto 0);

begin

process(clk) -----逐步选取rom地址。

begin

if (clk'event and clk='1') then q1<=q1+1; end if;

end process ;

u1:lpm_rom0 port map(address=>q1,q=>sin,clock=>clk); end;

4

图 4正弦波lpm_rom元件

Clk为时钟信号输入(接分频器的输出端口newclk),sin为正弦波信号8为数字量输出。

图5 方波lpm_rom元件

Clk为时钟信号输入(接分频器的输出端口newclk),sq为方波信号8为数字量输

(3)该电路是简单的数据选择电路,由数据选择器构成。当输入x

为高电平时,选择正弦波输出;x为低电平时,选择方波输出。

选择电路vhdl设计: library ieee;

use ieee.std_logic_1164.all;

entity choice is port(

x: in std_logic;

a: in std_logic_vector(7 downto 0); b: in std_logic_vector(7 downto 0); y: out std_logic_vector(7 downto 0) ); end choice;

architecture one of choice is

begin

process(x,a,b)

begin

5


基于QUARTUSII的FPGA波形发生器 - 图文.doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:最新pep六年级下册第四单元测试卷资料

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: