数字逻辑课程设计--数字钟的设计(quartus ii)(内附源代码和实习报告以及6篇实习日志)

数字逻辑课程设计–数字钟的设计(quartus ii)

说明一下这是之前做的数字逻辑课程设计,代码的话我是测试过的应该没有bug,用到的软件是quartus ii。
在这里插入图片描述

一、数字钟设计实验报告

1.设计内容

(1) 正常计时:先设置当前时间,然后以秒(60)、分(60)、小时(24)计数,要求使用60进制计数器及24进制计数器,以BCD码形式输出小时、分、秒信号
(2)数码管实时显示计时的小时、分、秒。

2.系统总体设计

系统结构框图
在这里插入图片描述

给出结构框图(系统包含的各子模块及连接框图)
在这里插入图片描述

给出各子模块的信号名字及功能
时计数器 :Clk_to_hour: 驱动时计时器的时钟信号
Reset : 恢复原位
SCALE_SEL: 小时的高位显示,低位显示
DATOUT: 输出分针时器的秒钟信号
分计时器:clk_to_minute:驱动分计时器的时钟信号
reset:恢复原位
set_hour:使能输入
CO : 进位输出端
DATOUT :输出分针时器的秒钟信号
秒计时器: clk_to_second:驱动秒计时器的时钟信号
reset:恢复原位
set_min:使能输入
CO : 进位输出端
DATOUT :输出秒针时器的秒钟信号

3.计时器模块设计

1、计时器逻辑框图及输入输出描述(包括每个信号名字)

(1)小时—二十四进制的逻辑框图

Clk_to_hour: 驱动时计时器的时钟信号
Reset : 恢复原位
SCALE_SEL: 小时的高位显示,低位显示
DATOUT: 输出分针时器的秒钟信号
在这里插入图片描述
(2)分–六十进制的逻辑框图

clk_to_minute:驱动分计时器的时钟信号
reset:恢复原位
set_hour:使能输入
CO : 进位输出端
DATOUT :输出分针时器的秒钟信号
在这里插入图片描述
(3)秒—六十进制的逻辑框图

clk_to_second:驱动秒计时器的时钟信号
reset:恢复原位
set_min:使能输入
CO : 进位输出端
DATOUT :输出秒针时器的秒钟信号

在这里插入图片描述

2、子模块功能描述

功能的文字描述:功能的文字描述: 主要是对时,分,秒的计数以及对上一位的进位,例如秒计时器中当reset=0时,读取当前时间,reset=1且clk上升沿时,计数器加1。当秒为59秒,上升沿到来时59归零,datout=1。当count溢出则该位进行清零,并向前进一位。该模块主要是体现计数器计数的功能。

3、VHDL源代码
*-----------------------------------------------------
– 小时24进制或12进制的BCD计数模块
-----------------------------------------------------

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

ENTITY HOUR_BCD_COUNT IS
PORT(clk_to_hour, reset, SCALE_SEL : IN STD_LOGIC;
                            DATOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END HOUR_BCD_COUNT;

ARCHITECTURE BHV OF HOUR_BCD_COUNT IS
SIGNAL COUNT_SHI, COUNT_GE : STD_LOGIC_VECTOR(3 DOWNTO 0);
BEGIN 
	PROCESS(clk_to_hour, reset)  	BEGIN
		IF reset = '0'		THEN COUNT_SHI <= "0000"; COUNT_GE <= "0000"; -- 有复位信号,则清除计数。
		ELSIF clk_to_hour'EVENT AND clk_to_hour = '1'    THEN
		   IF SCALE_SEL = '1' THEN  -- 24进制
				IF COUNT_SHI = "0010" AND COUNT_GE = "0011"		THEN COUNT_SHI <= "0000"; COUNT_GE <= "0000";  -- 24进制溢出清零
				ELSIF COUNT_GE < "1001"		THEN COUNT_GE <= COUNT_GE + 1;
				ELSE COUNT_GE <= "0000"; COUNT_SHI <= COUNT_SHI + 1;
				END IF;
			ELSE  -- 12进制
			   IF COUNT_SHI = "0001" AND COUNT_GE = "0001"		THEN COUNT_SHI <= "0000"; COUNT_GE <= "0000";  -- 12进制溢出清零
		      ELSIF COUNT_GE < "1001"		THEN COUNT_GE <= COUNT_GE + 1;
				ELSE COUNT_GE <= "0000"; COUNT_SHI <= COUNT_SHI + 1;
				END IF;
			END IF;
		END IF;
	DATOUT <= COUNT_SHI & COUNT_GE;  -- 数据输出
	END PROCESS;
END BHV;

-----------------------------------------------------
– 分钟BCD60进制计数
----------------------------------------------------
-

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

ENTITY MINUTE_BCD_COUNT IS
PORT(clk_to_minute, reset, set_hour : IN STD_LOGIC;
                                 CO : OUT STD_LOGIC;
		                     DATOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END MINUTE_BCD_COUNT;

ARCHITECTURE BHV OF MINUTE_BCD_COUNT IS
SIGNAL COUNT_SHI, COUNT_GE : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL COUNT_EN : STD_LOGIC;
BEGIN 
   CO <=  set_hour OR COUNT_EN;
	PROCESS(clk_to_minute, set_hour, reset)  	BEGIN   
		IF reset = '0'		THEN COUNT_SHI <= "0000"; COUNT_GE <= "0000"; -- 有复位信号,则清除计数
		ELSIF clk_to_minute'EVENT AND clk_to_minute = '1'   THEN	 
			IF COUNT_SHI = "0101" AND COUNT_GE  = "1001"   THEN 
				COUNT_SHI <= "0000"; COUNT_GE <= "0000";  COUNT_EN <= '1';  -- 计数进位(信号量不是立即赋值,需等下一个时钟信号到来。)
			ELSIF COUNT_GE < "1001" 	THEN COUNT_GE <= COUNT_GE + 1; COUNT_EN <= '0'; 
			ELSE COUNT_GE <= "0000";  -- 计数溢出则清零,并产生进位
				IF COUNT_SHI < "1010" 	THEN COUNT_SHI <= COUNT_SHI + 1;  
				ELSE COUNT_SHI <= "0000";  
				END IF;
			END IF;
		END IF;
	END PROCESS;
	DATOUT <= COUNT_SHI & COUNT_GE;  -- 数据输出
END BHV;

-----------------------------------------------------
– 秒钟BCD60进制计数
-----------------------------------------------------

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

ENTITY SECOND_BCD_COUNT IS
PORT(clk_to_second, reset, set_min : IN STD_LOGIC;
                                CO : OUT STD_LOGIC;
		                    DATOUT : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));
END SECOND_BCD_COUNT;

ARCHITECTURE BHV OF SECOND_BCD_COUNT IS
SIGNAL COUNT_SHI, COUNT_GE : STD_LOGIC_VECTOR(3 DOWNTO 0);
SIGNAL COUNT_EN : STD_LOGIC;
BEGIN 
   CO <= set_min OR COUNT_EN;
	PROCESS(clk_to_second, reset, set_min)  	BEGIN
   IF reset = '0'		THEN COUNT_SHI <= "0000"; COUNT_GE <= "0000"; -- 有复位信号,则清除计数
	ELSIF clk_to_second'EVENT AND clk_to_second = '1'   THEN	 
		IF COUNT_SHI = "0101" AND COUNT_GE  = "1001"   THEN 
			COUNT_SHI <= "0000"; COUNT_GE <= "0000";  COUNT_EN <= '1';  -- 计数进位(信号量不是立即赋值,需等下一个时钟信号到来。)
		ELSIF COUNT_GE < "1001" 	THEN COUNT_GE <= COUNT_GE + 1;  COUNT_EN <= '0';
		ELSE COUNT_GE <= "0000";  
			IF COUNT_SHI < "1010" 	THEN COUNT_SHI <= COUNT_SHI + 1;  
			ELSE COUNT_SHI <= "0000";  
			END IF;
		END IF;
	END IF;
	DATOUT <= COUNT_SHI & COUNT_GE;  -- 数据输出
	END PROCESS;
END BHV;

(4)测试及分析
给出子模块仿真波形
在这里插入图片描述
图1 时仿真波形图
在这里插入图片描述
图2分仿真波形图
在这里插入图片描述
图3秒仿真波形图
波形图与理论结果一样,可以实现时的计数,且溢出的话归零并进位。
(5)子模块的元件图符

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

4.分频模块设计

(1)子模块逻辑框图及输入输出描述(包括每个信号名字)
在这里插入图片描述
(2)子模块功能描述
功能的文字描述:为了得到更低频率的时钟信号,设计一个分频器,两个输出,周期分别为1ms,1s。

(3)VHDL源代码

-----------------------------------------------------
– 分频模块
-----------------------------------------------------

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

ENTITY DEV IS
PORT(				  CLK_50MHz : IN STD_LOGIC;
	CLK_1Hz, CLK_5Hz, CLK_250Hz : OUT STD_LOGIC);
END;

ARCHITECTURE BHV OF DEV IS
SIGNAL Q1 : INTEGER RANGE 0 TO 49999999;
SIGNAL Q2 : INTEGER RANGE 0 TO 199999;
SIGNAL Q3 : INTEGER RANGE 0 TO 9999999;
BEGIN
	PROCESS(CLK_50MHz) BEGIN
		IF CLK_50MHz'EVENT AND CLK_50MHz = '1' THEN
		   -- 1Hz
			IF Q1 < 25000000		THEN CLK_1Hz <= '0'; Q1 <= Q1 + 1;
			ELSIF Q1 < 49999999		THEN CLK_1Hz <= '1'; Q1 <= Q1 + 1;
			ELSE Q1 <= 0;
			END IF;
			-- 250Hz
			IF Q2 < 100000		THEN CLK_250Hz <= '0'; Q2 <= Q2 + 1;
			ELSIF Q2 < 199999		THEN CLK_250Hz <= '1'; Q2 <= Q2 + 1; 
			ELSE Q2 <= 0;
			END IF;
			-- 5Hz
			IF Q3 < 5000000	THEN CLK_5Hz <= '0'; Q3 <= Q3 + 1;
			ELSIF Q3 < 9999999	THEN CLK_5Hz <= '1'; Q3 <= Q3 + 1; 
			ELSE Q3 <= 0;
			END IF;
		END IF;
	END PROCESS;
END;

(4)测试及分析
给出子模块仿真波形(可包含1张或多张仿真图,呈现电路完善的仿真结果,图下要有编号和图名)
在这里插入图片描述

5.显示模块设计

(1)显示模块框图及输入输出描述(包括每个信号名字)
SCAN_CLK : 扫描时钟输入 HOUR:时间数据的输入 MINUTE:时间数据的输入 SECOND:时间数据输入 SEL : 位选信号输出 SEG :段选信号输出

在这里插入图片描述
(2)控制模块功能描述

功能的文字描述: 七段显示译码器:bcd_led由数字钟的时分秒的十位个位一一对应,从而ledseg输出对应的每个bcd码的led显示。 时间连接符:输出值固定不变始终为“1110”从而经过七段显示译码器后显示“-”来连接时,分,秒。 BCD码七段译码器CC4511功能表如表所示。

在这里插入图片描述

(3)VHDL源代码

-----------------------------------------------------
– 显示模块
-----------------------------------------------------

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

ENTITY SELTIME IS
PORT(            SCAN_CLK : IN STD_LOGIC;  -- 扫描时钟输入 
     HOUR, MINUTE, SECOND : IN STD_LOGIC_VECTOR(7 DOWNTO 0);  -- 时间数据输入
                      SEL : OUT STD_LOGIC_VECTOR(5 DOWNTO 0);  -- 位选信号输出
                      SEG : OUT STD_LOGIC_VECTOR(7 DOWNTO 0));  -- 段选信号输出
END SELTIME;

ARCHITECTURE BHV OF SELTIME IS
SIGNAL SCAN_COUNT : STD_LOGIC_VECTOR(2 DOWNTO 0);  -- 扫描计数 
SIGNAL DAT : STD_LOGIC_VECTOR(3 DOWNTO 0);  
BEGIN 	
   -- 位选扫描进程 
	SCAN : PROCESS(SCAN_CLK) BEGIN
		IF SCAN_CLK'EVENT AND SCAN_CLK = '1'   THEN 
			IF(SCAN_COUNT > "101")	THEN SCAN_COUNT <= "000";
			ELSE SCAN_COUNT <= SCAN_COUNT + 1;
			END IF;
		END IF;
		CASE SCAN_COUNT IS
			WHEN "000" => DAT <= SECOND(3 DOWNTO 0);
			WHEN "001" => DAT <= SECOND(7 DOWNTO 4);
			WHEN "010" => DAT <= MINUTE(3 DOWNTO 0);
			WHEN "011" => DAT <= MINUTE(7 DOWNTO 4);
			WHEN "100" => DAT <= HOUR(3 DOWNTO 0);
			WHEN "101" => DAT <= HOUR(7 DOWNTO 4);
			WHEN  OTHERS => NULL;
		END CASE;
	END PROCESS SCAN;
	-- 译码显示进程 共数码管编码
	DECODE :	PROCESS(SCAN_COUNT) BEGIN
		CASE DAT IS
			WHEN "0000" => SEG<="11000000"; 
			WHEN "0001" => SEG<="11111001"; 
			WHEN "0010" => SEG<="10100100"; 
			WHEN "0011" => SEG<="10110000"; 
			WHEN "0100" => SEG<="10011001"; 
			WHEN "0101" => SEG<="10010010"; 
			WHEN "0110" => SEG<="10000010"; 
			WHEN "0111" => SEG<="11111000"; 
			WHEN "1000" => SEG<="10000000"; 
			WHEN "1001" => SEG<="10010000"; 
			WHEN OTHERS => SEG<="11111111"; 
		END CASE;
	END PROCESS DECODE; 
	-- 3-8译码
	SEL <=  "111110" WHEN SCAN_COUNT = "000" ELSE 
			  "111101" WHEN SCAN_COUNT = "001" ELSE 
			  "111011" WHEN SCAN_COUNT = "010" ELSE 
			  "110111" WHEN SCAN_COUNT = "011" ELSE 
			  "101111" WHEN SCAN_COUNT = "100" ELSE 
			  "011111" WHEN SCAN_COUNT = "101" ELSE 
			  "111111";
END BHV;

(4)测试及分析
给出子模块仿真波形(可包含1张或多张仿真图,呈现电路完善的仿真结果,图下要有编号和图名)
在这里插入图片描述

6.顶层模块连线设计

(1)顶层连线图
在这里插入图片描述
(2)测试及分析
给出仿真波形(可包含1张或多张仿真图,呈现电路完善的仿真结果,图下要有编号和图名)
在这里插入图片描述
**

7.总结。

**
我已经初步掌握了通过该语言编写程序的方法,如编写底层程序,编译,仿真,生成模块,顶层连接等。其中也出现了很多的问题,比如说代码编译时出现的多种错误,以及很多名称没有命名导致反复改代码,后来在仿真图也停留了很久,一直反正失败,原来选错了仿真图形式,选择了modelsim作为仿真工具,但是一开始并没有安装modelsim,后开及时改正,还是因为软件使用不够熟练,经常忘记某些步骤,甚至还发生过代码被覆盖的情况。但是在画连线图时,尽量想办法让连线图的线更加清晰易懂,不复杂。通过课程设计,我觉得自己独立思考的能力和模块化的思维有了提高,在给同学的改错和讲解过程中,我也了解了很多常见的错误以及解决方法,积累了知识和经验。

三、实习日志

2020年6月23日
我选择的是数字钟的设计,要求内容主要是1)正常计时:先设置当前时间,然后以秒(60)、分(60)、小时(24)计数,要求使用60进制计数器及24进制计数器,以BCD码形式输出小时、分、秒信号2)数码管实时显示计时的小时、分、秒。主要利用VHDL语言在quartus2平台上设计一个24进制和12进制可以相互转换的电子数字钟,另外还具有设置时间功能。总的程序由几个各具不同功能的单元模块程序拼接而成,其中包括分频模块、时分秒计数和设置程序模块、比较器程序模块、译码显示程序模块。并且使用QUARTUS 2软件进行电路波形仿真。数字钟的设计模块包括:分频器、“时、分、秒”计数器、闪烁电路、整点报时和译码显示电路。每一个功能模块作为一个实体单独进行设计,最后再用VHDL的例化语句将各个模块进行整合。分频模块:提供1hz的时钟信号与100hz的测试时钟信号。可通过实验板上的k2键来调节。2、时间控制模块:控制设置时间和计时的使能信号。3、闹钟控制模块:控制设置闹钟和计时的使能信号。4、计时与设置时间模块和设置闹钟模块:通过时间控制模块和闹钟控制模块传来的使能信号来转换计时、设置时间和设置闹钟。可以通过Key0键设置时间,Key1键设置闹钟。Key3键选择需要设置的位数,Key4键来调整时间。5、时间和闹钟显示选择以及闹钟模块:接收计时与设置时间模块和设置闹钟模块传来的数据选择时间或者闹钟传至显示模块。并且可以根据sw2键来改变传至显示模块的是12进制和24进制。6、显示模块:将从时间和闹钟显示选择模块传来的数据显示在数码管上。并且可以在设置时间和设置闹钟时闪烁显示。

2020年6月25日
首先设计第一个子模块,是对时分秒计算的设计,小时则使用24进制或12进制,而分和秒则使用60进制。主要先写的小时的vhdl的代码,24进制数字钟是一种用数字电路技术实现时计时的装置,与机械式时钟相比具有更高的准确性和直观性。此次设计与制作24进制电子数字钟时计数、译码、显示电路需要了解组合逻辑电路和时序逻辑电路;了解集成电路的引脚安排;了 解各种时计数、译码芯片的逻辑功能及使用方法;了解数字钟的原理。本次设计是基于24进制电子数字钟的原理,实现具有24进制清零功能的电子钟,它主要由脉冲、二-五-十进制加法器74LS90、译码器74LS48、共阴极LED数码管等四个模块构成。脉冲利用555设计一个多谐振荡器。各功能模块multisim软件中描述出,然后将其打包成可调用的元件,再利用原理图输入法将各模块按功能连接起来就得到顶层文件的原理图。这时,再进行时序仿真、引脚锁定和嵌入逻辑分析仪之后,就编译下载至硬件中,选择正确的模式和各种设置后即可实现这次设计所要求的功能。通过这次对计数器的设计制作,让我了解了电路设计的基本步骤,也让我了解了关于计数器的原理与设计理念,要设计一个电路先进行软件模拟仿真再进行实际的电路制作。从而也就此编写了分和秒饿vhdl代码,借鉴网上以及所学完成了第一个子模块的设计,测试后发现出现未定义的错误指令,可能是没有做顶端代码的原因,以及未把file的文件置于顶端,都已改正并且完成。从中也更加熟练的使用quartus2来编写代码,从中受益很多。

