基于VHDL的数字钟的设计
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于VHDL的数字钟的设计
一、设计目的
1、掌握计数器,分频器的工作原理和设计方法;
2、掌握数码管的动态扫描译码显示的工作原理和设计方法;
3、掌握数字钟的设计方法;
4、掌握在EDA开发软件QuartusII环境下基于FPGA/CPLD的数字系统设计方法,掌握该环境下系统的
功能仿真、时序仿真、管脚锁定和芯片下载的方法。
二、设计要求
1、基本要求
(1)设计一个24小时制的数字钟;
(2)利用板上数码管显示时、分、秒,要求显示格式为:小时—分钟—秒;
(3)利用板上的按键作时钟调整,调整要求为:按下时调整键,“时”迅速增加,并按24小时制(0~~23)规律循环;按下分调整键,“分”迅速增加,并按60分钟制(0~59)规律循环;
(4)数字钟可清零、可保持。
2、提高要求
(1)能利用EDA系统上的蜂鸣器作整点报时。
从59分55秒时开始报时,每隔一秒报时一次;00分00秒时,进行整点报时。
整点报时声的频率应与其他的报时声频率有明显区别;
(2)具有按12小时模式显示与24小时模式显示切换的功能;
(3)具有闹钟功能。
三、系统框图
四、底层模块设计
1、时基产生电路
由晶振产生的频率非常稳定的脉冲,经整形、分频电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。
(电子线路部分,不用VHDL语言描述。
)
2、校时电路(二选一数据选择器)
LIBRARY ieee;
USE ieee.std_logic_1164.all;
ENTITY MUX2_1 IS
PORT
(
K,CLK,CI : IN STD_LOGIC;
Y : OUT STD_LOGIC
);
END MUX2_1;
ARCHITECTURE b OF MUX2_1 IS
BEGIN
Y<=CLK WHEN K='0' ELSE CI;
END b;
3、计数器
(1)24进制计数器
1)24进制的VHDL语言程序
LIBRARY ieee;
USE ieee.std_logic_1164.all;
USE ieee.std_logic_unsigned.all;
ENTITY COUNT24 IS
PORT
(
CLR : IN STD_LOGIC;
EN : IN STD_LOGIC;
CLK : IN STD_LOGIC;
QL : BUFFER STD_LOGIC_VECTOR(3 downto 0);
QH : BUFFER STD_LOGIC_VECTOR(3 downto 0);
CO : OUT STD_LOGIC
);
END COUNT24;
ARCHITECTURE a OF COUNT24 IS
BEGIN
PROCESS(CLR,EN,CLK)
BEGIN
IF CLR='0' THEN
QH<="0000";
QL<="0000";
ELSIF CLK'EVENT AND CLK='1' THEN
IF(EN='1')THEN
IF QH=2 AND QL=3 THEN
QL<="0000";
QH<="0000";
ELSE
IF QL=9 THEN
QL<="0000";
QH<=QH+1;
ELSE
QL<=QL+1;
END IF;
END IF;
END IF;
END IF;
END PROCESS;
CO<='0'WHEN QH=2 AND QL=3 ELSE'1';
END a;
2)仿真波形
图1、count24的时序仿真波形
3)从设计文件创建模块,默任模块的名称为count24。
(2)60进制计数器
1)进制的Verilog HDL File语言程序
module count60(CLR,EN,CLK,QL,QH,CO);
input CLR,EN,CLK;
output [3:0] QL,QH;
output CO;
reg [3:0] QL,QH;
always@(posedge CLK or negedge CLR)
begin
if(!CLR) QL=4'b0000;
else if(EN)
if(QL==4'b1001) QL=4'b0000;
else QL=QL+1;
end
always@(posedge CLK or negedge CLR)
begin
if(!CLR) QH=4'b0000;
else if(EN&&QL==4'b1001)
if(QH==4'b0101) QH=4'b0000;
else QH=QH+1;
end
assign CO=!(QH[2]&&!QH[1]&&QH[0]&&QL[3]&&!QL[2]&&!QL[1]&&QL[0]);
endmodule
2)仿真波形
图2、count60的时序仿真波形
3)从设计文件创建模块,默任模块的名称为count60。
4、译码显示电路
(1)8位数码管动态扫描译码显示接口程序
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity display is
port(clkdsp:in std_logic;
D0,D1,D2,D3,D4,D5,D6,D7:in std_logic_vector(3 downto 0);
SEL:out std_logic_vector(2 downto 0);
led7s:out std_logic_vector(6 downto 0));
end display;
architecture behav of display is
signal s:std_logic_vector(2 downto 0);
signal num:std_logic_vector(3 downto 0);
begin
process(clkdsp)
begin
if(clkdsp'event and clkdsp ='1')then
if(S="111")then
S<="000";
else
S<=S+'1';
end if;
end if;
end process;
process(D0,D1,D2,D3,D4,D5,D6,D7,clkdsp) begin
if(clkdsp'event and clkdsp ='1')then
if s="000" then
num<=D0;
sel<="000";
elsif s="001" then
num<=D1;
sel<="001";
elsif s="010" then
num<=D2;
sel<="010";
elsif s="011" then
num<=D3;
sel<="011";
elsif s="100" then
num<=D4;
sel<="100";
elsif s="101" then
num<=D5;
sel<="101";
elsif s="110" then
num<=D6;
sel<="110";
else
num<=D7;
sel<="111";
end if;
end if;
end process;
led7s<="0111111" when num=0 else
"0000110" when num=1 else
"1011011" when num=2 else
"1001111" when num=3 else
"1100110" when num=4 else
"1101101" when num=5 else
"1111101" when num=6 else
"0000111" when num=7 else
"1111111" when num=8 else
"1101111" when num=9 else
"1110111" when num=10 else
"1111100" when num=11 else
"0111001" when num=12 else
"1011110" when num=13 else
"1111001" when num=14 else
"0000000" when num=15 else
"1000000";
end behav;
(2)从设计文件创建模块,默任模块的名称为display。
五、顶层电路设计
六、设计处理
1、输入底层设计文件和顶层电路图
2、编译
3、仿真
4、选择器件、管脚锁定及重新编译
七、芯片引脚说明
芯片系列:ACEX1K
芯片型号:EP1K100QC208-3
引脚锁定:
输入:
CLK----78,秒脉冲,接CLK5
DISCLK---79,扫描时钟,接CLK1
RESET---7,复位,接d0;
EN---8,使能,接d1
SET_M---24,分校时,接K1;
SET_H---25。
,时校时,接K2
输出:
SEL[2..0]---44~46,位选信号输出,接SEL2,SEL1,SEL0
LED[6..0]---90,92~97,7段译码输出,接a~g 90-a 91-b 92-c 95- d 96-e 97-f 98-g
八、预设计的源程序及电路图
1、底层电路VHDL程序
2、顶层电路连线图
九、系统的下载与测试
一个设计全部完成后,要在MAX+plusII开发系统中选择Programmer,即可打开编程器窗口,在该窗口下将器件编译生成的编程文件编程到选定的器件中去,这通常称为下载(Down Load)。
下载完成后,原来无特定功能的PLD器件便成为了具有某个确定功能的芯片,然后要对该芯片进行测试。
测试的所得的结果与实验设计要求完全符合,说明设计的程序与原理图完全正确,实验成功。
十、实验过程中出现的问题及解决办法
由于Verilog HDL File语言的用法与VHDL语言的用法不一样,在Verilog HDL File文本输入框中用与VHDL语言的一样,致使在Verilog HDL File编译时发生语法错误。
认识到错误后改正,并再编译出现正确结论。
在EDA实验开发系统进行硬件测试。
经测试实验结果完全正确。