数字秒表实验报告

EDA课程设计

题目:基于VHDL的数字秒表设计

学生姓名               

学    号          

学    院      电子信息学院  

专    业      10通信工程   

指导教师               

二零一二年十二月

基于VHDL的数字秒表设计

摘要

当前电子系统的设计正朝着速度快,容量大,体积小,质量轻,省电的方向发展。推动该潮流迅速发展的决定性因素就是使用了现代化的EDA设计工具。此次课程设计先确定了系统的逻辑功能,选择电路结构,然后确定并设计电路所需的数据处理以及控制模块,在Quartus II上以超高速硬件描述语言VHDL为系统逻辑描述方法完成了数字秒表所需的分频模块,十进制计数控制模块,六进制计数控制模块与顶层设计和引脚分配,对其进行编译仿真,并下载到实验板上实际验证,通过本设计锻炼了计算机应用能力、VHDL语言的编程能力和Quartus II的使用能力,此次设计圆满完成了用VHDL语言设计1/1000秒数字秒表并仿真和实际下载到ALTERA公司的ACEX1K系列的EP1K30TC144-3中实现。

关键词:EDA、Quartus II、VHDL、模块、仿真、ACEX1K

Abstract

The electronic system design is moving speed, large capacity, small volume, light weight, energy saving direction. The trend of rapid development of determinant is the use of modern EDA design tools. This course is designed to determine the logic function of the system, establish the algorithm process, selection of circuit structure and circuit design, and then determine the desired data processing and control module, in the Quartus II to very high speed hardware description language VHDL as the system logical description method for completing the digital stopwatch desired frequency module, decimal counting control module, base six counting control module with top design and pin assignment, the compiled simulation, and downloaded to the experiments on actual test and verify, through the design of exercise ability of computer application and VHDL programming language and Quartus II using capability, the design was completed by VHDL language design 1\/1000 seconds stopwatch and simulation and the actual download to ALTERA company's ACEX1K series EP1K30TC144-3 implementation.

Key WordsEDA、Quartus II、VHDL、Module、Simulation、ACEX1K

目录

摘要----------------------------------------------------------------2       

Abstract------------------------------------------------------------2

一、设计要求--------------------------------------------------------4

二、设计思想与方案论证----------------------------------------------4

    2.1 设计思想----------------------------------------------------4

    2.2 方案论证----------------------------------------------------4

三、系统设计--------------------------------------------------------5

    3.1 顶层电路设计------------------------------------------------5

    3.2时钟分频电路模块---------------------------------------------6

    3.3十进制计数控制模块-------------------------------------------7

    3.4六进制计数控制模块-------------------------------------------7

四、系统仿真--------------------------------------------------------8

    4.1 模块仿真----------------------------------------------------8

       4.1.1 时钟分频电路模块仿真 ----------------------------------8

       4.1.2 十进制计数控制模块仿真---------------------------------9

       4.1.3 六进制计数控制模块仿真---------------------------------9

    4.2 总体仿真---------------------------------------------------10

五、下载实现--------------------------------------------------------10

    5.1 引脚分配---------------------------------------------------11

    5.2 下载验证---------------------------------------------------11

六、问题与不足-----------------------------------------------------13七、心得体会-------------------------------------------------------13参考文献-----------------------------------------------------------14

附录---------------------------------------------------------------14

附录1 :本设计各模块代码-------------------------------------------14

一、 设计要求

设计用于体育比赛用的数字秒表,要求

1、 计时精度大于1/1000秒,计时器能显示1/1000秒的时间,提供给计时器内部定时的时钟频率为12MHz;计时器的最长计时时间为1小时,为此需要一个7位的显示器,显示的最长时间为59分59.999秒

2、设计有复位和起/停开关

(1) 复位开关用来使计时器清零,并做好计时准备。

(2) 起/停开关的使用方法与传统的机械式计时器相同,即按一下起/停开关,启动计时器开始计时,再按一下起/停开关计时终止。

(3) 复位开关可以在任何情况下使用,即使在计时过程中,只要按一下复位开关,计时进程立刻终止,并对计时器清零。

二、设计思想与方案论证

2.1设计思想

通过分频器将12M晶振所提供的信号进行6000分频,生成脉冲作为计时信号,经计数器累加计数实现数字秒表计数的功能。设计采用七位LED数码管显示分、秒,需要5个10计数器和2个模6计数器。使用按键开关可实现开始/结束计时操作以及复位清零操作。

2.2方案论证

利用VHDL语言进行数字秒表设计有多种方法。

可以利用原件例化语句将各模块联系起来,也可以使用原理图的方法实现此功能,考虑到此次设计中端口众多,使用例化语句繁琐易错,因此采用了条理清晰的绘制原理图的方法生成顶层文件,实现数字秒表功能。