2020年6月27日
设计第二个子模块是分频模块,对时分秒的进行分频。字钟主要分为数码显示器、60进制和24进制计数器、秒脉冲产生电路、校时和报时这几个部分。数字钟要完成显示需要6个数码管,八段的数码管需要译码器械才能显示,然后要实现时、分、秒的计时需要60进制计数器和24进制计数器,在仿真软件中发生信号可以用函数发生器仿真,频率可以随意调整。60进制可由10进制和6进制的计数器串联而成,24进制可 由4进制和2进制的计数器
申联而成。计数部分再将输出信号迭给译码器和BCD数码管构成的显示电路,
即可进行时间的输出。频率振荡器可以由晶体振荡器分频来提供,也可以由555定时来产生脉冲并分频为1HZ。但定位于测试时的简便,和检查时的方便特把555定时器的频率调为1013HZ。在实际仿真时,直接用555时基电路产生1HZ时钟脉冲供计数电路使用。分频器的功能主要有两个:–是产生标准秒脉冲信号;二是提供功能扩展电路所需要的信号,如仿电台报时用的1KHz的高音频信号和500KHz的低音频信号等。因此,可以选用3片我们较熟悉的中规模集成电路计数器74160可以完成上述功能。分频器的设计电路中的作用之一是将1KHZ的矩形波信号分频,产生1HZ的秒脉冲信号。作用二则是提供校时电路所需信号在该模块中,3块74160N芯片接成十进制计数器,1KHZ 的信号输入每经过一-级, 输出信号的频率为原来的1/10,这样,经过三级分频后得到1HZ的脉冲信号。
2020年6月29日
今天做的是显示控制模块, 显示控制模块主要作用是在7段数码管上正确的显示0-9的数字。sel三位选择线和3-8译码器相连。秒的个位计数从0-9,即十进制计数。当秒的个位计数到9后,准备向秒的十位进位。秒的十位计数从0-5,即六进制计数。当秒的十位计数到5后,准备向分的个位进
位。分钟的个位计数从0-9,即十进制计数。当分钟的个位计数到9后,准备向分钟的十位进位。分钟的十位计数从0-5,即六进制计数。当分钟的十位数到5后,准备向小时的个位进位。该数字钟采用LCD显示,显示时分秒;数字钟的时钟信号可采用硬件定时和软件定时;能够对时分秒的值进行设置。实现闹钟功能,能够设定闹钟时间,并在闹钟时间到时鸣响蜂鸣器,按下相应按
键后闹铃停止。在此次设计过程中虽然遇到了一些问题,但经过一-次又一 -次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了我的知识面较窄和经验不足的问题。在这次的课程设计过程中,我懂得了很多,课程设计不光是让我们去“设计”,更重要的是培养我们的能力!通过本次课程设计使我对电子时钟又有了进一步的了解,增加了对所学知识的应用。我们在做设计的过
程中不断发现错误,不断改正,不断领悟,不断获取。这次课程设计终于顺利完成了,在设计中遇到了很多问题,通过各种通道,终于迎刃而解。令我明白在今后社会的发展和学.习实践过程中,不能遇到问题就退缩,要学会发现问题所在,然后进行解决,只有这样,才能成功的做成想做的事。在这为期两周的实践课当中,不仅培养了独立思考、动手操作的能力,在各种其它能力上也都有了提高。更重要的是,我们领会了很多自主学习的方法。

