当前位置:范文大全 > 调查报告 > 最新数字钟实验报告x:1302六位数字钟实验报告

最新数字钟实验报告x:1302六位数字钟实验报告

发布时间: 2021-10-31 12:02:56

'k'k'k'k

'k'k'k'k

'k'k'k'k

'k'k'k'k

EDA数字钟设计

项目名称: 适用年级: 所属课程: 姓名 : 学号 : 班级 : 指导老师:VHDL

项目名称: 适用年级: 所属课程: 姓名 : 学号 : 班级 : 指导老师:

2

《可编程数字系统》

***********

***********

***

《可编程数字系统》课程设计题目

、课程设计目的:熟悉EDA工具;掌握用 VHDL语言进行数字系统设计的基本方 法和流程。

、设计任务:任选以下两道题目中的一道,用 VHDL语言描述,用 Quartusll工具编

译和综合,仿真,并在实验板上实现,同时提交实验报告。

设计一数字钟,用数码管显示

基本功能要求:

(1) 可以分屏显示时、分、秒,可用数码管的小数点“ ?”代替时、分、秒的

分隔符“:”,分屏显示是指由于数码管只有 4个,不能同时显示时、分、

秒,但可以只显示时、分,或只显示分、秒,通过按键来切换这两种显示 方式。

(2) 可设置时钟的开始时间。设置时,相应的数码管要闪烁,指示当前设置的 位置(内容)。

(3) 具有闹铃功能,可以设定闹铃时间。闹铃时间到, LED闪烁进行指示

三、设计与实验报告要求

1、 项目必须在一周内独立完成,发现抄袭者,一律不及格;

2、 以上题目的要求为必须完成的基本功能,在此基本功能的基础上,鼓励学生 增加更多功能(可加分);

3、 提交的实验报告必须包含但不限于以下基本内容:设计原理、系统分析、程 序设计、仿真结果、实验结果(可附上实验板运行时的照片)、结论或分析

4、 验收方式:实物验收,需演示,并答辩。

5、 评分标准:以完成上述的基本功能为基准, 第一道题目的基准分为 75,第二 道题目的基准分为85分,根据完成设计的具体情况以及设计报告的质量, 综合得分上下浮动。

6、 实验套件要妥善使用和保管,如有损坏或丢失,按情节轻重处理。

一、 设计原理

EP2C5T144C有50MHZ勺时钟频率输出,通过分频计数器,接入数字钟。数 字钟由计数器、译码器、显示器等部分构成,数字钟的时、分、秒实际上就是由 一个24进制计数器(00-23),两个60进制计数器(00-59 )级联构成。显示模 块用200HZ的频率,显示效果很好。利用 Quartus II 9.0 软件编写VHDL语言,

编写六十进制、二十四进制;译码、显示部分用一个四进制,二 -四译码器,数

据选择器及七段译码器构成。最后生成相对应的模块连接成数字钟电路图。

数字钟的功能实际上是对秒信号计数。 EDA-V硬件开发系统可提供不同的时钟信号,分频

后可产生秒时钟。数字钟在结构上可分为两个部分: 计数器和显示器。计数器又可分为秒计

数器、分计数器和小时计数器;秒计数器和分计数器由两个六十进制构成, 小时计数器由二

十四进制计数器实现。

动态显示电路可用三态门构成的四选一数据选择器, 和一个四进制加一个二四译码器, 还有

一个七段译码器 7448组成。三态门在选择了一个数码管的同时,打开一个三态门,其他的 关闭。进而实现数据选择。如图 1所示的用三态门实现动态显示的框图。

标准参考时钟

4进制

一24译

?

计数器i

*

码器

在Quartusll软件中实现四个数码管的动态显示原理

二、程序设计

计数部分

VHDL语言设计的秒和分,带整点报时和分的设置

--Second1(秒计数6进制和10进制)

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_ un sig ned.all;

En tity sec ond1 is

Port( clks,clr:in std_logic;

Secs,Secg: out std_logic_vector(3 dow nto 0); cout1:out std_logic);

End sec on d1;

Architecture a of sec ond1 is

Begin

Process(clks,clr)

variable ss,sg: std_logic_vector(3 dow nto 0);

variable co: std_logic;

Begin

If clr='0' then ss:="0000"; sg:="0000";

Elsif clks'eve nt and clks='1' the n

if ss="0101" and sg="1001" then ss:="0000"; sg:="0000";co:='1';

elsif sg<"1001" then sg:=sg+1;co:='0';

elsif sg="1001" then sg:="0000";ss:=ss+1;co:='0';

end if;

end if;

cout1<=co;

Secs<=ss;

Secg<=sg;

end process;

End a;

--Min1 (分计数器 6进制和10进制alm实现整点报时)

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_ un sig ned.all;

En tity mi n1 is

Port(clkm,clr:in std_logic;

min s,mi ng:buffer std_logic_vector(3 dow nto 0);

enmin ,alarm: out std」o gic);

End;

Architecture a of mi n1 is

Begi n

Process(clkm,clr)

variable ms,mg :std_logic_vector(3 dow nto 0);

variable so,alm :std_logic;

Begin

If clr='0' then ms:="0000"; mg:="0000";

Elsif clkm'eve nt and clkm='1' the n

if ms="0101" and mg="1001" then ms:="0000";mg:="0000"; so :='1'; alm:='1';

elsif mg<"1001" then mg:=mg+1; so :='0';alm:='0';

elsif mg="1001" then mg:="0000";ms:=ms+1; so :='0';alm:='0';

end if;

end if;

alarm<=alm;

enmin<= so;

min s<=ms;

min g<=mg;

End process;

End a;

VHDL语言设计的二十四进制电路

--Hourl (时计数器 4进制与2进制)

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_ un sig ned.all;

En tity hour1 is

Port(clkh,clr:in std_logic;

hours,hourg:out std_logic_vector(3 dow nto 0));

End;

Architecture a of hour1 is

Begi n

Process(clkh,clr)

variable hs,hg :std_logic_vector(3 dow nto 0);

Begi n

If clr='0' the n hs:="0000"; hg:="0000";

Elsif clkh'event and clkh='1' then

if hs="0010"and hg="0011" then hs:="0000";hg:="0000";

elsif hg<"1001" then hg:=hg+1;

elsif hg="1001" then hg:="0000";hs:=hs+1; end if;

end if;

hours<=hs;

hourg<=hg;

End process;

End;

模块动态显示部分

(1)VHDL语言设计的四进制电路,模块

library ieee;

use ieee.std _lo gic_1164.all;

use ieee.std_logic_ un sig ned.all;

en tity time4_old is

port(

clk :in std_logic;

q :buffer std_logic_vector (1 dow nto 0)

);

end time4_old;

architecture xx of time4_old is

begin

process ( clk )

begin

