基于VHDL语言的波形发生器的设计.doc

上传人:精*** 文档编号:1031225 上传时间:2024-03-24 格式:DOC 页数:30 大小:778.50KB
下载 相关 举报
基于VHDL语言的波形发生器的设计.doc_第1页
第1页 / 共30页
基于VHDL语言的波形发生器的设计.doc_第2页
第2页 / 共30页
基于VHDL语言的波形发生器的设计.doc_第3页
第3页 / 共30页
基于VHDL语言的波形发生器的设计.doc_第4页
第4页 / 共30页
基于VHDL语言的波形发生器的设计.doc_第5页
第5页 / 共30页
点击查看更多>>
资源描述

1、 专业 课程设计任务书20112012学年 第 2 学期第 17 周 20 周 题目波形发生器的设计内容及要求用CPLD可编程模块产生下列信号(特殊芯片:EPM570T100C5)(1)采用VHDL编写相关程序,能产生递增斜波、递减斜波、阶梯波、正弦波、方波、三角波;(2)用户能够选择输出所需其中一种波形。进度安排 17周:查找资料,进行系统方案设计; 18周:软件的分模块调试; 19周:系统联调;20周:设计结果验收,报告初稿的撰写。学生姓名: 汤姝指导时间:第1720周指导地点:E楼607室任务下达2012年 6 月4 日任务完成2012年 6月 29 日考核方式1.评阅 2.答辩 3.实

2、际操作 4.其它指导教师刘敏系(部)主任付崇芳摘要各种各样的信号是通信领域的重要组成部分,其中递增斜波、递减斜波、阶梯波、正弦波、方波、三角波等是较为常见的信号。在科学研究及教学实验中常常需要这几种信号的发生器。为了试验、研究方便,研制一种灵活使用、功能齐全、使用方便的信号源是十分必要的。本次设计的波形发生器是一种能够产生递增斜波、递减斜波、阶梯波、正弦波、方波、三角波的信号发生器。设计可以通过硬件和软件两种方法实现,本次实验中通过Quartus II软件编程软件的方法,运用VHDL语言与原理图混合设计的方法,VHDL语言描述底层模块,原理图设计方法设计顶层原理图文件。实验分模块设计,便于调试

3、及错误的查找。实验运用VHDL语言编写程序,实现了各波形的产生,并且最后通过6选1多路开关的设计,实验了对需要波形的选择。关键词:波形发生器 VHDL Quartus II 原理图 多路开关目 录第一章 波形发生器设计内容及要求11.1 设计内容11.2 设计要求1第二章 波形发生器系统框图及工作原理与设计22.1 系统框图22.2 设计平台与仿真工具22.3 工作原理与设计2第三章 系统调试与分析113.1 系统调试113.2 结果分析11第四章 结论18参考文献19附录一 原理图20附录二 程序清单21波形发生器的设计第一章 波形发生器设计内容及要求1.1 设计内容实验设计波形发生器是一种

4、能够产生递增斜波、递减斜波、阶梯波、正弦波、方波、三角波的电路。实验中通过Quartus II软件编程,运用VHDL语言与原理图混合设计的方法,VHDL语言描述底层模块,原理图设计方法设计顶层原理图文件。实验分模块设计,在完成一个模块时即对其进行调试修改,防止了最后模块综合时存在调试困难的情况出现。如果是对元件例化相对较熟练的同学,也可采用元件例化的方法进行程序的编写。但在此过程中,应特别注意VHDL语言的运用,以防语法错误导致影响实验结果。实验最后将程序下载到芯片EPM570T100C5中,供实际运用。1.2 设计要求用CPLD可编程模块产生下列信号(特殊芯片:EPM570T100C5)1、

5、 采用VHDL编写相关程序,能产生递增斜波、递减斜波、阶梯波、正弦波、方波、三角波; 2、用户能够选择输出所需其中一种波形。第二章 波形发生器系统框图及工作原理与设计2.1 系统框图波形发生器由各波形发生模块及6选1多路开关构成,时钟信号对其作用产生输出波形信号,系统框图如图2.1所示。图2.1 系统框图2.2 设计平台与仿真工具Quartus II软件包是MAX+plus II的升级版本,其提供了一个完整高效的设计环境,非常适合具体的设计需求。提供了方便的设计输入方式、快速的编译和直接易懂的器件编程,属于EDA工具。EDA技术的基本特征是采用高级语言描述,具有系统级仿真和综合能力。它主要采用