2020年7月1日
最后设计顶端模块并且连接之前的模块。用顶层设计采用原理图输入设计、底层设计采用VHDL设计的原理图与VHDL混合设计方法设计带整点报时功能的数字钟,所以此设计可分为顶层与底层设计,共分为六个模块,即时模块、分模块、秒模块、动态扫描控制模块、段码译码模块和整点报时模块。
秒模块主体为60进制的计数器,daout 为向动态扫描控制模块提供秒的个位和十位数据的信号。reset为秒清零,ermin 为分钟进位,每60秒产生一个 高电平的信号,作为分模块的时钟输入; c1k 为秒模块的时钟输入,接1Hz脉冲信号; min_ set为分钟设置,低电平是不影响秒模块工作,当它为高电平时,enmin信号会随之产生一个和c1k频率相同的信号,达到调整分钟的目的。分模块主体为60进制的计数器,daout 为向动态扫描控制模块提供分的个位和十位数据的信号。Enhour为分钟进位,每60分产生一个高电平的信号 ,作为时模块的时钟输入;秒计数到60时的进位输出信号enhour1 和分钟调整输入信号mi nset,经或关系后接分的脉冲输入端clk; c1k1 为时调整脉冲,接1Hz脉冲,hour. set 为时钟设置,低电平是不影响分模块工作,当它为高电平时,enmin 信号会随之产生一个和c1k频率相同的信号,达到调整时的目的。时模块为一个24进制的计数器,daout 为向动态扫描控制模块提供秒的个位和十位数据的信号。分计数到60.时的进位输出信号enhour1和时调整输入信号hourset,经或关系后接时脉冲输入端c1k。da out为向动态扫描控制模块提供时的个位和十位数据的信号。动态扫描模块中smclk为动态扫描控制模块的脉冲输入,由外部脉冲发生电路提供,频率约为1kHz; se10、se11、se12接外部3- 8译码器74LS138的输入端A、B、C; sec[6…0]、 min[6…0]、hour [5…0]分别为秒模块、分模块、时模块计数段码输出控制信号。该模块实现时间的动态扫描显示控制。
整点报时模块用于产生整点时的LED发光二极管彩灯和报时输出。整点声音报时输出信号speak接蜂鸣器输入,信号1amp[2. .0]控制整点时产生60秒的LED发光二极管彩灯闪烁报时输出信号。