if (clk'eve nt and clk = '1') the n

if q<"11" then

q<=q+1;

else

q<="00";

end if;

else

q<=q;

end if;

end process;

end xx;

(2) VHDL语言设计的2线-4线译码器

en tity case24 is

port(

sel: in bit_vector (1 dow nto 0);

y: out bit_vector (3 dow nto 0)

);

end case24;

architecture xx of case24 is

begin

process(sel)

begin

case sel is

when "00" =>y<="1110";

when "01" =>y<="1101";

when "10" =>y<="1011"; when others =>y<="0111";

end case;

end process;

end xx;

VHDL语言设计的数据选择器模块

en tity mux4v is

port(

a,b,c,d:i n bit_vector(3 dow nto 0); sel:i n bit_vector(1 dow nto 0); result:out bit_vector(3 dow nto 0) );

end mux4v;

architecture aa of mux4v is

begin

with sel select

result <= a whe n "11",

b whe n "10",

c whe n "01",

d whe n others;

end aa;

VHDL语言七段译码器设计模块

en tity m7448 is

port(

result:i n bit_vector (3 dow nto 0);

seg :out bit_vector(6 dow nto 0)

);

end m7448;

architecture xx of m7448 is

begin

process(result)

begin

case result is

whe n "0000"=>seg<="0000001";

when "0001"=>seg<="1001111";

when "0010"=>seg<="0010010";

when "0011"=>seg<="0000110";

when "0100"=>seg<="1001100";

when "0101"=>seg<="0100100";

when "0110"=>seg<="0100000";

when "0111"=>seg<="0001111";

whe n "1000"=>seg<="0000000";

when others=>seg<="0000100";

end case;

end process;

end xx;

6选4数据选择器和切换显示按键模块

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_ un sig ned.all;

en tity try_n ew_64 is

port(

secs,secg, mins,min g,hours,hourg:i n bit_vector(3 dow nto 0); key_sel:i n bit;

Ioc1,loc2,loc3,loc4:out bit_vector(3 dow nto 0)

);

end try_n ew_64;

Architecture a of try_n ew_64 is

sig nal key_sel_c on:i nteger range 0 to 1;

Begi n

key_sel_c on _proc:process(key_sel) begin

if key_sel'eve nt and key_sel='0' the n if key_sel_c on =1 the n

key_sel_c on<=0;

else

key_sel_c on<=key_sel_c on+1; end if;

end if;

end process;

Process(key_sel_c on)

Begin

case key_sel_c on is whe n 0=> loc1<=mins;

Ioc2<=ming;

Ioc3<=secs; loc4<=secg;

when 1=>

Ioc1<=hours;

Ioc2<=hourg;

loc3<=mins;

Ioc4<=ming;

end case;

end process;

end a;

因为板上资源有限,用 4个数码管显示时钟,下面是切换显示的程序

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_ un sig ned.all;

en tity try_n ew_64 is

port(

secs,secg, mins,min g,hours,hourg:i n bit_vector(3 dow nto 0); key_sel:i n bit;

Ioc1,loc2,loc3,loc4:out bit_vector(3 dow nto 0)

);

end try_n ew_64;

Architecture a of try_n ew_64 is

sig nal key_sel_c on:i nteger range 0 to 1;

Begi n

key_sel_c on _proc:process(key_sel) begin

if key_sel'eve nt and key_sel='0' the n if key_sel_c on =1 the n

key_sel_c on<=0;

else

key_sel_c on<=key_sel_c on+1; end if;

end if;

end process;

Process(key_sel_c on)

Begin

case key_sel_c on is whe n 0=> loc1<=mins;

Ioc2<=ming;

Ioc3<=secs; loc4<=secg;

when 1=>

Ioc1<=hours;

Ioc2<=hourg;

loc3<=mins;

Ioc4<=ming;

end case;

end process;

end a;

o

输出1011即可。

library ieee;

use ieee.std_logic_1164.all;

use ieee.std_logic_ un sig ned.all;

en tity givesig is

port(

sel: in bit_vector (1 dow nto 0); y: out bit

);

end givesig;

architecture xx of givesig is begin process(sel) begin if (sel="10") the n y<='0: else y<='1';

end if; end process;

end xx;

打包了时钟的程序如下

--Topclock (元件例化顶层文件)

Library ieee;

Use ieee.std_logic_1164.all;

Use ieee.std_logic_arith.all;

Use ieee.std_logic_ un sig ned.all;

En tity topclock is

Port(clk,clr,en,m1,h1:in std_logic;

alarm:out std_logic;

secs,secg ,mins,min g,hours,hourg:buffer std_logic_vector(3 dow nto 0));

End;

Architecture one of topclock is

Comp onent sec ond1

Port( clks,clr:in std_logic;

secs,secg: buffer std_logic_vector(3 dow nto 0); cout1: out std_logic);

End Comp onent;

Comp onent min1

Port(clkm,clr:in std_logic;

min s,mi ng:buffer std_logic_vector(3 dow nto 0); enmin ,alarm: out std」o gic);

End Comp onent;

Comp onent hour1

Port(clkh,clr:in std_logic;

hours,hourg:buffer std_logic_vector(3 dow nto 0));

End Comp onent;

Comp onent madapt

Port(e n,m1,clk,seci n:in std_logic;

min set:out std_logic);

End Comp onent;

Comp onent hadapt

Port(e n,h1,clk,mi nin:in std_logic;

hourset:out std_logic);

End Comp onent;

sig nal a,b,c,d: std_logic;

begin

u1:sec ond1 port map(clr=>clr,

secs=>secs,secg=>secg,clks=>clk, cout1=>a);

u2: min1 port map(clr=>clr,alarm=>alarm,

min s=>mi ns,mi ng=>mi ng,clkm=>b,e nmi n=>c);

u3:hour1 port map(clr=>clr, hours=>hours,hourg=>hourg,clkh=>d);

u4:madapt port map(e n=>en, m1=>m1,clk=>clk,seci n=>a, min set=>b); u5:hadapt port map(e n=>en, h1=>h1,clk=>clk, minin=>c,hourset=>d); en d;

数码管显示模块 只要把通常用的模块 0改1 1改0就可用了。如下 en tity m7448 is port(

result:i n bit_vector (3 dow nto 0);

seg :out bit_vector(6 dow nto 0) );

end m7448;

architecture xx of m7448 is

begin

process(result)

begin

case result is

whe n "0000"=>seg<="0000001";

when "0001"=>seg<="1001111"; when "0010"=>seg<="0010010";

when "0011"=>seg<="0000110";

when "0100"=>seg<="1001100";

when "0101"=>seg<="0100100";

when "0110"=>seg<="0100000";

when "0111"=>seg<="0001111";

whe n "1000"=>seg<="0000000";

when others=>seg<="0000100";

end case;

end process;

end xx;

4选1选择器

en tity mux4v is

port(

a,b,c,d:i n bit_vector(3 dow nto 0); sel:i n bit_vector(1 dow nto 0); result:out bit_vector(3 dow nto 0) );

end mux4v;

architecture aa of mux4v is

begin

with sel select

result <= a whe n "11",

b whe n "10",

c whe n "01", d whe n others;

end aa;

分频器由Quartus自己的 程序库提出

Ipm counterl j

up 訂口 Li「t看'

》cteckr :1-- - s ■ - - a -,.-

q[25..O]

ccut

:

:

7

r

l iru

=f:

T

位选模块CASE24

en tity case24 is

port(

sel: in bit_vector (1 dow nto 0); y: out bit_vector (3 dow nto 0) );

end case24;

architecture xx of case24 is begin

process(sel)

begin

case sel is

when "00" =>y<="1110";

when "01" =>y<="1101";

when "10" =>y<="1011"; when others =>y<="0111";

end case;

end process;

end xx;

上面就是我的完整程序。

三、仿真结果

VHDL语言设计的六十进制电路,模块及其波形

VHDL语言设计的二十四进制电路,模块及其波形

'k'k'k'k

'k'k'k'k

'k'k'k

'k'k'k

'k'k'k'k

'k'k'k'k

'k'k'k'k

'k'k'k'k

L

I1Z

clear

*

elk

S 92

田Q3

亡O

immrumnArLrLrLrLnrLrLrLrLrLrLrLrLn

0 X X 2 r u \ \ X 2 '£

四、总电路图

Em gmjiuwi

UC CC^"!!1

、_b !

qPB.fl

—1

*■!>]

