搜索
您的当前位置:首页正文

VHDL简易信号发生器

来源:小奈知识网


中国计量学院

光学与电子科技学院 课程设计报告

课程设计名称 集成电路课程设计

系 电科系

专业班级

学 号

姓 名

成 绩 指导老师

2012 年 月 日

概述

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

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

一、设计原理

本设计由信号产生,信号选择,信号控制输出三大模块组合而成。其中信号产生模块有:三角波模块、方波模块、正弦波模块。本设计采用K0~K2这三个按键为信号选择开关,选择信号产生模块输出的信号。其控制模块(SIG_CONTROL)是由数据选择器实现对以上三种信号的选择,并产生相应波形。其结构框图如下:

三角波 开始 波形选择方波 正弦波 波形输出结束 信号选择 图1.信号发生器结构框图

二、设计原理概述

(1) 函数信号发生器的结构:三角波信号、方波信号、正弦信号的发生器各一个,数据选择器。

(2) VHDL 顶层设计。

(3) SignalTap II Logic Analyer的仿真分析。

(4) 顶层文件在FPGA中实现,通过外加按键控制波形输出,三个波形数据由三个

信号发生模块(delta—三角波、 square—方波、 sin—正弦波)提供,信号发生器时钟由实验箱提供。

三、设计步骤

(1)三角波、方波和正弦波源文件的编写并把VHDL程序转换成原理图。 (2) 数据选择器的源文件编写,并把VHDL程序转换成原理图。 (3) 用原理图完成函数发生器的设计。

(4) 编译完成后,建立 SingnalTap‖的工程文件。 (5) 锁定引脚,下载连接。 (6) 运行程序并观察结果。 (7)记录数据完成报告。

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

4.1 软件设计流程: 1.设计原理图。

2.分别编写各函数发生器,数据选择器的程序,并作为低层文件。 3.建顶层文件,并调用底层文件,定义信号量进行列话语句。 4.生成实验原理电路图。

4.2各信号发生器及数据选择器源程序及原理图: 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)

VARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0); VARIABLE f:STD_LOGIC; BEGIN

IF clrn='0' THEN tmp:=\"00000000\"; ELSIF clk'EVENT AND clk='1' THEN IF f='0' THEN

IF tmp=\"11111110\" THEN tmp:=\"11111111\"; f:='1';

ELSE tmp:=tmp+1; END IF; ELSE

IF tmp =\"00000001\" THEN tmp:=\"00000000\"; f:='0'; 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)

VARIABLE tmp:STD_LOGIC_VECTOR(7 downto 0); BEGIN

IF clrn='0' THEN tmp:=\"00000000\"; ELSE IF clk'event and clk='1' THEN

IF tmp=\"11111111\" THEN tmp:=\"00000000\"; ELSE tmp:=tmp+1;END IF;

IF tmp<\"10000000\" 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<=\"11111111\"; ELSE q<=\"00000000\";END IF; END IF;

END PROCESS; END a;

原理图如下:

图3.方波信号发生器原理图

3.

正弦波程序及其原理图

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sin IS

PORT (clk,clrn:IN STD_LOGIC;

q:OUT INTEGER RANGE 255 DOWNTO 0); END sin;

ARCHITECTURE A OF sin IS BEGIN

PROCESS(clk,clrn)

VARIABLE tmp:INTEGER RANGE 63 DOWNTO 0; BEGIN

IF clrn='0' THEN q<=0 ;tmp:=0; ELSE

IF clk'EVENT AND clk='1' THEN

IF tmp=63 THEN tmp:=0;ELSE tmp:=tmp+1;END IF; CASE TMP IS

WHEN 00=>q<=255; WHEN 01=>q<=254; WHEN 02=>q<=252; WHEN 03=>q<=249; WHEN 04=>q<=245; WHEN 05=>q<=239; WHEN 06=>q<=233; WHEN 07=>q<=225; WHEN 08=>q<=217; WHEN 09=>q<=207; WHEN 10=>q<=197; WHEN 11=>q<=186; WHEN 12=>q<=174; WHEN 13=>q<=162; WHEN 14=>q<=150; WHEN 15=>q<=137; WHEN 16=>q<=124; WHEN 17=>q<=112; WHEN 18=>q<=99; WHEN 19=>q<=87; WHEN 20=>q<=75; WHEN 21=>q<=64; WHEN 22=>q<=53; WHEN 23=>q<=43; WHEN 24=>q<=34; WHEN 25=>q<=26; WHEN 26=>q<=19; WHEN 27=>q<=13; WHEN 28=>q<=8; WHEN 29=>q<=4; WHEN 30=>q<=1; WHEN 31=>q<=0; WHEN 32=>q<=0; WHEN 33=>q<=1; WHEN 34=>q<=4; WHEN 35=>q<=8; WHEN 36=>q<=13; WHEN 37=>q<=19; WHEN 38=>q<=26; WHEN 39=>q<=34; WHEN 40=>q<=43; WHEN 41=>q<=53; WHEN 42=>q<=64; WHEN 43=>q<=75; WHEN 44=>q<=87; WHEN 45=>q<=99; WHEN 46=>q<=112; WHEN 47=>q<=124; WHEN 48=>q<=137; WHEN 49=>q<=150; WHEN 50=>q<=162; WHEN 51=>q<=174; WHEN 52=>q<=186; WHEN 53=>q<=197; WHEN 54=>q<=207; WHEN 55=>q<=217; WHEN 56=>q<=225; WHEN 57=>q<=233; WHEN 58=>q<=239; WHEN 59=>q<=245; WHEN 60=>q<=249; WHEN 61=>q<=252; WHEN 62=>q<=254; WHEN 63=>q<=255;WHEN OTHERS=>NULL; END CASE; END IF; END IF;