6、并行工程和“自顶向下”的设计方法,这种设计方法首先从系统设计入手,在顶层进行功能方框图的划分和结构的设计。在方框图一级进行仿真、纠错,并用硬件描述语言对高层次的系统行为进行描述,在系统一级进行验证。然后用综合优化工具生成具体电路的网表,其对应得物理实现级可以是印刷电路板或专用集成电路。由于设计的主要仿真和调试过程是在高层次上完成的,这不仅有利于早起发现结构设计上的错误,避免设计工作的浪费,而且也减少了逻辑功能仿真的工作量,提高了设计的一次成功率。本实验中是多个模块的相互联系作用,采用了VHDL与原理图混合设计的方式进行设计。各模块设计最后,为了能在图形编辑器中调用元件,需要为该元件创建一个元件

7、图形符号。2.3 工作原理与设计2.3.1 递增波形递增波形的设计运用的是VHDL语言中if语句对其进行0-255的序列递增来实现的,每等待一个时钟上升沿,计数器加1,故输出信号周期为256倍时钟周期。程序主要语句如下所示:if tmp=11111111 then tmp:=00000000; else tmp:=tmp+1; end if;其中,定义clk为输入时钟信号端口,reset为输入复位信号端口程,q1为8位二进制输出信号端口。程序设计流程图如下图所示:图2.2 递增波形设计流程图2.3.2 递减波形递减波形的设计运用的是VHDL语言中if语句对其进行255-0的序列递减来实现的,与

8、递增波形正好是相反的。每等待一个时钟上升沿,计数器减1,故输出信号周期为256倍时钟周期。程序主要语句如下所示: if tmp=00000000 then tmp:=11111111; else tmp:=tmp-1; end if;其中,时钟信号clk,复位信号reset, 8位二进制输出信号端口q2。程序设计流程图如下图所示:图2.3 递减波形设计流程图2.2.3 阶梯波阶梯波运用VHDL语言中if语句设计,程序中每计数16次对输出信号进行一次序列递增,从而得到周期为输入时钟递增信号波形周期16倍的输出阶梯波信号。在设计原理上是与递增波形类似的。程序中,阶梯波阶梯增量为16,可以根据需要通

9、过改变递增量来得到需要波形。因为在计数器11110000是加16刚好为00000000,故程序省略了if tmp =11111111 thentmp:=00000000 ;语句,并且在计数器增量设置时,增量应为,这样才能使阶梯波各个阶梯高度是一致的。 程序主要语句如下所示:if reset=0 then tmp:=00000000; elsif clkevent and clk=1 then tmp:=tmp+16;end if;其中,时钟信号clk,复位信号reset, 8位二进制输出信号端口q5。程序设计流程图如下图所示:图2.4 阶梯波设计流程图2.1.4 三角波三角波的设计运用的是VH

10、DL语言中if语句先对其进行0-255的序列递增,之后再对递增到255的序列进行255-0的序列递减来实现的,正好是递增波形与递增波形相结合得到。程序语句设置内部接点信号a作为递减信号,判断波形处于递增或者是递减阶段。当a为0时,递增,计数器加1;a为1时,递减,计数器减1。 程序主要语句如下所示: if a=0 then if tmp=11111110 then tmp:=11111111; a:=1; else tmp:=tmp+1; end if;else if tmp=00000001 then tmp:=00000000; a:=0; else tmp:=tmp-1; end if;

11、end if;其中,时钟信号clk,复位信号reset, 8位二进制输出信号端口q3。程序设计流程图如下图所示:图2.5 三角波设计流程图2.1.5 正弦波正弦波的设计运用的是VHDL语言中if语句与case语句,由于正弦波是模拟信号波形,而VHDL语言程序输出的是数字信号波形。因此,实验中对信号进行等间距采样,等效正弦信号波形。程序采样点为128个,等效为近似的正弦波形。程序主要语句如下所示: if tmp =127 then tmp:=0; else tmp:=tmp+1;end if;case tmp iswhen 00=ddddddddnull;end case;end if;其中,时

12、钟信号clk,复位信号clr, 8位二进制输出信号端口d。程序设计流程图如下图所示:图2.6 正弦波设计流程图2.1.6 方波阶梯波运用VHDL语言中if语句设计,程序中每计数64次对输出信号进行一次翻转,从而得到周期为输入时钟信号周期128倍的输出方波信号。程序设置内部节点信号a作为输出判断信号,计数器计数0-63后,对输出判断信号取反,实现0、1的变化。 if cnt63 then cnt:=cnt+1; else cnt:=0; a=not a; end if;其中,a为0 是输出低电平,a为1时输出高电平。 if a =1 then q6=255; else q6qqqqqqq=nul

