多功能波形发生器讲解

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

____

考试序列号

通识教育课程论文

课程设计名称发生器能多功波形

课程名称 EDA技术课程设计

学院物理学院

专业班级

学号

姓名

20 15 年1月17日

概述

函数信号发生器是一种能够产生多种波形,如三角波、锯齿波、矩形波(含方波)、正弦波等波形的电路。函数信号发生器在电路实验和设备检测中具有十分广泛的用途。

现在我们通过对函数信号发生器的原理以及构成设计一个能变换出三角波、正弦波、方波的简易发生器。本设计采用FPGA来设计制作多功能信号发生器。在实验室用EDA完成设计并进行引脚锁定下载连接用II Logic SignalTap

Analyer调试。

一、设计原理

本设计由信号产生,信号选择,信号控制输出三大模块组合而成。其中信号产生模块有:三角波模块、方波模块、正弦波模块。本设计采用K0~K2这三个按键为信号选择开关,选择信号产生模块输出的信号。其控制模块(SIG_CONTROL)

图1.信号发生器结构框图

二、设计原理概述正弦信号的发生器各一个,三角波信号、(1) 函数信号发

生器的结构:方波信号、数据选择器。 (2) VHDL 顶层设计。 (3)SignalTap

的仿真分析。II Logic Analyer

三个波形数据由三个,通过外加按键控制波形输出中实现,FPGA顶层文件在(4) 信号发生模块(delta—三角波、—方波、sin—正弦波)提供,信号发square

生器时钟由实验箱提供。

三、设计步骤

(1)三角波、方波和正弦波源文件的编写并把VHDL程序转换成原理图。

(2) 数据选择器的源文件编写,并把VHDL程序转换成原理图。

(3) 用原理图完成函数发生器的设计。

(4) 编译完成后,建立 SingnalTap‖的工程文件。

(5) 锁定引脚,下载连接。

(6) 运行程序并观察结果。

(7)记录数据完成报告。

四、软件设计流程及源程序代码

4.1 软件设计流程:

1.设计原理图。

2.分别编写各函数发生器,数据选择器的程序,并作为低层文件。

3.建顶层文件,并调用底层文件,定义信号量进行列话语句。

4.生成实验原理电路图。

1.三角波程序及其原理图

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY delta IS

port(clk,clrn:IN STD_LOGIC;

q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));

END delta;

ARCHITECTURE a OF delta IS

BEGIN

PROCESS(clk,clrn)

V ARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0);

V ARIABLE f:STD_LOGIC;

BEGIN

IF clrn='0' THEN tmp:=

ELSIF clk'EVENT AND clk='1' THEN

IF f='0' THEN

IF tmp=I11110 THEN tmp:=I11111; f:='1';

ELSE tmp:=tmp+1;

END IF;

ELSE

IF tmp = tmp:=

ELSE tmp:=tmp-1;

END IF;

END IF;

END IF;

q<=tmp;

END PROCESS;

END a;

原理图如下:

图2.三角波信号发生器原理图

2.方波程序及其原理图

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY square IS

PORT(clk,clrn: IN STD_LOGIC;

q: OUT STD_LOGIC_VECTOR(7 downto 0));

END square;

ARCHITECTURE a OF square IS

SIGNAL f: STD_LOGIC;

BEGIN

PROCESS(clk, clrn)

V ARIABLE tmp:STD_LOGIC_VECTOR(7 downto 0);

BEGIN

IF clrn='0' THEN tmp:=

ELSE IF clk'event and clk='1' THEN

IF tmp=I11111 THEN tmp:=

ELSE tmp:=tmp+1;END IF;

IF tmp<@00000 THEN f<='1';

ELSE f<='0';END IF;

END IF;

END IF;

END PROCESS;

PROCESS(clk,f)

BEGIN

IF clk'event and clk='1' THEN

IF f='1' THEN q<=I11111;

ELSE q<=

END IF;

END PROCESS;

END a;

原理图如下:

相关文档
最新文档