在设计中可以将每个单独的功能写成一个独立的VHDL文件,此次设计中没有将控制模块独立出来,而是将它融合到十进制计数程序和六进制计数程序中,最终生成十进制计数控制器和六进制计数控制器。虽然显得繁琐,但是比较易于理解,程序中也比较容易操作。

三、 系统设计

整个系统设计是采用自顶向下分析,自底向上设计。将数字秒表系统的整体分解为各个模块电路。该部分详细介绍了数字秒表系统的各个模块的设计,并对各个模块的每一个部分进行了分析,在第四部分对系统模型进行了访真与程序调试。

3.1 顶层电路设计

在顶层设计中,要对内部分各功能块的连接关系和对外的接口关系进行描述,而功能块实际的逻辑功能和具体的实现形式则由下一层模块来描述。

3-1数字秒表原理图

3-2顶层电路图

 

根据数字秒表的原理图来进行顶层文件的设计。此次设计中使用了总线,从而简化了顶层电路图的绘制。

3.2 时钟分频电路模块

在基于EDA技术的数字电路系统设计中,分频电路应用十分广泛。常常用分频电路来得到数字系统中各种不同频率的控制信号。所谓分频电路,就是将一个给定的频率较高的数字输入信号经过适当处理后,产生一个或数个频率较低的数字输出信号。

本设计需要一个计时范围为0.001s-59分59.999秒的秒表,首先输入一个频率为12MHZ时钟信号源,由CLK输入,经其进行6000分频后获得一个比较精确的1000Hz计时脉冲,即周期为1/1000秒的计时脉冲,由CLR_CNT输出。

3-3分频器符号

3.3 十进制计数控制模块

计数是一种最简单基本的运算,计数器就是实现这种运算的逻辑电路,计数器在数字系统中主要是对脉冲的个数进行计数,以实现测量、计数和控制的功能,同时兼有分频功能。

此次设计中为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通十进制计数器程序中,将两者综合生成十进制计数控制模块。

3-4十进制计数控制模块符号

其中CLK为时钟信号输入端、RST为复位信号输入端、 EN为使能控制信号输入端、 DOUT[3..0]为十进制计数数据输出端、 COUT为进位信号输出端。

3.4 六进制计数控制模块

六进制计数器与十进制计数器类似,同样此处为程序方便没有将按键控制功能单独设为一个模块,而是将其添加到了普通六进制计数器程序中,将两者综合生成六进制计数控制模块。

3-5六进制计数控制模块符号

其中CLK为时钟信号输入端、RST为复位信号输入端、 EN为使能控制信号输入端、 DOUT[3..0]为六进制计数数据输出端、 COUT为进位信号输出端。

四、 系统仿真

系统设计完成后需要对其编译仿真,观看仿真波形图来判断设计的是否以实现期望功能。时序仿真也叫后仿真,时序仿真使用布局布线后器件给出的模块和连线的延时信息, 在最坏的情况下对电路的行为作出实际地估价。时序仿真使用的仿真器和功能仿真使用的仿真器是相同的,所需的流程和激励也是相同的;惟一的差别是为时序仿真加载到仿真器的设计包括基于实际布局布线设计的最坏情况的布局布线延时,并且在仿真结果波形图中,时序仿真后的信号加载了时延,而功能仿真没有,时序仿真波形会有毛刺现象。

4.1 模块仿真

4.1.1 时钟分频电路模块仿真

4-1时钟分频电路模块仿真结果

4.1.2 十进制计数控制模块仿真

4-2十进制计数控制模块仿真结果

4.1.3 六进制计数控制模块仿真

4-3六进制计数控制模块仿真结果

4.2 总体仿真

4-4总体仿真结果

五、 下载实现

EDA设计最终要下载到实际硬件中进行测试才可检测设计的是否可靠,在现代化的软件中利用清晰明了的算法编写程序,然后把程序下载到可编程芯片中自动进行调试,大大方便了现有工作人员,减轻了其工作量,不用再在纸上画好算好逻辑门电路,再人工装成电路。Quartus II软件编译仿真功能强大,使用方便,但是也有很多问题不会在软件仿真时出现,不能最终判定设计是完善的,下载到硬件中实际运行才能检测设计是否可靠。

此次设计采用ACEX1K系列的EP1K30TC144-3中实现,根据需要实现的功能最终选用了其中的模式0。

5.1 引脚分配

为实现数字秒表的规定功能,需用到一个12M的时钟源,两个电平按键(一个用来进行复位功能,一个用来控制数字秒表的开启与关闭),除此之外还需要七个数码管(高两位数码管用于显示分,第三位的数码管用于显示时分秒、百分秒、千分秒,剩余的中间两位数码管用来显示秒)。具体的引脚分配如下:

5-1引脚分配图

5.2 下载验证

下载到芯片需要连接实验板与电脑,我们采用USB BLASTER来连接下载。具体的下载操作此处不再叙述。此次设计下载到试验箱后的具体操作如下:

1、将短路帽接到clock0中12M处;

2、按下按键3,数字秒表开始计时,再次按下按键3,数码管停止计时并持续显示最终的结果;再次按下按键3,数字秒表在停止时数的基础上继续计时;

3、无论在数字秒表工作的任何时刻,按下按键4,都会使数字秒表计时清零。

实际部分操作的效果图如下:

六、问题与不足

此次实验虽然实现了题目要求的基本功能,但并没有对功能进行必要的拓展,着实显得内容空洞,除此之外由于大部分时间都浪费在了考虑太多错误问题导致最终没有时间来考虑按键毛刺对实验结果的影响。

七、心得体会

此次课程设计题目简单,但由于自身对EDA掌握程度有限,以及对试验箱不熟悉,导致把简单的问题复杂化走了不少弯路。起初看到题目,没有仔细审题,将题目中要求的按键要实现的功能理解错误,接近尾声时才发现题目理解错了;由于对试验箱各部件不熟悉加上近期频繁接触单片机,因此错误认为EDA中按键也是产生脉冲的,想通过控制程序对脉冲进行控制,又想到当按键按下松开瞬间秒表开始工作,再次按下按键时秒表停止工作,第一次按键按下持续时间长短对结果无影响,所以就对程序进行了大改进,最终十进制计数控制程序仅对第一位数码管有效,对高位数码管并不起控制作用。在进行测试时偶然间发现实验箱上按键能保持电平,才恍然大悟把所有的问题都复杂化了,删掉了复杂的变量控制程序,留下最简单的,最终实现了题目要求的功能。

通过此次课程设计,学到了很多。即使再简单的题目也会因为知识的匮乏而显得困难,因此需要加强对EDA知识的学习;现阶段接触到的单片机按键产生脉冲,因此就定势思维的认为EDA中也是如此,导致了一连串的复杂化,可能翻一下课表,查一下不确定的问题,就不会出现此类问题;实验是学习EDA最好的方法,在没做实验前,纯理论的学习效率很低,接触实验后,才明白好多不懂的问题,做了一个完整的题目就对EDA的基本流程有了大致的了解,胜于看几遍书,以后要加强实验练习。

参考文献

[1]潘松黄继业编著.EDA技术使用教程---VHDL版(第四版).科学出版社.2011

附录

附录1 :此次设计各模块代码

时钟分频电路模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CLKGEN IS

    PORT( CLK : IN STD_LOGIC;

        CLR_CNT: OUT STD_LOGIC );

END CLKGEN;

ARCHITECTURE behav OF CLKGEN IS

 SIGNAL MIDDLECLK : STD_LOGIC;

BEGIN

PROCESS(CLK)

 VARIABLE K :INTEGER:=6000;

BEGIN

    IF CLK'EVENT AND CLK = '1' THEN

        K := K-1;

        IF K = 0 THEN

            MIDDLECLK <= NOT MIDDLECLK;

            K := 6000;

        END IF;

    END IF;

END PROCESS;

CLR_CNT <= MIDDLECLK;

END behav;

六进制计数控制模块

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL;

USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY CNT6 IS

       PORT( CLK,RST,EN : IN STD_LOGIC;

              DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

              COUT : OUT STD_LOGIC );

END CNT6;

ARCHITECTURE behav OF CNT6 IS

BEGIN

PROCESS (CLK,RST,EN)

       VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

       IF RST = '1' THEN Q := (OTHERS=>'0');

       ELSIF CLK'EVENT AND CLK = '1' THEN

              IF EN = '1' THEN

                            IF Q<5 THEN

                                   Q := Q + 1;

                            ELSE

                                   Q := (OTHERS=>'0');

                            END IF;

              ELSE

                      Q := Q ;

              END IF;

       END IF;

       IF Q = "0101" THEN COUT <= '0';

       ELSE COUT <= '1';

       END IF;

DOUT<= Q ;

END PROCESS;

END behav;

十进制计数控制模块

ENTITY CNT10 IS

       PORT( CLK,RST,EN : IN STD_LOGIC;

              DOUT : OUT STD_LOGIC_VECTOR(3 DOWNTO 0);

              COUT : OUT STD_LOGIC );

END CNT10;

ARCHITECTURE behav OF CNT10 IS

BEGIN

PROCESS (CLK,RST,EN)

       VARIABLE Q : STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

       IF RST = '1' THEN Q := (OTHERS=>'0');

       ELSIF CLK'EVENT AND CLK = '1' THEN

              IF EN = '1' THEN

                            IF Q<9 THEN

                                   Q := Q + 1;

                            ELSE

                                   Q := (OTHERS=>'0');

                            END IF;

              ELSE

                      Q := Q ;

              END IF;

       END IF;

       IF Q = "1001" THEN COUT <= '0';

       ELSE COUT <= '1';

       END IF;

DOUT<= Q ;

END PROCESS;

END behav;

相关推荐