2020年7月2日
经过两周的实验的学习,使我受益匪浅。这不仅增强了我对数字钟设计的兴趣,更掌握了基本的电路设计流程、方法以及技巧。具备了这些基本知识,为今后的自主学习奠定了良好的基础。同时通过本次课程设计,巩固了我们以前学过的专业知识, 通过这次的程序设计,使我们对数字系统结构也有了更进一步的了解与认识,同时对eda技术, vhdl语言等系列知识都有了一定的了解与认识。使用eda技术开发页面的能力也有了提高,也使我们把理论与实践从正真意义上结合了起来,考验 了我们的动手能力,查阅 相关资料的能力,还有组织材料的能力。通过此次实践,我们从中可以找出自己知识的不足与欠缺,以便我们在日.后的学习中得以改进与提高。经过本次设计使我们对大学四年期间所学习到的知识得以进一步实践,这将对我们走出校园走向社会走向工作岗位奠定坚实的基础。遇到的问题和改进此次设计不足之处是不能在12进制的状态下设置时间,只能切换回24进制显示才能设置时间,这是有待改进的地方。遇到的问题是模块的屏蔽问题:如在设置时间的时候计数器停止,保持原来的数字解决方法是增加一个控制信号。
只靠种实际能力的培养单靠课堂教学是远远不够的,必须从课堂走向实践。这也是一次预演和准备毕业设计工作。通过课程设计,让我们找出自身状况与实际需要的差距,并在以后的学习期间及时补充相关知识,为求职与正式工作做好充分的知识、能力准备,从而缩短从校园走向社会的心理转型期。课程设计达到了专业学习的预期目的。在两个星期的课程设计之后,我们普遍感到不仅实际动手能力有所提高,更重要的是通过对电路板制作流程的了解,进一步激发了我们对专业知识的兴趣,并能够结合实际存在的问题在专业领域内进行更深入的学习。

