一、设计目的
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 译码驱动 0 译码驱动2 译码驱动9 译码驱动5 译码驱动2 译码驱动 时十位计数 时个位计数 分十位计数 分个位计数 秒十位计数 秒个位计数 校时控制电 路 校分控制电 路 晶体振荡器 电 路 分 频 器 电 路 分 频 器 电 路
四、底层模块设计 1、时基产生电路
由晶振产生的频率非常稳定的脉冲,经整形、分频电路后,产生一个频率为1Hz的、非常稳定的计数时钟脉冲。(电子线路部分,不用VHDL语言描述。)
2、校时电路(二选一数据选择器) LIBRARY ieee;
USE ieee.std_logic_11.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_11.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_11.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。 五、顶层电路设计
VCCdisclkINPUTVCCPIN_79count60displayclkdspSEL[2..0]led7s[6..0]OUTPUTOUTPUTSEL[2..0]LED7S[6..0]CLRPIN_7ENPIN_8CLKPIN_78INPUTVCCINPUTVCCINPUTVCCCLRENCLKinst1QL[3..0]QH[3..0]COD0[3..0]D1[3..0]D2[3..0]D3[3..0]D4[3..0]D5[3..0]D6[3..0]D7[3..0]inst5PIN_46PIN_45PIN_97PIN_44PIN_96PIN_95PIN_94PIN_93PIN_92PIN_90count60MUX2_1CLKSET_MINPUTVCCCLRENYCLKinst2QL[3..0]QH[3..0]COKCIinst3PIN_24COUNT24MUX2_1CLKSET_HINPUTVCCCLRENYCLKinstQL[3..0]QH[3..0]COKCIinst4PIN_25 六、设计处理
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实验开发系统进行硬件测试。经测试实验结果完全正确。
因篇幅问题不能全部显示,请点此查看更多更全内容
Copyright © 2019- huatuo8.com 版权所有 湘ICP备2023022238号-1
违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市万商天勤律师事务所王兴未律师提供法律服务