13、l;end case;其中,时钟信号clk,输入选择sel,8位二进制输出信号端口q。程序设计流程图如下图所示:图2.7 6选1多路开关设计流程图第三章 系统调试与分析3.1 系统调试3.1.1 调试方法 实验运用的是VHDL语言与原理图混合设计方法,因此有程序调试和原理图调试两部分。实验步骤如下:1、 新建工程、VHDL文档输入设计模块子程序2、 调试各个子程序是否存在语法错误的问题3、 对各子模块进行波形仿真,验证输出是否正确4、 各子模块生成图元文件5、 新建工程、原理图文档,将各子模块文件夹下的文档拷贝到新建工程中6、 根据系统设计框图将各个模块图元文件连成原理图7、 检验原理图是否正

14、确8、 最后原理图仿真,检查波形图是否正确3.1.2 调试故障及解决方法在整个实验调试过程中,最主要出现的问题是对VHDL语言的不熟悉,导致在程序编写过程中出现了不少语法错误导致影响实验结果的问题。其次是软件运用不熟练使得影响实验进度,有时也会影响了实验调试。针对实验中出现了问题,总结了以下一些解决方法和注意事项:1、 程序书写过程中要注意程序的层次,便于出错时对错误的查找;2、 程序输入时应仔细认真,以免个别字母的错误输入影响实验结果;3、 分模块设计分模块调试,便于对错误的纠正;4、 项目名必须与顶层设计文件名相同;5、 程序命名过程中,以一定意义的字母命名,便于之后读程序;6、 在原理图

15、设计上,注意总线的书写。 设计中主要用的是VHDL语言中的if语句和case语句,因此对这两种语句的运用要十分熟悉。并且其不区分大小写,所以在命名时应注意此问题。3.2 结果分析3.2.1 递增波形 通过对程序语句的调试过程,得到以下波形图:图3.1 递增波形图图3.2 递增模块图 由波形图可以看出,在每个时钟上升沿,输出加1,从波形图上我们也可以看到,输出由00000000增至11111111,从而得到了递增波形,并且其周期为时钟周期的256倍。因此,从调试得到的波形图可知,程序设计实现了递增波形的产生功能。3.2.2 递减波形 递减波形程序调试,得到了以下的波形图:图3.3 递减波形图图3

16、.4 递减模块图 由波形图可以看出,在每个时钟上升沿,输出减1,从波形图上我们也可以看到,输出由11111111减到00000000,与递增波形正好是相反的,其周期与递增波形周期相等,为时钟周期的256倍。因此,从调试得到的波形图可知,程序设计实现了递减波形的产生功能。3.2.3 三角波三角波程序调试至无语法错误后,仿真得到以下波形图:图3.5三角波波形图图3.6 三角波模块图 通过对波形图的分析,每个时钟上升沿计数器加1或者减1,有一个最大值11111111。输出由00000000递增至11111111后再递减至00000000,从而得到了三角波。从图上我们可以看到输出的递增与递减,程序实现

17、了三角波的产生功能。3.2.4 正弦波 对正弦波程序的调试,得到了以下波形图:图3.7 正弦波波形图图3.8 正弦波模块图 程序根据正弦波采样取点,得到了以上仿真波形。与递增波形不同的是,正弦波设计中由于取点并不按一定规律得到,无法采用循环来实现,相对于前面波形的设计较难一些。因此,程序中利用case语句,通过查表的方法来实现输出正弦波。3.2.5 阶梯波 阶梯波调试得到波形图如下所示:图3.9 阶梯波波形图图3.10 阶梯波模块图 与之前设计的递增波形比较我们不难发现,阶梯波与递增波形是类似的,其区别就在于,阶梯波阶梯增量为16,而递增波形的阶梯增量是1。并且在阶梯波的设计中应注意,阶梯增量

18、应设置为,只有这样才能保证阶梯的每一层的阶梯高度是一样的。实验设计程序实现了阶梯波的产生。3.3.6 方波 方波调试得到波形图如下图所示:图3.11 方波波形图图3.12 方波模块图 由上图我们可以知道,程序的调试实现了方波的产生。我们的输如时钟信号就是一个方波信号,因此,在方波发生器的设计上要相对简单。实验是通过设置的计数周期,之后对输出信号进行翻转,从而得到所需的波形。3.3.7 6选1多路开关 由于要实现用户对所需波形的选择功能,因此,实验设计了一个6选1多路开关。通过对用户输入否认判断,从而输出用户所需的信号波。调试得到如下波形图:图3.13 6选1多路开关图3.2 6选1模块图 通过

19、对部分输出波形的观察,在输入信号为000时,选择输出z1的输入信号,满足多路开关的功能实现。3.2.8 原理图实验运用的是VHDL语言和原理图混合设计的方法,因此,在所以程序调试成功后,生成每个子模块的元件图形。再根据设计框图,将个子模块连接,得到系统原理图。原理图调试得到如下波形:图3.8 原理图选择输出方波 各波形发生器模块产生波形,6选1多路开关,进行对所需波形信号的选择。仿真过程中,输入101信号,选择的是方波信号的输出。图3.9 原理图选择输出递减波形输入001信号,选择的是递减波形信号的输出。第四章 结论 本次实验室一个基于VHDL语言的波形发生器的设计,该波形发生器能够产生递增斜

