资源描述
基于VHDL语言信号发生器设计
1、设计目标
1) 掌握使用EDA 工具设计信号发生器系统设计思绪和设计方法,体会使用EDA综合过程中电路设计方法和设计思绪不一样,了解层次化设计理念。
2) 熟悉在Quartus II环境中,用文本输入方式与原理图输入方式完成电路设计,同时掌握使用这两种方式相结合EDA 设计思绪。
3) 经过这一部分学习,对VHDL 语言设计方法进行深入学习,
对其相关语言设计规范进行更深层次掌握,能够愈加熟练做一些编程设计
2、设计主要内容和要求
经过使用VHDL 语言及Quartus II软件,设计多功效信号发生器每个模块,将正弦波模块,方波模块,三角波模块,阶梯波模块创建对应元件符号,同时设计好4选1数据选择器模块,再经过原理图输入方式,将各个模块组合起来,设计成一个完整多个信号发生器电路,同时将各个模块单独进行仿真,设计各个模块仿真波形,最终进行总原理图电路仿真,设计该信号发生器总仿真波形。
信号发生器:表现在它能自动实现四种波形转换。
依照题目标分析与整体构思可知,要完成设计任务必须完成以下要求:
1、 设计好用于波形切换四路数据选择器 selector4_1;
2、 设计好用于总电路设计各个信号输出模块;
3、 设计好数模(D/A)转换器。
3、整体设计方案
基本设计方案:在现有单一信号发生器基础上,加上其它信号模块,经过组合与设计,用数模转换器(D/A)将选中信号源发出信号由数字信号转换为模拟信号,再用示波器显示出来,其信号发生器结构框图如图3.1所表示。信号发生器由各个单一信号模块组合而成,其中信号产生模块将产生所需各种信号,信号发生器控制模块能够用数据选择器实现,用4选1数据选择器实现对四种信号选择。最终将波形数据送入 D/A 转换器,将数字信号转换为模拟信号输出。用示波器测试D/A 转换器输出,能够观察到4种信号输出。
时钟信号
信号产生
信号控制
D/A
转换
输出信号
选择信号
图3.1 信号发生器结构框图
经过查找资料把各类信号模块程序输入到Quartus Ⅱ中进行运行仿真,每一步都要慎重小心,错误难免,还需要经过书本和资料一一更正。
最终,在前面模块做好基础上再考虑怎样输出波形问题,经过对四种波
形采样就能够得到。
4、硬件电路设计与软件设计
依照题目分析与整体构思可知,要完成设计任务必须设计出以下模块:
4.1正弦波发生器实现
该模块产生以64个时钟为一个周期正弦波。
其VHDL 语言源程序代码以下所表示:
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;-- 打开库文件
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sinqi IS
PORT ( clk : IN STD_LOGIC;--申明clk是标准逻辑位类型输入端口 clr :
IN STD_LOGIC; --申明clr是标准逻辑位类型输入端口
d : OUT integer range 0 to 255); --申明d是标准逻辑向量类型
--输出端口
END sinqi;
ARCHITECTURE sinb OF sinqi IS
BEGIN
PROCESS(clr,clk)
variable temp:integer range 0 to 63;
BEGIN
IF clr='0' THEN d<=0; --clr为低电平d为0
ELSIF clk'EVENT AND clk= '1' THEN --clk为上升沿
IF temp=63 THEN temp:=0; ELSE temp:=temp+1; END IF; CASE temp IS when 00=>d<=255;when 01=>d<=254;when 02=>d<=252; when 03=>d<=249;when 04=>d<=245;when 05=>d<=239; when 06=>d<=233;when 07=>d<=225;when 08=>d<=217; when 09=>d<=207;when 10=>d<=197;when 11=>d<=186; when 12=>d<=174;when 13=>d<=162;when 14=>d<=150; when 15=>d<=137;when 16=>d<=124;when 17=>d<=112; when 18=>d<=99;when 19=>d<=87;when 20=>d<=75; when 21=>d<=64;when 22=>d<=53;when 23=>d<=43; when 24=>d<=34;when 25=>d<=26;when 26=>d<=19; when 27=>d<=13;when 28=>d<=8;when 29=>d<=4; when 30=>d<=1;when 31=>d<=0;when 32=>d<=0; when 33=>d<=1;when 34=>d<=4;when 35=>d<=8; when 36=>d<=13;when 37=>d<=19;when 38=>d<=26; when 39=>d<=34;when 40=>d<=43;when 41=>d<=53; when 42=>d<=64;when 43=>d<=75;when 44=>d<=87; when 45=>d<=99;when 46=>d<=112;when 47=>d<=124; when 48=>d<=137;when 49=>d<=150;when 50=>d<=162; when 51=>d<=174;when 52=>d<=186;when 53=>d<=197; when 54=>d<=207;when 55=>d<=217;when 56=>d<=225; when 57=>d<=233;when 58=>d<=239;when 59=>d<=245; when 60=>d<=249;when 61=>d<=252;when 62=>d<=254; when 63=>d<=255;when others=>null; --当temp值不是选择值,Q 作未知
--处理
END CASE;
END IF;
END PROCESS;
END sinb;
4.2 方波信号发生器实现该模块产生方波,是经过交替送出全0和全1实现,每16个时钟翻转一次。
其VHDL 语言源程序代码以下所表示:
LIBRARY IEEE;--打开库文件
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY fangboqi IS
PORT (clk: IN STD_LOGIC;--申明clk是标准逻辑位类型输入端口 clr: IN STD_LOGIC;--申明clr是标准逻辑位类型输入端口
q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));-- 申明q是标准逻辑
--向量类型输出端口
END fangboqi;
ARCHITECTURE fangbo1 OF fangboqi IS --结构体说明
SIGNAL a: STD_LOGIC;
BEGIN
PROCESS(clk,clr)
VARIABLE tmp:std_logic_vector(3 downto 0) ; --变量定义
BEGIN
IF clr='0' THEN a<='0';
ELSIF clk'event AND clk= '1' THEN --clk为上升沿
IF tmp="1111" THEN tmp:="0000";
ELSE
tmp:=tmp+1;
END IF;
IF tmp<"1000" THEN a<='1'; ELSE a<='0';
END IF;
END IF;
END PROCESS;
PROCESS(clk,a)
BEGIN
IF clk'event AND clk= '1' THEN --clk为上升沿 IF a='1' THEN q<="11111111"; --q赋值 ELSE q<="00000000"; --q赋值
END IF;
END IF;
END PROCESS; --结束进程
END fangbo1; --结束结构体
4.3 三角波信号发生器实现
该模块产生三角波形以64个时钟为一个周期,输出q每次加减8 其VHDL 语言源程序代码以下所表示:
LIBRARY IEEE; --打开库文件
USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY sjbo IS
PORT (clk : IN STD_LOGIC;--申明clk是标准逻辑位类型输入端口 clr : IN STD_LOGIC;--申明clr是标准逻辑位类型输入端口 q: OUT STD_LOGIC_VECTOR(7 DOWNTO 0));-- 申明q是标准逻辑
--向量类型输出端口
END sjbo;
ARCHITECTURE sjqi OF sjbo IS --结构体说明
BEGIN
PROCESS(clk,clr)
VARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0); --变量说明
VARIABLE a:STD_LOGIC;
BEGIN
IF clr='0' THEN tmp:="00000000";
ELSIF clk'event AND clk='1' THEN --clk为上升沿
IF a='0' THEN
IF tmp="11111000" THEN tmp:="11111111"; a:='1'; ELSE tmp:=tmp+8;
END IF;
ELSE
IF tmp="00000111" THEN tmp:="00000000"; a:='0'; ELSE tmp:=tmp-8;
END IF;
END IF; END IF; q<=tmp; --q赋值
END PROCESS;
END sjqi;
4.4 阶梯波信号发生器实现该模块产生是阶梯波形。其VHDL 语言源程序代码以下所表示:
LIBRARY IEEE;--打开库文件
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY jietiboqi IS
PORT (clk : IN STD_LOGIC;--申明clk是标准逻辑位类型输入端口 clr : IN STD_LOGIC;--申明clr是标准逻辑位类型输入端口
Q: BUFFER STD_LOGIC_VECTOR(7 DOWNTO 0));
END jietiboqi;
ARCHITECTURE jietibo OF jietiboqi IS --结构体说明
BEGIN
PROCESS(clk,clr)
VARIABLE tmp:STD_LOGIC_VECTOR(7 DOWNTO 0); -- 变量定义
BEGIN
IF clr='0' THEN tmp:="00000000";--变量赋值
ELSE IF clk'event AND clk='1' THEN --clk为上升沿 IF tmp="11111111" THEN tmp:="00000000"; ELSE tmp:=tmp+30;
END IF;
END IF;
END IF;
Q<=tmp;
END PROCESS; --结束进程
END jietibo;
4.5 四选一数据选择器实现该模块VHDL 语言源程序代码以下所表示:
LIBRARY IEEE; --打开库文件
USE IEEE.STD_LOGIC_1164.ALL;
ENTITY selector4_1 IS --实体说明
PORT( --端口说明 sel:IN STD_LOGIC_VECTOR(1 DOWNTO 0);
D0,D1,D2,D3:IN STD_LOGIC_VECTOR(7 DOWNTO 0);
Q:OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END selector4_1;
ARCHITECTURE one OF selector4_1 IS --结构体说明
BEGIN
PROCESS(sel, D0,D1,D2,D3)
BEGIN
CASE sel IS
WHEN "00"=>Q<=D0;
WHEN "01"=>Q<=D1;
WHEN "10"=>Q<=D2;
WHEN "11"=>Q<=D3;
WHEN others =>Q<=null; --当sel值不是选择值时,Q 作未知处理
END CASE;
END PROCESS;
END one;
4.6 数模转换器(D/A)
图
4.6
数模转换器
DAC0832
连接电路图
选择一个D/A转换器,将数据选择器输出信号与D/A转换器输入端相连接,D/A转换器可选择范围很宽,这里选择惯用DAC0832,其DAC0832连接电路如上图4.6所表示。
4.7 信号发生器程序流程框图
当输入端有时钟信号输入时,各个信号发生器模块独立运行,独立存在,发出各种信号,这些信号作为数据选择器输入信号,在数据选择器作用下,波形切换到对应模块输出,再经过数模转换器(D/A),将经过示波器显示出对应波形图,其程序流程图以下列图4.7所表示:
输入信号
各个信号发生器模块
开始
输出信号
数模转换器(
D/A
)
四选一数据选择器
复位
图4.7 信号发生器程序流程框图
5、系统仿真
经过QuartusⅡ软件设计出各个模块原理图及其相关仿真波形示意图以下:在Quartus II软件环境下,经过文本方式编写各个信号波形模块VHDL 语言源程序,且进行仿真。
接下来将各个信号波形模块产生对应元件符号,新建一个工程,加载上述模块,利用原理图输入法生成整体多波形信号发生器。
5.1正弦波发生器原理图及其仿真波形图:
正弦波信号发生器原理图以下列图所表示:
图5.1.1正弦波信号发生器原理图正弦波信号发生器仿真波形图以下列图所表示:
图5.1.2正弦波信号发生器仿真波形图
Clk由0到1交替变更,clr 一直处于高电平状态,Q端则由00001000到
00010000并依次加00001000
5.2方波发生器原理图及其仿真波形图:
方波信号发生器原理图以下列图所表示:
图5.2.1方波信号发生器原理图 方波信号发生器仿真波形图以下列图所表示:
图5.2.2方波信号发生器仿真波形图
Clk由0到1交替变更,clr 一直处于高电平状态,q端则由00000000到
11111111并依次交替下去
5.3三角波发生器原理图及其仿真波形图:
三角波信号发生器原理图以下列图所表示:
图5.3.1三角波信号发生器原理图 三角波信号发生器仿真波形图以下列图所表示:
图5.3.2 三角波信号发生器仿真波形图
Clk、clr均同时由0到1交替变更Q端则由00000000到00000001并依次加00000001进行下去
5.4阶梯波发生器原理图及其仿真波形图
阶梯波信号发生器原理图以下列图所表示:
图5.4.1阶梯波信号发生器原理图
阶梯波信号发生器仿真波形图以下列图5.8所表示:
图5.4.2 阶梯波信号发生器仿真波形图
Clk由0到1交替变更,clr 一直处于高电平状态,Q端从00000000开始则高四位依次由0001每次加0010进行下去,第四位依次由1110每次减0010进行下去。
5.5 4选1数据选择器原理图及其仿真波形图
4选1数据选择器原理图以下列图所表示:
图5.5.1 4选1数据选择器原理图
4选1数据选择器仿真波形图以下列图所表示:
图5.5.2 4选1数据选择器仿真图
sel由00每次加01交替变更,依次选择Q输出值。
5.6信号发生器原理图及其仿真波形图
整体信号发生器原理图以下列图所表示:
图
5.6.1
信号发生器原理图
整体信号发生器仿真波形图以下列图所表示:
图5.6.2多功效信号发生器仿真图
clk由0到1交替变更,clr 一直处于高电平状态,Q端则由56每次加8依次进行下去。
6、使用说明
6.1 从Quartus II软件环境中编写各个相关信号模块VHDL语言源程序及生成相关模块元件符号名称:
sinqi: 正弦波信号发生器模块; fangboqi: 方波信号发生器模块;
sjqi1: 三角波信号发生器模块; jietiboqi: 阶梯波信号发生器模块;
selector4_1: 四选一数据选择器输出模块;
多功效信号发生器输出波形能够由sel中位组合形式选择,从而控制信号发生器波形输出,经过sel不一样值能够选取正弦波信号发生器模块、方波信号发生器模块、正弦波信号发生器模块及三角波信号发生器模块、
6.2整体电路综合分析
在Quartus II软件环境原理图输入方式中放置各个元件符号,放置输入和输
出接口、组合各个信号模块、连线、编译、建立波形仿真图、仿真。
全部操作都是在Quartus II软件环境中进行,输入信号从各个信号发生器模块输入端输入,经过数据选择器输出所选择信号来切换输出对应波形输出,在经过数模转换器(D/A)将数字信号转换为模拟信号,最终由示波器显示对应波形。
7、总结
在此次课程设计中,我设计很好地完成了既定目标,能够产生正弦波、方波、三角波和阶梯波波形,很成功完成系统功效实现。经过该课程设计使我全方面熟悉、掌握了VHDL 语言基本知识,掌握利用VHDL 语言对信号发生器编程和时序逻辑电路编程,把编程和实际结合起来,熟悉编制和调试程序技巧,掌握分析结果若干有效方法,深入提升动手能力,培养使用设计综合电路能力,养成提供文档资料习惯和规范编程思想。
在设计过程中,也碰到了很多问题,在同学和指导老师帮助下,都一一得到了处理。从选题到定稿,从了解到熟悉,用了大约一个星期时间,在这段时间内,苦恼、思索、喜悦、收获,感受颇多。当然此次设计也表现出我平时学
习中有许多不足和欠缺之处,今后需经过学习来查漏补缺。
参考文件
[1] 江国强.EDA技术与应用(M).电子工业出版社,.20(3):36-39
[2] 赵建东,陈小乐.基于 Internet 智能家庭网络控制器实现[J].电子技术应用, ,34(12) :23-25.
[3] 李永东,岳继光,李炳宇.PIC单片机在楼宇对讲系统中应用[J].电 [4] 李强华,张根宝,段力.基于单片机控制楼宇对讲系统设计[J].电气应用,,
12(01):04-06.
[5] 江国强.EDA技术与应用(第3版),4(11):10-22
[6] 吴庆元,卢益民.智能小区系统通信协议设计[J].通信技术,,19(7):98-99.
展开阅读全文