总结

感谢大家的阅读,点个赞再走吧。我本来想上传文件或者压缩包的,没找到上传的入口,有知道的小宝贝们能@我一下吗。。码字太累了,好想上传文件。和上一篇博客时隔两年了哈哈,不要太想我,因为我真的太懒了。
在这里插入图片描述

  • 143
    点赞
  • 665
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 26
    评论
基于FPGA设计的万年历数字时钟课程设计Quartus工程源码+设计报告文档资料,可以做为你的学习设计参考。 系统总体设计 2.1.1 系统功能介绍 本次万年历实现的功能有: (1)年月日、时分秒的走时、设置及其显示。 (2)闹钟功能、闹钟设置及其闹钟设置显示。 2.1.2 系统硬件介绍 本次万年历设计使用的硬件资源有:6个数码管、三个微动开关、两个拨码开关和两个LED灯。 其中,6个数码管选择显示年月日、时分秒及其闹钟设置的时分秒。三个按键分别为翻页按键(选择数码管显示内容)、选择按键(选择需调整的内容)、加一按键(调整的内容加一),用于翻页和时间及其闹钟的设置。两个拨码开关分别为闹钟使能开关和复位开关,用于闹钟的打开及其关闭和将整个系统复位。两个LED灯分别为闹钟开关状态和闹钟标志(代替蜂鸣器)。 2.1.3 系统总体框图介绍 整个系统采用自顶向下的设计方法,从系统的总体功能出发,将整个系统划分为多个模块,然后再将各个模块划分为多个功能部分,编程完成后将各个部分联系起来组成整个系统。 module calendar(system_clk,reset,key_turn,key_switch,key_add,switch_alarm,led,beep,hex0,hex1,hex2,hex3,hex4,hex5); input system_clk,reset,key_turn,key_switch,key_add,switch_alarm;//系统时钟、复位、三个按键和一个拨码开关 output led,beep; //LED灯和蜂鸣器 output [6:0] hex0; //输出:数码管0 output [6:0] hex1; //输出:数码管1 output [6:0] hex2; //输出:数码管2 output [6:0] hex3; //输出:数码管3 output [6:0] hex4; //输出:数码管4 output [6:0] hex5; //输出:数码管5 wire second_add,minute_add,hour_add,day_add,month_add,year_add,alarm_second_add,alarm_minute_add,alarm_hour_add; //专属增一信号 wire [1:0] flag_turn; //翻页状态信号 wire [1:0] flag_switch; //闪烁数码管选择信号 wire select_sign; //选择状态 wire [5:0] second; //秒 wire [5:0] minute; //分 wire [4:0] hour; //小时 wire [4:0] day; //日 wire [3:0] month; //月 wire [6:0] year; //年 wire [5:0] alarm_second; //闹钟秒 wire [5:0] alarm_minute; //闹钟分 wire [4:0] alarm_hour; //闹钟小时 //例化按键模块 key_drive_module use_key_drive_module( .system_clk (system_clk), .reset (reset), .key_turn (key_turn), .key_switch (key_switch), .key_add (key_add), .flag_switch (flag_switch), .flag_turn (flag_turn), .second_add (second_add), .minute_add (minute_add), .hour_add (hour_add), .day_add (day_add), .month_add (month_add), .year_add (year_add), .alarm_second_add (alarm_second_add), .alarm_minute_add (alarm_minute_add), .alarm_hour_add (alarm_hour_add), .select_sign (select_sign) ); //例化时钟模块 clock

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 26
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

王多鱼变成鱼

谢谢宝贝们支持

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值