数字秒表及电子琴的设计EDAWord文档下载推荐.docx
- 文档编号:21878860
- 上传时间:2023-02-01
- 格式:DOCX
- 页数:10
- 大小:212.86KB
数字秒表及电子琴的设计EDAWord文档下载推荐.docx
《数字秒表及电子琴的设计EDAWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《数字秒表及电子琴的设计EDAWord文档下载推荐.docx(10页珍藏版)》请在冰豆网上搜索。
7.译码显示模块8
三、器件编程与硬件下载10
四、实际系统调试10
1.实际系统调试的步骤10
2.实际系统调试的注意点11
五、设计中遇到的问题总结及心得体会11
参考文献11
摘要
VHDL语言设计数字系统,可以大大缩短数字系统的开发时间,本文利用VHDL语言进行了数字秒表以及电子琴电路的设计。
数字秒表的逻辑结构主要由分频模块、模60模块、模24模块、模100模块、消颤模块、选通模块和译码显示模块组成,同时有一个启动信号和一个归零信号,以便秒表能够随意停止及启动。
电子琴由音调发声模块QIN和分频模块FANA组成,分频预置值控制数控分频模块进行分频,由此得到每个音阶对应的频率。
根据秒表和电子琴的电路特点,本设计采用层次设计概念,利用VHDL语言描述,将设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来联试仿真下载,最终完成设计。
关键词:
VHDL秒表电子琴
一、系统总体设计思想
1.需求分析
通过本课程的学习使学生掌握可编程器件、EDA开发系统软件、硬件描述语言和电子线路设计与技能训练等各方面知识;
提高工程实践能力;
学会应用EDA技术解决一些简单的电子设计问题。
2.总体构思
2.1秒表总体构思
图1-1秒表总体设计图
秒表的逻辑结构主要由分频模块、模60模块、模24模块、模100模块、消颤模块、选通模块和译码显示模块组成,同时有一个启动信号和一个归零信号,以便秒表能够随意停止及启动。
根据秒表的电路特点,本设计采用层次设计概念,利用VHDL语言描述,将设计任务分成若干模块,规定每一模块的功能和各模块之间的接口,然后再将各模块合起来联试仿真下载,完成设计,如图1-1所示。
本设计选用4MHZ时钟频率,对4MHZ时钟信号进行分频得到100HZ和1000HZ信号。
将得到的100HZ时钟脉冲作为秒表输入,秒表模100模块计数,百分之一秒位正常计数;
将得到的进位信号作为模60输入,秒位正常计数;
再将秒位进位信号作为下一个模60的输入,分位正常计数;
最后,将分位得到的进位信号作为模24的输入,实现小时的正常计数。
所以本程序的主体部分就是对分频模块、模100计数器、模60计数器和模24计数器的设计。
秒表主体设计结束需要将数据在LED七段显示灯管数据显示采用动态扫描的方式实现数据的输出,此时需要将分频得到的1000HZ高频脉冲接入七段显示灯管的扫描端口,8个七段显示管I/O数据线接受数据信息,七段显示管数据变化通过位选通引脚实现。
由人眼的视觉留像原理,当扫描频率超过24hz,由于人眼的视觉反应延迟,可以看到七段数码管数字实现连续变化。
此外,为了保证按键输入的准确性,本设计加入了相应的消颤电路。
为了保证控制的灵活性,加入了启停开关。
本设计原理图如图1-2所示。
图1-2秒表设计总体原理图
2.2电子琴总体构思
该系统基于计算机中时钟分频器的原理,采用自顶向下的设计方法来实现,通过按键输入来控制音响。
系统由音调发生模块和数控分频模块三个部分组成。
系统实现是用硬件描述语言VHDL按模块化方式进行设计,然后进行编程、时序仿真、电路功能验证,奏出美妙的乐曲(当然由于条件限制,暂不进行功能验证,只进行编程和时序仿真)。
该设计最重要的一点就是通过按键控制不同的音调发生,每一个音调对应不同的频率,从而输出对应频率的声音。
系统的总体设计原理图如图1-3所示。
图1-3电子琴总体设计原理图
二、系统各组成模块详细设计、仿真验证
在本次实验我主要完成了数字秒表模100、模60、模24模块及译码显示电路的设计,下文我将着重介绍上述模块的设计方案及仿真。
关于电子琴的设计,电子琴由音调发声模块QIN和分频模块FANA组成,音调发生模块的作用是产生音阶的分频预置值。
当8位发声控制输入信号中的某一位为高电平时,则对应某一音阶的数值将输出,该数值即为该音阶的分频预置值,分频预置值控制数控分频模块进行分频,由此得到每个音阶对应的频率。
此处设计比较简单下文不作详述。
1.分频模块
分频模块用于将4MHZ时钟频率分频为100HZ和1000HZ。
2.消颤模块
按键信号在开关多次弹跳才能稳定的过程中,可能产生多个脉冲,所以应该根据实际情况进行消颤处理,以提取相对稳定的电平状态。
多次检测按键信号电平值,提取前后两个信号进行比较,最终获得按键的最终状态。
3.选通模块
动态显示电路想实现数据的动态显示,首先,需要有选通信号,此处需要选通模块与译码器配合使用;
其次,要实现动态显示,则需要将每一位要显示的数据轮流经选择至显示模块,此处,需要选通模块产生数据选择信号。
4.模60模块
模60模块、模24模块和模100模块原理类似,此处以模60模块为例,详细介绍我的设计思路。
模60模块的逻辑流程图如图2-1所示。
图2-1模60模块流程图
模60模块主要代码如下:
fclr='
0'
then
cnt1:
="
0000"
;
cnt0:
elsifclk'
eventandclk='
1'
ifen='
then
ifcnt1="
0101"
andcnt0="
1000"
co<
='
cnt0:
1001"
elsifcnt0<
"
cnt0:
=cnt0+1;
else
ifcnt1<
then
cnt1:
=cnt1+1;
co<
endif;
endif;
endif;
正常计数状态当每次时钟信号上升沿到来,计数值加1,每次检测计数值是否到58,当到达58就将计数值在下一个周期上升沿置为59,并将进位信号置为1,当计数值大于59,计数值从0开始重新计数。
模60模块仿真波形如图2-2所示:
图2-2模60模块仿真图
5.模24模块
模24模块仿真图如图2-3所示:
图2-3模24电路仿真图
6.模100模块
模100模块仿真图如图2-4所示:
:
加1计数,加到9高位进位。
图2-4模100仿真图
加到99输出进位信号。
7.译码显示模块
译码显示电路可以通过数码管的选通引脚轮流选通输入数据,从而,在扫描频率足够高的情况下可实现动态显示效果。
译码显示电路包含选通电路、数据选择电路以及七段显示码转换电路。
译码显示电路设计原理图如图2-5所示。
图2-5译码显示电路
选通电路主要代码如下:
process(clk)
variablecnt:
std_logic_vector(2downto0);
begin
ifclk'
cnt:
=cnt+1;
q<
=cnt;
endprocess;
每一时钟上升沿到来,进行加一计数,选通下一种情况。
仿真波形如图2-6所示:
图2-6选通电路仿真图
其对应配合的数据选择电路主要代码如下:
process(sel)
begin
caseselis
when"
000"
=>
q<
=bai0;
001"
=bai1;
010"
=sec0;
011"
=sec1;
100"
=min0;
101"
=min1;
110"
=h0;
111"
=h1;
whenothers=>
1111"
endcase;
情况0输出百分个位,情况1输出百分十位,情况2输出秒个位,情况3输出秒十位,情况4输出分个位,情况5输出分十位,情况6输出时个位,情况7输出时十位。
译码电路主要代码如下:
process(d)
casedis
0111111"
0001"
0000110"
0010"
1011011"
0011"
1001111"
0100"
1100110"
1101101"
0110"
1111101"
0111"
0100111"
1111111"
1101111"
0000000"
将十进制数译为七段显示码显示数据。
三、器件编程与硬件下载
(1)在MAX+plusⅡ软件中为顶层文件选择好芯片类型,选定引脚后进行编译。
(2)将实验箱端口与计算机相应端口连接,检测试验箱是否可以使用,经检测无误后,关闭实验箱,将主芯片标号对应顶层文件相应引脚标号连线到相应器件处。
即输入时钟信号端接实验箱时钟发生电路CLK0输出端(用4MHz信号),启动信号端和归零信号端分别接两个拨码开关,输出端SEL[2..0]分别接显示模块的SEL2—SEL0端,输出a,b,c,d,e,f,g,dp端接八段显示译码器的相应输入端,。
连接好连线后打开实验箱电源,将设计好的程序下载到实验箱的FLEX10K\EPF10K10LC84-3芯片中即可测试功能。
四、实际系统调试
1.实际系统调试的步骤
在实际系统调试过程中我采用了以下步骤:
1.首先,我将4M时钟信号分频以后接到LED灯,验证了分频电路的准确性;
2.接着,验证模100、模60、模24电路时,可将各模块单独接入时钟信号,将输出信号输出至LED灯,最终测试得到模100、模60、模24电路的准确性;
3.然后,为了验证动态显示电路的准确性,我将SEL模块、BBC模块和DISP模块组成简单的动态显示电路,输入简单的数字,确认使能信号有效,数据选择器有效,七段显示码转换电路准确;
4.最后,将所有调试好的模块一步步组合在一起,直至所有电路搭建结束,测试实验结果准确性。
2.实际系统调试的注意点
实际调试中一定要注意分模块调试,然后再一步步将模块组合在一起,直至电路搭建结束。
而且特别要注意分配管脚要对照数据手册,很多时候都是因为管脚分配错误使得最终运行结果出错。
五、设计中遇到的问题总结及心得体会
在这次课程设计中,虽然没有付出太多时间,但还是学到了很多。
一是对VHDL语言的熟悉,以及VHDL语言作为一门底层语言在EDA设计中的重要地位。
二是对系统调试的掌握,程序编好之后,重要的是编译调试。
在程序复杂的情况下,会有很多复杂的模块,调试的时候要分模块调试,这样把问题以大化小,提高了效率。
初涉VHDL语言以致很多语法和语言基本结构、算法生疏,运用不灵活。
因此,在编写源程序上遇到极大的难题,而且在编译运行程序时对出错的语句理解不到位,导致难于下手修正错误语句、语法,这使得在设计程序时遇到更大的很大的麻烦。
还有就是VHDL语言的数据类型和语法结构都很容易造成混淆,比如INSTD_LOGIC_VECTOR(7DOWNTO0)语句,它有时既可以认为是从7下降到0,也可认为是从0上升到7,当输入有多位时,这就容易造成在读懂仿真波形图时读位数倒置,使仿真现象与理论结果相出入。
在分频模块程序设计时遇到了编译不出来,图形错误等编译时总是出现非法的错误,经过老师修改和指正,最后终于编译成功,完成了该系统的文本设计。
参考文献
【1】
电子技术应用
2006
年
09
期
【2】潘松,黄继业
.
EDA
技术实用教程(第三版).
科学出版社
2010-07
【3】曾繁泰
陈美金
VHDL
程序设计[M].北京:
清华大学出版社,2001
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字 秒表 电子琴 设计 EDA
![提示](https://static.bdocx.com/images/bang_tan.gif)