EDA课程设计(二)
设计名称:数字秒表及电子琴的设计
班级:
学号:
姓名:
指导老师:
同组成员:
20##年9月30日
目录
一、系统总体设计思想............................................................................................... 4
1. 需求分析.............................................................................................................. 4
2. 总体构思.............................................................................................................. 4
二、系统各组成模块详细设计、仿真验证(着重译码显示部分)....................... 5
1. 分频模块.............................................................................................................. 6
2.消颤模块................................................................................................................ 6
3.选通模块................................................................................................................ 6
4.模60模块.............................................................................................................. 6
5.模24模块.............................................................................................................. 7
6.模100模块............................................................................................................. 8
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:="0000";
elsif clk'event and clk='1'then
if en='1' then
if cnt1="0101" and cnt0="1000" then
co<='1';
cnt0:="1001";
elsif cnt0<"1001" then
cnt0:=cnt0+1;
else
cnt0:="0000";
if cnt1<"0101" then
cnt1:=cnt1+1;
else
cnt1:="0000";
co<='0';
end if;
end if;
end if;
end if;
正常计数状态当每次时钟信号上升沿到来,计数值加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)
variable cnt:std_logic_vector(2 downto 0);
begin
if clk'event and clk='1' then
cnt:=cnt+1;
end if;
q<=cnt;
end process;
每一时钟上升沿到来,进行加一计数,选通下一种情况。
仿真波形如图2-6所示:
图2-6 选通电路仿真图
其对应配合的数据选择电路主要代码如下:
process(sel)
begin
case sel is
when "000"=>q<=bai0;
when "001"=>q<=bai1;
when "010"=>q<=sec0;
when "011"=>q<=sec1;
when "100"=>q<=min0;
when "101"=>q<=min1;
when "110"=>q<=h0;
when "111"=>q<=h1;
when others=>q<="1111";
end case;
end process;
情况0输出百分个位,情况1输出百分十位,情况2输出秒个位,情况3输出秒十位,情况4输出分个位,情况5输出分十位,情况6输出时个位,情况7输出时十位。
译码电路主要代码如下:
process (d)
begin
case d is
when "0000"=>q<="0111111";
when "0001"=>q<="0000110";
when "0010"=>q<="1011011";
when "0011"=>q<="1001111";
when "0100"=>q<="1100110";
when "0101"=>q<="1101101";
when "0110"=>q<="1111101";
when "0111"=>q<="0100111";
when "1000"=>q<="1111111";
when "1001"=>q<="1101111";
when others=>q<="0000000";
end case;
end process;
将十进制数译为七段显示码显示数据。
三、器件编程与硬件下载
(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设计中的重要地位。二是对系统调试的掌握,程序编好之后,重要的是编译调试。在程序复杂的情况下,会有很多复杂的模块,调试的时候要分模块调试,这样把问题以大化小,提高了效率。
本次EDA设计,让我们进一步加强了动手实践能力,在处理程序的过程中也有遇到过问题,但在老师和学长的耐心指导下,一一克服并最终做成了这个实验。在这里要感谢老师和学长们百忙之中给予的帮助。
参考文献
【1】 电子技术应用 20## 年 09 期
【2】潘松,黄继业 . EDA 技术实用教程(第三版). 科学出版社 . 20##-07
【3】曾繁泰 陈美金 VHDL 程序设计[M].北京:清华大学出版社,2001