I

■r~:■ ■*;: ?

CZD

.TF=^-1 J

—1 , >1-

丨》 , L’u r 、 ,i

Ipm mniarfl

2 n

l^rr

■■■■.- ?“

rrrip DTj

fc

*■

■ MJ ■- - .1 -,

sl-切 車叮M

rTdrap m &M"

iwip og

Sts.- m

rtffl!

rtffl!

五、运行情况

按键说明:

S6:切换显示

S3小时设置

S1分钟设置

S5清零按钮

S2屏蔽设置分、时设置(按住为屏蔽)

时分显示

分秒显示

Key72切换显示

显示效果良好,没有出现错误 六、结论分析

1时钟显示正常;

2设置时、分功能正常、

3清零键正常

因为时间和个人能力, 没能做出闪烁。用了失能和双频率赋值的方法做了 4个程序,都不能

正常使用,故放弃了闪烁。

闹钟程序虽然比较简单但是因为时间问题,也夭折了。

七、收获感想

八、参考资料

《VHDL使用教程》潘松王国栋编著

清华大学出版社《EDA技术与VHDL程序开发基础教程》

清华大学出版社

相关热词搜索: 实验报告 实验 报告 最新 最新数字钟实验报告x

版权所有:杨帆范文网 2010-2024 未经授权禁止复制或建立镜像[杨帆范文网]所有资源完全免费共享

Powered by 杨帆范文网 © All Rights Reserved.。鲁ICP备16030136号