南理工eda2实验报告

更新时间:2023-10-06 08:15:02 阅读量: 综合文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

EDA设计(二) 课程设计报告

姓 名 学院(系) 专 业 标 题

彭浩洋 学 号 自动化学院 自动化 1110200129 基于VHDL语言的数字秒表的实现

南京理工大学

2014年 10 月

基于VHDL语言的数字秒表的实现

[摘要]:随着电子技术与计算机技术的发展,熟练掌握和运用EDA技术已成为电子类及相关专业本科人才不可或缺的一项技能。电子信息产品随着科学技术的进步,其电子器件和设计方法更新换代的速度日新月异。实现这种进步的原因就是电子设计技术和电子制造技术的发展,其核心就是EDA技术,本文主要介绍用VHDL语言实现数字秒表设计。

[关键字]:EDA技术;VHDL语言;数字秒表

1 设计方案

1. 1 ", 系统功能要求

(1) 具有时钟秒表系统功能要求显示功能, 用6个数码管分别显示时、分、秒; 计时范围为:00: 00: 00~ 23: 59:59。

(2) 计时精度是1s;

(3) 具有启/ 停开关, 复位开关, 可以在任何情况下使用。

1. 2 ", 总体框图

根据系统设计要求, 系统的底层设计主要由六十进制计数器模块、二十四进制计数器模块、分频模块、LED显示模块组成。系统顶层设计图如图所示:

图1

图一中左边为三个输入信号en,clk,reset,分为启/ 停开关,时钟信号和复位开关。中间是从上倒下时count24,count60,count60,fenpinqi;右边是clock1和输出信号wei[3..0], led[6.0]。

2 ??块功能设计

由六十进制计数器模块、二十四进制计数器模块、分频模块执行计时功能, 输入信号

2

是256 Hz,通过分频后为1hz,时钟信号是1 Hz 作为秒表的秒输入, 秒为60 进制计数器, 分也为60 进制计数器, 小时采用二十四进制计数器, 各级进位作为高位的使能控制。

2. 1 六十进制计数器模块

图2

该模块部分VHDL 源程序如下:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY count60 IS

PORT( en,Reset,clk: in STD_LOGIC;

qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(3 DOWNTO 0); rco: OUT STD_LOGIC); END count60;

ARCHITECTURE a OF count60 IS BEGIN process(clk)

variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0); variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0); begin

If Reset ='0'then tma:=\elsif clk'event and clk='1' then if en='1' then

rco<=tmb(2)and tmb(0)and tma(3)and tma(0); if tma=\ if tmb=\

3

else tmb:=tmb+1;

end if;

else tma:=tma+1; end if; end if; end if;

qa<=tma;qb<=tmb; end process; END a;

2. 2 二十四进制计数器模块

图3

该模块部分VHDL 源程序如下:

LIBRARY ieee;

USE ieee.std_logic_1164.ALL; USE ieee.std_logic_unsigned.ALL; ENTITY count24 IS

PORT( en,Reset,clk: in STD_LOGIC;

qa: out STD_LOGIC_VECTOR(3 DOWNTO 0); qb: out STD_LOGIC_VECTOR(3 DOWNTO 0)); END count24;

ARCHITECTURE a1 OF count24 IS BEGIN process(clk)

variable tma: STD_LOGIC_VECTOR(3 DOWNTO 0); variable tmb: STD_LOGIC_VECTOR(3 DOWNTO 0); begin

4

If Reset = '0'then tma:=\if clk'event and clk='1' then if en='1' then

if tma=\

elsif tmb=\ tma:=\ else tma:=tma+1; end if; end if; end if;end if;

qa<=tma;qb<=tmb; end process; END a1;

2. 3 分频器模块

图4

该模块部分VHDL 源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY fenpinqi IS

PORT (CLK,RST:in std_logic;

CLK_OUT:out std_logic); END fenpinqi;

ARCHITECTURE behav OF fenpinqi IS signal clk_data:std_logic; SIGNAL CNT6 : INTEGER := 0;

5

BEGIN

PROCESS(CLK) BEGIN

IF RST = '0' THEN CNT6<=0 ; ELSIF CLK'EVENT AND CLK='1' THEN

IF CNT6=2 THEN clk_data<=NOT clk_data;CNT6<=0; ELSE CNT6<=CNT6+1;

END IF; END IF; CLK_OUT<=clk_data; END PROCESS;

END behav;

2. 4 LED显示模块

图5

该模块部分VHDL 源程序如下:

LIBRARY IEEE;

USE IEEE.STD_LOGIC_1164.ALL; USE IEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITY clock1 IS

PORT(CLK: IN STD_LOGIC;

S1, S2, S3, S4, S5, S6: IN STD_LOGIC_VECTOR(3 DOWNTO 0); WEI: OUT STD_LOGIC_VECTOR(2 DOWNTO 0); LED: OUT STD_LOGIC_VECTOR(6 DOWNTO 0));

6

END ENTITY;

ARCHITECTURE behave OF clock1 IS

SIGNAL CNT6 : INTEGER RANGE 0 TO 5 := 0; SIGNAL SHUJU: STD_LOGIC_VECTOR(3 DOWNTO 0);

BEGIN

PRO1:PROCESS(CLK) BEGIN

IF CLK'EVENT AND CLK = '1' THEN

CNT6 <= CNT6 + 1; CASE CNT6 IS

WHEN 0 => WEI <= \WHEN 1 => WEI <= \WHEN 2 => WEI <= \WHEN 3 => WEI <= \WHEN 4 => WEI <= \WHEN 5 => WEI <= \WHEN OTHERS => NULL;

END CASE;

END IF;

END PROCESS;

PRO2: PROCESS(SHUJU)

BEGIN

CASE SHUJU IS

WHEN \WHEN \WHEN \WHEN \WHEN \

7

WHEN \WHEN \WHEN \WHEN \WHEN \WHEN others=> LED<= \

END CASE;

END PROCESS;

END ;

3 仿真波形及分析

各部分模块完成后, 用Quartus 对程序编译、仿真、得到的仿真波形,各模块仿真波形

及顶层仿真波形如下:

3.1 六十进制计数器模块仿真

图5

图6

图5、图6均为二十四进制计数器仿真波形图。

CLK:时钟信号 RST:复位信号 低电平清零 En:置数端 低电平不让它继续计数

qb、qa:分别为输出数的十位个位,qb取值范围为0-5,qa取值范围为0-9

rco:进位信号,当qb=5,qa=0, rco=0时,clk上升沿来到后,qb=0, qa=0, rco=1; 当qb=5,qa=0, rco=1时,clk上升沿来到后,qb=0, qa=0, rco=0

8

3.2

二十四进制计数器模块仿真

图7

图8

图7,图8 均为二十四进制计数器仿真波形图。

CLK:时钟信号

RST:复位信号 低电平清零 En:置数端 低电平不让它继续计数

qb、qa:输出的四位二进制数,分别对于要输出数的十位个位

3.3 分频器模块仿真

因时钟脉冲(为256hz)通过分频器256分频后频率(为1hz),仿真波形显示前一小段,不能看出输出规律,所以做仿真是用3分频后的波形,真正在实验箱上验证是再改。

图9

CLK:输入分频前的时钟信号 RST:复位信号 低电平清零

Clkout:输出分频后的时钟信号

9

3.4 LED显示模块仿真

图10

Clk:时钟信号

s1,s2,s3,s4,s5,s6:输入的的四位二进制数 led:输出的七位二进制数,对应数码管脚的输出gfedcba wei:输出的三位而进制数(输出范围为000-101),控制led输出: 当wei=000时,led输出s1对应的十进制数的数码管脚gfedcba 当wei=001时,led输出s2对应的十进制数的数码管脚gfedcba 当wei=010时,led输出s3对应的十进制数的数码管脚gfedcba 当wei=011时,led输出s4对应的十进制数的数码管脚gfedcba 当wei=100时,led输出s5对应的十进制数的数码管脚gfedcba 当wei=101时,led输出s6对应的十进制数的数码管脚gfedcba

3.5 顶层仿真

因时钟脉冲(为256hz)通过分频器256分频后频率(为1hz),仿真波形显示前一小段,不能看出输出规律,所以做仿真是用3分频后的波形,真正在实验箱上验证是再改。

10

图11

CLK:时钟信号

RST:复位信号 低电平清零 En:置数端 低电平不让它继续计数

led:输出的七位二进制数,对应数码管脚的输出gfedcba wei:输出的三位而进制数(输出范围为000-101),控制led输出, 当wei=000时,led输出对于秒钟的个位 当wei=001时,led输出对于秒钟的十位 当wei=010时,led输出对于分钟的个位 当wei=011时,led输出对于分钟的十位 当wei=100时,led输出对于时钟的个位 当wei=101时,led输出对应时钟的十位

4 总结

VHDL硬件描述语言是我学过的较为复杂的一门语言,之前一直学习的是高级编程语言,如c++、c语言、VB等,这些语言都不愧于它们的高级一词,因为语言包装得很好,用起来确实简单易上手,而且里面的各种语法可以让我们轻松的解决各种难题(其中,最让我惊叹的便是递归语句的应用)。然而,上述的高级语言都只是在第二系统中起到作用,并不能直接对硬件进行操作,VHDL却是一种针对硬件的描述语言。

VHDL作为一种标准硬件描述语言,它除了含有许多具有硬件特征的语句外,其语言形式和描述风格与句法是十分类似于一般的计算机高级语言。但是由于其是针对硬件的描述语言,孤儿许多高级语法都不能使用,所以在学习的初始阶段,并不适应这种简朴而又复杂的语言,觉得它乱七八糟,看着语句毫无头绪。

然而,VHDL课有着与其他科目截然不同的地方,那就是它的互动性很强。在实验室我们还进行分组去完成项目,依然清晰记得那时候毫无头绪的痛苦,坚持不懈的劳累,以及最后收获成功时的喜悦。这些项目,不仅加深了我们对VHDL的理解和应用,同样的,我们的动手能力等社会技能也得到了锻炼。因为这些互动,我也渐渐喜欢上了VHDL语言的编程开发。

总的来说,VHDL这门课让我学到了只是,锻炼了技能,增强了信心,也充实了我的大学生活。

11

5 参考文献

[1] 《可编程器件EDA技术与实践》,李国洪、沈明山著,机械工业出版社 [2] 《EDA技术与数字系统设计》,尹常永著,西安电子科技大学出版社 [3] 《EDA工程实践技术》,付家才著,化学工业出版社

12

本文来源:https://www.bwwdw.com/article/lhgd.html

Top