END PROCESS; END a;

原理图如下:

图4.正弦波信号发生器原理图

4.

数据选择器程序及其原理图

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY sig_control IS

PORT(delta,square,sin:IN STD_LOGIC;

d0,d1,d2:IN STD_LOGIC_VECTOR(7 DOWNTO 0); q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0)); END sig_control;

ARCHITECTURE behave OF sig_control IS

SIGNAL sel:STD_LOGIC_VECTOR(2 DOWNTO 0); BEGIN

sel<=delta&square&sin; PROCESS(sel) BEGIN

CASE sel IS

WHEN\"100\"=>q<=d0; WHEN\"010\"=>q<=d1; WHEN\"001\"=>q<=d2; WHEN OTHERS=>NULL; END CASE; END PROCESS; END behave;

原理图如下:

图5.数据选择器原理图

4.3信号发生器的顶层文件原理图

由三个函数信号发生器以及数据选择器设计实验顶层文件原理图,如图6示

图6.函数信号发生器顶层文件原理图

五、信号发生器的时序仿真与硬件测试

5.1仿真与测试流程

1.各模块时序仿真结果。

2.进行嵌入式逻辑分析,连接数到模转换芯片,并改变其波形种类和频率,用SignalTap II Logic Analyer进行观察。 3.观察记录,得到模拟信号波形

5.2时序仿真

1.当选择信号K0置1,K1、K2置0时,信号发生器输出波形为三角波,其时序仿真波形如图7所示。

图7.三角波时序仿真图

2.当选择信号K1置1,K0、K2置0时,信号发生器输出波形为方波,其时序仿真波形如图8所示。

图8.方波时序仿真图

3.当选择信号K2置1,K0、K1置0时,信号发生器输出波形为正弦波,其时序仿真波形如图9所示。

图9.正弦波时序仿真图

5.3引脚锁定,如图10所示

图10.引脚锁定图

5.4 SignalTap II实时测试

1.编译完成后,建立 SingnalTap‖的工程文件,如图11所示:

图11

2.连接好实验箱后,将编译产生的SOF格式文件配置进FPGA中,进行硬件测试,如图12所示:

图12

3.下载连接,运行程序并观察结果。

①当选择信号K0置1时,其余按键置0,信号发生器输出三角波,其模拟信号波形如图13所示:

图13.三角波模拟信号波形

②当选择信号K1置1时,其余按键置0,信号发生器输出方波,其模拟信号

波形如图14所示:

图14.方波模拟信号波形

③当选择信号K2置1时,其余按键置0,信号发生器输出正弦波,其模拟信号波形如图15所示:

图15.正弦波模拟信号波形

六、总结及心得体会

6.1遇到的问题及解决方案

1:三个波形文件的数据波形的输入解决方法:利用波形发生器软件建立三个形

的.mif 文件后保存,并利用 Quartus‖软件后,即可建立 LPM_ROM 的文件。 2:顶层文件原理图的制作方法:利用数据选择器、三个波形的ROM为底层文件连线,完成顶层文件的制作。

3:在程序编写时,明白变量(Variable)与信号(Signal)的作用及区别. 4:在一个文件夹中只允许有一个工程,建立顶层文件时需要把所有相关的数和 文件导入工程。

5:引脚锁定的解决方法:根据顶层文件设计中各输入输出单元的功能,选择式 后,再根据所选择硬件模块的要求来完成引脚功能的锁定。 6:用SignalTap II Logic Analyer之前,要锁定下载引脚.

6.2 心得体会

通过设计此函数发生器,进一步了解和学习了EDA的电子设计,并且熟悉了用嵌入式逻辑分析仪(SignalTap II Logic Analyer)测试波形,用MegaWizard Plug-In Manager建立.mif文件ROM.了解EDA的设计流程:设计输入→综合→适配→仿真→编程下载→硬件测试.更加巩固和掌了所学的VHDL语言的一些语法结构,例如:if..then...else,case,when..else等语句。并且通过此次的课程设计不仅培养我们动手和独立思考的能力,而且还能让我们在实践操作中更好的运用书本上所学的知识,从而加深理解所学知识。

七、参考文献

[1]包明 编著. 《EDA技术与可编程器件的应用》 ,北京航空航天大学出版社 [2]董艳燕 孙一翎 陈亮编著.《可编程逻辑器件PLD 实验讲义》

因篇幅问题不能全部显示,请点此查看更多更全内容

Top