20、波、递减斜波、阶梯波、正弦波、方波、三角波。实验中通过Quartus II软件编程,运用VHDL语言与原理图混合设计的方法,VHDL语言描述底层模块,原理图设计方法设计顶层原理图文件。最后通过6选1多路开关的设计,实验了对需要波形的选择。实验分模块设计,在完成一个模块时即对其进行调试修改,防止了最后模块综合时存在调试困难的情况出现。如果是对元件例化相对较熟练的同学,也可采用元件例化的方法进行程序的编写。但在此过程中,应特别注意VHDL语言的运用,以防语法错误导致影响实验结果。实验最后将程序下载到EPM570T100C5中,供实际运用。参考文献1 朱正伟. EDA技术及应用M.北京:清华大学出版

21、社,2005.2 童诗白.模拟电子技术基础(第五版)M.北京:高等教育出版社.2005.3 谢自美.电子技术基础实验与课程设计M.北京:电子工业出版社.2006.附录一 原理图附录二 程序清单-递增波形library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dizeng is port(clk,reset:in std_logic; -定义时钟和复位 q1:out std_logic_vector(7 downto 0); -定义8位输出end dizeng;architecture beh

22、ave of dizeng isbegin process(clk,reset) -定义敏感信号表variable tmp:std_logic_vector(7 downto 0); -定义内部节点信号作为计数器begin if reset=0 then -复位 tmp:=00000000; elsif clkevent and clk=1 then -等待时钟上升沿 if tmp=11111111 then -计数器清零 tmp:=00000000; else tmp:=tmp+1; -计数器加1 end if; end if;q1=tmp; -输出end process;end behav

23、e;-递减波形library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity dijian is port(clk,reset:in std_logic; q2:out std_logic_vector(7 downto 0);end dijian;architecture behave of dijian isbegin process(clk,reset) variable tmp:std_logic_vector(7 downto 0);begin if reset=0 then tmp:=0

24、0000000; elsif clkevent and clk=1 then if tmp=00000000 then tmp:=11111111; else tmp:=tmp-1; -计数器减1 end if; end if;q2=tmp;end process;end behave;-三角波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity sjiao is port(clk,reset:in std_logic; q3:out std_logic_vector(7 downto 0

25、);end sjiao;architecture behave of sjiao isbegin process(clk,reset)variable tmp:std_logic_vector(7 downto 0); -定义内部节点信号tmp作为计数器variable a:std_logic; -定义内部节点信号a作为递减信号begin if reset=0 then tmp:=00000000; elsif clkevent and clk=1 then if a=0 then -a为0,递增;a为1,递减 if tmp=11111110 then tmp:=11111111; a:=1;

26、 else tmp:=tmp+1; end if;else if tmp=00000001 then tmp:=00000000; a:=0; else tmp:=tmp-1; end if;end if;end if;q3=tmp;end process;end behave;-正弦波library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity zxian is port(clk,clr:in std_logic; d:out integer range 0 to 255);end zxian;

27、architecture behave of zxian isbegin process(clk,clr) variable tmp:integer range 0 to 127; begin if clr=0 then dddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddddnull; end case; end if; end process;end behave;-阶梯波library i

28、eee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity jti is port(clk,reset:in std_logic; q5:out std_logic_vector(7 downto 0);end jti;architecture behave of jti isbegin process(clk,reset)variable tmp:std_logic_vector(7 downto 0);variable a:std_logic;beginif reset=0 then tmp:=0000000

29、0; elsif clkevent and clk=1 then tmp:=tmp+16; -定义增量为16end if;q5=tmp;end process;end behave;-方波library ieee;use ieee.std_logic_1164.all;entity fbo is port(clk,clr: in std_logic; q6:out integer range 0 to 255);end fbo;architecture behave of fbo issignal a:bit; -定义内部节点信号a作为输出判断信号begin process(clk,clr)

30、variable cnt:INTEGER; begin if clr=0 then a=0; elsif clkevent and clk=1 then if cnt63 then cnt:=cnt+1; else cnt:=0; a=NOT a; -输出判断信号取反 end if; end if; end process; process(clk,a) begin if clkevent and clk=1 then if a =1 then -a为1时,输出高电平;a为0时,输出低电平 q6=255; else q6=0; end if; end if; end process;end behave;27

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 学术论文 > 毕业论文

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922