EDA技术数字时钟实验报告.docx
《EDA技术数字时钟实验报告.docx》由会员分享,可在线阅读,更多相关《EDA技术数字时钟实验报告.docx(12页珍藏版)》请在冰豆网上搜索。
EDA技术数字时钟实验报告
JIUJIANGUNIVERSITY
EDA技术实验报告
实验名称:
数字时钟
院(系):
电子工程学院
班级:
B1111
学号:
52号
实验室:
实验楼307
专业:
电子信息工程技术
姓名:
高芬
日期:
2012年12月15日
实验目的
设计一个可以计时的数字时钟,其显示时间范围是00:
00:
00~23:
59:
59,且该时钟具有暂停计时、清零等功能。
实验器材
1、SOPC实验箱
2、计算机(装有QuartusII7.0软件)
实验预习
1、了解时钟设计原理和各主要模块的设计方法。
2、提前预习,编写好主模块的VHDL程序。
实验原理
一个完整的时钟应由4部分组成:
秒脉冲发生电路、计数部分、译码显示部分(和时钟调整部分)。
1、秒脉冲发生:
可以设计分频电路对系统时钟50MHz进行50000000分频从而得到稳定的1Hz基准信号。
2、计数部分:
应设计1个60进制秒计数器、1个60进制分计数器、1个24进制时计数器用于计时。
秒计数器应定义clk(时钟输入)、rst(复位)两个输入引脚,Q3~Q0(秒位)、Q7~Q4(十秒位)、Co(进位位)9个输出引脚。
分、时计数器类似。
3、译码显示部分:
在时钟信号的控制下轮流选择对十时、时、十分、分、十秒、秒输入信号进行译码输出至XQ7~XQ0,并通过DIG0~DIG5输出相应的选通信号选择数码管。
每位显示时间控制在1ms左右。
时钟信号可由分频电路引出。
源程序如下所示:
1.顶层文件(count_time.vhd)程序及波形图:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYcount_timeIS
PORT(clk,rst:
INSTD_LOGIC;
co:
OUTSTD_LOGIC;
dig1:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
seg1:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDcount_time;
ARCHITECTUREoneOFcount_timeIS
COMPONENTfenpinIS
PORT(clk11,clk12,rst11,rst12:
INSTD_LOGIC;
cok1,cok2:
OUTSTD_LOGIC);
ENDCOMPONENT;
COMPONENTscan_ledIS
PORT(clk2:
INSTD_LOGIC;
doe:
INSTD_LOGIC_VECTOR(23DOWNTO0);
dig2:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
seg2:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDCOMPONENT;
COMPONENTcountIS
PORT(clk3,rst2:
INSTD_LOGIC;
cox:
OUTSTD_LOGIC;
m:
OUTSTD_LOGIC_VECTOR(23DOWNTO0));
ENDCOMPONENT;
SIGNALa:
STD_LOGIC_VECTOR(23DOWNTO0);
SIGNALb:
STD_LOGIC;
SIGNALc:
STD_LOGIC;
BEGIN
u1:
fenpin
PORTMAP(clk11=>clk,clk12=>clk,rst11=>rst,rst12=>rst,cok1=>b,cok2=>c);
u2:
scan_led
PORTMAP(clk2=>c,doe=>a,dig2=>dig1,seg2=>seg1);
u3:
countPORTMAP(clk3=>b,rst2=>rst,cox=>co,m=>a);
ENDARCHITECTUREone;
2.分频部分(fenpin.vhd)程序及波形图:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_Unsigned.ALL;
ENTITYfenpinIS
PORT(clk11,clk12,rst11,rst12:
INSTD_LOGIC;
cok1,cok2:
OUTSTD_LOGIC);
END;
ARCHITECTUREoneOFfenpinIS
signalq1:
INTEGERRANGE49999999DOWNTO0;
signalq2:
INTEGERRANGE99999DOWNTO0;
signalc1,c2:
STD_LOGIC;
BEGIN
PROCESS(clk11,rst11,q1,c1)
BEGIN
IFrst11='1'THENq1<=0;
ELSIFclk11'EVENTANDclk11='1'THEN
IFq1<49999999THENq1<=q1+1;c1<='0';
ELSEq1<=0;c1<=NOTc1;
ENDIF;
ENDIF;
ENDPROCESS;
cok1<=c1;
PROCESS(clk12,rst12,q2,c2)
BEGIN
IFrst12='1'THENq2<=0;
ELSIFclk12'EVENTANDclk12='1'THEN
IFq2<99999THENq2<=q2+1;c2<='0';
ELSEq2<=0;c2<=notc2;
ENDIF;
ENDIF;
ENDPROCESS;
cok2<=c2;
END;
3.计数部分(count.vhd)程序及波形图:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYcountIS
PORT(clk3,rst2:
INSTD_LOGIC;
cox:
OUTSTD_LOGIC;
m:
OUTSTD_LOGIC_VECTOR(23DOWNTO0));
ENDcount;
ARCHITECTUREoneOFcountIS
SIGNALq1,q2,q3,q4,q5,q6:
STD_LOGIC_VECTOR(3DOWNTO0):
="0000";
SIGNALcq1,co1,cq2,co2,cq3,co3:
STD_LOGIC;
BEGIN
PROCESS(clk3,rst2)
BEGIN
IFrst2='1'THENq1<="0000";cq1<='0';
ELSIFclk3'EVENTANDclk3='1'THEN
IFq1<9THENq1<=q1+1;cq1<='0';
ELSEq1<="0000";cq1<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(cq1,rst2)
begin
IFrst2='1'THENq2<="0000";co1<='0';
ELSIFcq1'EVENTANDcq1='1'THEN
IFq2<5THENq2<=q2+1;co1<='0';
ELSEq2<="0000";co1<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(co1,rst2)
BEGIN
IFrst2='1'THENq3<="0000";cq2<='0';
ELSIFco1'EVENTANDco1='1'THEN
IFq3<9THENq3<=q3+1;cq2<='0';
ELSEq3<="0000";cq2<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(cq2,rst2)
begin
IFrst2='1'THENq4<="0000";co2<='0';
ELSIFcq2'EVENTANDcq2='1'THEN
IFq4<5THENq4<=q4+1;co2<='0';
ELSEq4<="0000";co2<='1';
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(co2,rst2)
BEGIN
IFrst2='1'THENq5<="0000";cq3<='0';
ELSIFco2'EVENTANDco2='1'THEN
IFq6=2THEN
IFq5<3THENq5<=q5+1;cq3<='0';
ELSEq5<="0000";cq3<='1';
ENDIF;
ELSE
IFq5<9THENq5<=q5+1;cq3<='0';
ELSEq5<="0000";cq3<='1';
ENDIF;
ENDIF;
ENDIF;
endprocess;
PROCESS(cq3,rst2)
BEGIN
IFrst2='1'THENq6<="0000";co3<='0';
ELSIFcq3'eventandcq3='1'THEN
IFq6<2THENq6<=q6+1;co3<='0';
ELSEq6<="0000";co3<='1';
ENDIF;
ENDIF;
ENDPROCESS;
m<=q6&q5&q4&q3&q2&q1;
cox<=NOT(cq1XORco1XORcq2XORco2XORcq3XORco3);
ENDARCHITECTURE;
4.显示部分(scan_led.vhd)程序及波形图:
LIBRARYIEEE;
USEIEEE.STD_LOGIC_1164.ALL;
USEIEEE.STD_LOGIC_UNSIGNED.ALL;
USEIEEE.STD_LOGIC_ARITH.ALL;
ENTITYscan_ledIS
PORT(clk2:
INSTD_LOGIC;
doe:
INSTD_LOGIC_VECTOR(23DOWNTO0);
dig2:
OUTSTD_LOGIC_VECTOR(5DOWNTO0);
seg2:
OUTSTD_LOGIC_VECTOR(7DOWNTO0));
ENDscan_led;
ARCHITECTUREexampleOFscan_ledIS
SIGNALa:
STD_LOGIC_VECTOR(2DOWNTO0):
="000";
SIGNALb:
STD_LOGIC_VECTOR(3DOWNTO0);
BEGIN
PROCESS(clk2)
BEGIN
IFclk2'eventandclk2='1'THEN
IFa="101"THENa<="000";ELSEa<=a+1;
ENDIF;
ENDIF;
ENDPROCESS;
PROCESS(a)
BEGIN
CASEaIS
WHEN"101"=>b<=doe(3DOWNTO0);dig2<="111110";
WHEN"100"=>b<=doe(7DOWNTO4);dig2<="111101";
WHEN"011"=>b<=doe(11DOWNTO8);dig2<="111011";
WHEN"010"=>b<=doe(15DOWNTO12);dig2<="110111";
WHEN"001"=>b<=doe(19DOWNTO16);dig2<="101111";
WHEN"000"=>b<=doe(23DOWNTO20);dig2<="011111";
WHENOTHERS=>NULL;
ENDCASE;
ENDPROCESS;
PROCESS(b)
BEGIN
CASEbIS
WHEN"0000"=>seg2<="11000000";
WHEN"0001"=>seg2<="11111001";
WHEN"0010"=>seg2<="10100100";
WHEN"0011"=>seg2<="10110000";
WHEN"0100"=>seg2<="10011001";
WHEN"0101"=>seg2<="10010010";
WHEN"0110"=>seg2<="10000010";
WHEN"0111"=>seg2<="11111000";
WHEN"1000"=>seg2<="10000000";
WHEN"1001"=>seg2<="10010000";
WHENOTHERS=>seg2<="11111111";
ENDCASE;
ENDPROCESS;
ENDexample:
顶层文件如图所示: