24进制计数器设计VHDL语言

合集下载

二十四进制计数器设计

二十四进制计数器设计

目录摘要 (1)1. 设计任务 (2)1.1 设计目的 (2)1.2 设计指标 (2)1.3 设计要求 (2)2.设计思路与总体框图 (3)3.系统硬件电路的设计 (3)3.1 555多谐荡电路 (3)3.2 计数器电路 (5)3.3 译码和显示电路 (6)4.系统设计仿真 (6)4.1各功能元件的选用与分析 (6)一.74LS48译码器 (6)二. 74LS08芯片 (7)三. 计数及译码显示 (8)四. 共阴极七段数码管显示器 (10)五.电阻 (11)六.电容 (15)4.2仿真原理总设计图 (17)5. 系统硬件焊接与调试 (18)5.1焊接步骤 (18)5.2元件清单 (18)5. 3实物图 (19)5.2硬件电路测试 (20)总结 (21)致谢 (22)参考文献 (23)二十四进制计数器设计摘要:24进制数字钟是一种用数字电路技术实现时计时的装置,与机械式时钟相比具有更高的准确性和直观性。

此次设计与制作24进制电子数字钟时计数、译码、显示电路需要了解组合逻辑电路和时序逻辑电路;了解集成电路的引脚安排;了解各种时计数、译码芯片的逻辑功能及使用方法;了解数字钟的原理。

本次设计是基于24进制电子数字钟的原理,实现具有24进制清零功能的电子钟,它主要由脉冲、二-五-十进制加法器74LS90、译码器74LS48、共阴极LED数码管等四个模块构成。

脉冲利用555设计一个多谐振荡器。

各功能模块multisim 软件中描述出,然后将其打包成可调用的元件,再利用原理图输入法将各模块按功能连接起来就得到顶层文件的原理图。

这时,再进行时序仿真、引脚锁定和嵌入逻辑分析仪之后,就编译下载至硬件中,选择正确的模式和各种设置后即可实现这次设计所要求的功能。

关键词:加法器;译码器;显示数码管1. 设计任务1.1 设计目的1. 了解计数器的组成及工作原理。

2. 进一步掌握计数器的设计方法和计数器相互级联的方法。

3. 进一步掌握各芯片的逻辑功能及使用方法。

计数计时器的VHDL设计.ppt

计数计时器的VHDL设计.ppt

PROCESS(clk, bcd1wr) BEGIN IF(bcd1wr='1') THEN bcd1n<=datain; ELSIF(clk'EVENT AND clk='1') THEN IF(cin='1') THEN IF(bcd1n=“1001”) THEN bcd1n<="0000"; ELSE bcd1n<=bcd1n+1; END IF; END IF; END IF; END PROCESS;

加上异步复位和置位的十进制计时器
LIBRARY IEEE; RST为复位端,EN为 USE IEEE.STD_LOGIC_1164.ALL; 使能端; USE IEEE.STD_LOGIC_UNSIGNED.ALL; ENTITY CNT10 IS PORT (CLK,RST,EN : IN STD_LOGIC; CQ : OUT STD_LOGIC_VECTOR(3 DOWNTO 0); COUT : OUT STD_LOGIC ); COUT为进位输出端; END CNT10;

二、计数器的设计(P63-67)
简单计时器的设计; 六十进制计数器和计时器的设计; 二十四进制计时器的设计; 数字钟的设计。


最简单的计时器
【例3-19】
ENTITY CNT4 IS PORT ( CLK : IN BIT ; Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ; END ; BUFFER模式 ARCHITECTURE bhv OF CNT4 IS 才可以读取 BEGIN PROCESS (CLK) BEGIN 在时钟CLK信号的 IF CLK'EVENT AND CLK = '1' THEN 驱动下 Q <= Q + 1 ; Q对时钟信号CLK进行计 END IF; 数;由于Q为BUFFER模 END PROCESS ; 式,所以可以读取Q的值 END bhv; 表式Q <= Q + 1的右项与左项并非处于相同的时刻内,对于时序电 路,除了传输延时外,前者的结果出现于当前时钟周期;后者,即 左项要获得当前的Q + 1,需等待下一个时钟周期。

24进制计数器

24进制计数器

沈阳工业大学实验报告(适用计算机程序设计类)实验名称:24进制加法计数器1.实验目的:(1)学习掌握VHDL语言程序编写的方法,并利用其解决实际问题。

(2)学习掌握QuartusII应用软件,练习使用原理图输入设计方法,并正确使用软件仿真解决实际问题。

(3)学习掌握EDA实验系统的应用,学会利用其解决实际的问题。

2.实验内容:(1)学习掌握利用QuartusII应用软件进行工作库文件的创建、VHDL语言的编写、工程创建、时序仿真及引脚设置和下载等操作。

(2)学习掌握EDA实验系统模式的选择及引脚的查询等使用操作。

(3)利用VHDL硬件描述语言及原理图输入设计方法,设计一个24进制加法计数器,并利用QuartusII进行功能仿真,并通过EDA实验系统验证其功能的正确性。

3.实验方案(程序设计说明)(1)明确所要设计的电子线路所要实现的功能和要求,并设计方案。

(2)根据自己的设计方案,设计一个十进制的VHDL硬件描述语言。

(3)利用QuartusII将十进制的VHDL硬件描述语言转化为原理图。

(4)利用QuartusII软件创建工程,并进行时序仿真,观察波形图。

(5)把设计的VHDL硬件语言进行引脚设置,下载到EDA实验系统。

4. 实验步骤或程序(经调试后正确的源程序)附件A 沈阳工业大学实验报告(适用计算机程序设计类)1、建立10进制计数器工作库文件夹、并编辑设计VHDL 文件2、创建10进制加法计数器的工程见附件A5.程序运行结果绘制的仿真波形图能够正确的反映出所设计电子线路的功能,下载到EDA 实验系统的文件,能够通过EDA 实验系统正确的实现其功能。

6.出现的问题及解决方法问题:在利用原理图创建24进制计数器工程时,把10进制计数器原理图的工程替换了解决方法:重新创建10进制计数器工程,并构建24进制计数器。

3、利用原理图输入设计法设计24进制加法计数器4、创建24进制加法计数器的工程5、24进制加法计数器时序仿真6、引脚设置(模式5)选择模式5的数码管1和数码管2Q0[0] 引脚:PIO16-13 Q0[1] 引脚:PIO17-14 Q0[2] 引脚:PIO18-15 Q0[3] 引脚:PIO19-16 Q1[0] 引脚:PIO20-17 Q1[1] 引脚:PIO21-18 Q1[2] 引脚:PIO22-19 Q1[3] 引脚:PIO23-20 CLOCK: 选择clock2-1537、配置文件下载。

基于VHDL控制的24点智力游戏机

基于VHDL控制的24点智力游戏机

• 27•本文基于VHDL语言,利用Quartus II设计了一款24点智力游戏机。

内部包含“信号随机生成”,“四则运算”,“二进制—BCD 码转换”,“数码管显示”等模块。

游戏体验良好,可极大的娱乐人们的日常闲暇时光,丰富人们的生活。

“24点”游戏是人们日常生活中非常常见的一种游戏,传统的24点游戏以扑克牌为载体,出题者随机发出四张扑克牌,玩家要运用这扑克牌上的四个数进行加减乘除运算,若运算结果为24,则玩家赢得胜利。

本文的24点智力游戏器基于VHDL语言,不需要手动发牌,使游戏过程更加简单,方便。

1 系统设计1.1 系统设计方案本产品主要由四个模块组成,其中包括随机数生成模块,数据1.2 硬件设计随机数生成模块:图3 随机数生成模块随机数生成模块的功能是随机生成四个0~9的整数,其中clk 输入50MHz的脉冲信号,en处于高电平时,模块开始工作,当rand 按下时会产生上升沿信号,此时会生成四个整数,并由r1,r2,r3,r4端口输出其对应的四位二进制码。

数据选择分配模块:图4 数据选择分配模块a[3..0],b[3..0],c[3..0],d[3..0]端输入随机生成模块产生的4个随机数,c1[3..0]段是由玩家给出输入信号来选择其中的两个数给到set模块的a[3..0],b[3..0]端,set的c[7..0]端口用于输入上一步运算的结果值,(当c[7..0]的值为空时,q1[7..0],q2[7..0]输出玩家选择的两个数,否则q1[7..0],q2[7..0]将输出c[7..0]与玩家在做大于两次运算时选择的一个数)最后会以八位二进制的形式将相应的q1[7..0],q2[7..0]两个数输出。

运算模块:图5 运算模块a[7..0],b[7..0]为所要运算的值,只有当s1,s2,s3或s4给高电基于VHDL控制的24点智力游戏机大连理工大学城市学院 严飞杰 杜建硕 付明雨 于海霞图1 21点智力游戏器的系统框图选择分配模块,四则运算模块(加减乘除),BCD转码与数码管显示模块。

VHDL语言实现24制数字电子钟的设计程序

VHDL语言实现24制数字电子钟的设计程序

VHDL 语言实现24制数字电子钟的设计原理框图:系统构成图:各模块程序:秒计数Second 模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity second isport(clk: in std_logic;reset: in std_logic;setmin: in std_logic;enmin: out std_logic;daout: out integer range 0 to 59);end entity second;architecture art of second issignal count:integer range 0 to 59;signal enmin_1,enmin_2:std_logic;begindaout<=count;enmin_2<=(setmin and clk);enmin<=(enmin_1 or enmin_2);process(clk,reset,setmin)beginif(reset='0')thencount<=0;enmin_1<='0';elsif(clk'event and clk='1')thenif(count<59) thencount<=count+1; enmin_1<='0';elsecount<=0;enmin_1<='1';end if;end if;end process;end art;分计数minute模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity minute isport(clk: in std_logic;clks: in std_logic;reset: in std_logic;sethour:in std_logic;enhour: out std_logic;daout: out integer range 0 to 59);end entity minute;architecture art of minute issignal count:integer range 0 to 59;signal enhour_1,enhour_2:std_logic;begindaout<=count;enhour_2<=(sethour and clks);enhour<=(enhour_1 or enhour_2);process(clk,reset,sethour)beginif(reset='0')thencount<=0;enhour_1<='0';elsif(clk'event and clk='1')thenif(count<59) thencount<=count+1; enhour_1<='0';elsecount<=0;enhour_1<='1';end if;end if;end process;end art;时计数hour模块:LIBRARY IEEE;USE IEEE.std_logic_1164.all;USE IEEE.std_logic_unsigned.all;entity hour isport ( clk : in std_logic;reset: in std_logic;daout: out integer range 0 to 11);end entity hour;architecture zrt of hour issignal count:integer range 0 to 11;begindaout<=count;process(clk,reset)beginif(reset='0') thencount<=0;elsif (clk'event and clk='1') thenif(count<11) thencount<=count+1;elsecount<=0;end if;end if;end process;end zrt;时间调整及多路选择settime模块;library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;use ieee.std_logic_arith.all;entity settime isport(clk1: in std_logic;reset: in std_logic;sec,min:in integer range 0 to 59;hour: in integer range 0 to 11;daout: out integer range 0 to 9;dp: out std_logic;sel: out std_logic_vector(5 downto 0)); end settime;architecture art of settime issignal count:std_logic_vector(2 downto 0); beginprocess(clk1,reset)beginif(reset='0')thencount<="000";elsif(clk1'event and clk1='1')thenif(count>="101")thencount<="000";elsecount<=count+1;end if;end if;end process;process(clk1,reset)variable a ,b:integer range 0 to 9;beginif(reset='0')thendaout<=0;dp<='0';sel<="111111";elsif(clk1'event and clk1='1')thencase count iswhen"000"=>a:=sec rem 10;daout<=a;dp<='0';sel<="000001";when"001"=>b:=sec /10;daout<=b;dp<='0';sel<="000010";when"010"=>a:=min rem 10;daout<=a;dp<='1';sel<="000100";when"011"=>b:=min / 10;daout<=b;dp<='0';sel<="001000";when"100"=>a:=hour rem 10;daout<=a;dp<='1';sel<="010000";when"101"=>b:=hour / 10;daout<=b;dp<='0';sel<="100000";when others=>null;end case;end if;end process;end art;报时alert模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity alert isport ( clk,clk1,reset,stop:in std_logic;dainm:in integer range 0 to 59;dains:in integer range 0 to 59;speak:out std_logic);end alert;architecture art of alert issignal s_speak,enspeak:std_logic;beginspeak<=enspeak and s_speak;process(clk1,reset)beginif(reset='0')thens_speak<='0';elsif(clk1'event and clk1='1')thenif(dainm=0)thenif(dains>10)thens_speak<='0';elses_speak<=clk;end if;elses_speak<='0';end if;end if;end process;process(stop,reset,dains)beginif(reset='0' or dains>10)thenenspeak<='1';elsif(stop'event and stop='1')thenenspeak<='0';end if;end process;end art;译码deled模块:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity deled isport(num: in integer range 0 to 9;led: out std_logic_vector(6 downto 0)); end entity deled;architecture art of deled isbeginled<="1111110"when num=0 else"0110000"when num=1 else"1101101"when num=2 else"1111001"when num=3 else"0110011"when num=4 else"1011011"when num=5 else"1011111"when num=6 else"1110000"when num=7 else"1111111"when num=8 else"1111011"when num=9 else"0000000";end art;顶层文件clock:library ieee;use ieee.std_logic_1164.all;use ieee.std_logic_unsigned.all;entity clock isport (clk1,stop,clk,reset,setmin,sethour:in std_logic;dp,speak:out std_logic;led:out std_logic_vector(6 downto 0);sel:out std_logic_vector(5 downto 0));end entity clock;architecture one of clock iscomponent second isport(clk: in std_logic;reset: in std_logic;setmin: in std_logic;enmin: out std_logic;daout: out integer range 0 to 59);end component second;component minute isport(clk: in std_logic;clks: in std_logic;reset: in std_logic;sethour:in std_logic;enhour: out std_logic;daout: out integer range 0 to 59);end component minute;component hour isport ( clk : in std_logic;reset: in std_logic;daout: out integer range 0 to 11);end component hour;component alert isport ( clk,clk1,reset,stop:in std_logic;dainm:in integer range 0 to 59;dains:in integer range 0 to 59;speak:out std_logic);end component alert;component settime isport(clk1: in std_logic;reset: in std_logic;sec,min:in integer range 0 to 59;hour: in integer range 0 to 11;daout: out integer range 0 to 9;dp: out std_logic;sel: out std_logic_vector(5 downto 0));end component settime;component deled isport(num: in integer range 0 to 9;led: out std_logic_vector(6 downto 0));end component deled;signal min:std_logic;signal secondout:integer range 0 to 59;signal hour1:std_logic;signal minuteout:integer range 0 to 59;signal hourout:integer range 0 to 11;signal settimeout:integer range 0 to 9;beginu1:second port map(clk=>clk,reset=>reset,setmin=>setmin,enmin=>min,daout=>secondout);u2:minute port map(clk=>min,clks=>clk,reset=>reset,sethour=>sethour,enhour=>hour1,daout=>minuteout);u3:hour port map(clk=>hour1,reset=>reset,daout=>hourout);u4:alert port map(clk=>clk,clk1=>clk1,reset=>reset,stop=>stop,dainm=>minuteout,dains=>secondout,speak=> speak);u5:settime port map(clk1=>clk1,reset=>reset,sec=>secondout,min=>minuteout,hour=>hourout,daout=>settimeou t,dp=>dp,sel=>sel);u6:deled port map(num=>settimeout,led=>led);end architecture one;。

vhdl实验报告--数字钟

vhdl实验报告--数字钟

VHDL实验报告一、实验目的1、设计一个24小时制数字钟,要求能显示时,分,秒,并且可以手动调整时和分。

2、通过复杂实验,进一步加深对VHDL语言的掌握程度。

二、实验原理数字钟的主体是计数器,它记录并显示接收到的秒脉冲个数,其中秒和分为模60计数器,小时是模24计数器,分别产生3位BCD码。

BCD码经译码,驱动后接数码管显示电路。

秒模60计数器的进位作为分模60计数器的时钟,分模60计数器的进位作为模24计数器的时钟。

为了实现手动调整时间,在外部增加了setm(调整分),seth(调整时)按键,当这两个按键为低电平时,电路正常计时,当为高电平时,分别调整分,时。

同时在外部还增加了一个清零按键clr.和消抖动电路。

三、实验步骤1、单元模块设计部分1)消抖动电路关键部分signal key_in1,key_in2:std_logic:='0';beginprocess(clk,key_in)beginif clk'event and clk='1' thenkey_in1<=key_in;key_in2<=key_in1;if key_in='1' and key_in1='1' and key_in2='1' then key_out<='1';else key_out<='0';end if;2) 模60计数器程序关键部分:signal md_temp,mg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr)beginif clr='1' thenmd_temp<="0000"; mg_temp<="0000";elsif set='1' thenmd_temp<=setl; mg_temp<=seth;elsif clk'event and clk='1' thenif md_temp="1001" thenmd_temp<="0000";mg_temp<=mg_temp+'1';else md_temp<=md_temp+'1';if md_temp="1001" and mg_temp="0101" thenmd_temp<="0000";mg_temp<="0000";2、模24计数器程序关键部分signal hd_temp,hg_temp:std_logic_vector(3 downto 0);beginprocess(clk,clr,set,setl,seth)isbeginif set='1' then hd_temp<=setl; hg_temp<=seth;elsif clr='1' then hd_temp<="0000"; hg_temp<="0000";elsif clk'event and clk='1' thenif hg_temp="0010" and hd_temp="0011" thenhd_temp<="0000"; hg_temp<="0000";elsif hd_temp="1001" thenhg_temp<=hg_temp+'1' hd_temp<="0000";else hd_temp<=hd_temp+'1';end if;end if;end process ;3、清零和调时部分显示部分关键程序process (sd,sg,md,mg,hd,hg)begincase sd iswhen "0000" =>sl<="1111110";when "0001" =>sl<="0110000";when "0010" =>sl<="1101101";when "0011" =>sl<="1111001";when "0100" =>sl<="0110011";when "0101" =>sl<="1011011";when "0110" =>sl<="1011111";when "0111" =>sl<="1110000";when "1000" =>sl<="1111111";when "1001" =>sl<="1111011";when others =>sl<="0000000";end case;if clk_g'event and clk_g='1' thenif sel="101" thensel<="000";else sel<=sel+'1';end if;end if;process(sel,sd,sl,sg,sh,md,ml,mg,mh,hd,hl,hg,hh)begincase sel iswhen"000"=>led<=sl;led_which<=sd;when"001"=>led<=sh;led_which<=sg;when"010"=>led<=ml;led_which<=md;when"011"=>led<=mh;led_which<=mg;when"100"=>led<=hl;led_which<=hd;when"101"=>led<=hh;led_which<=hg;when others=>led<="0000000";led_which<="0000";end case;4、顶层文件关键程序port(clk,clk_g:in std_logic;-----clk_g是用在数码管显示里面的信号clr: in std_logic;------clr=1时清零setm,seth:in std_logic;---------setm为1时调分,seth为1时调时setd,setg:in std_logic_vector(3 downto 0);----调整时间的时候,setd调整的是低位setg 调整高位led:out std_logic_vector(6 downto 0);sel_out: out std_logic_vector(2 downto 0);led_which: out std_logic_vector(3 downto 0));---输出的是秒分时的哪一个beginu1:de_shake port map (clk=>clk,key_in=>clr,key_out=>clro);u2:de_shake port map (clk=>clk,key_in=>setm,key_out=>setmo);u3:de_shake port map (clk=>clk,key_in=>seth,key_out=>setho);u4:s60 port map (clk=>clk,clr=>clro,sd=>sdl,sg=>sgh,fenmaichong=>fenmaichong o);u5:m60 port map (clk=>fenmaichongo,clr=>clro,md=>mdl,mg=>mgh,xiaoshimaichong=> xiaoshimaichongo,setl=>setd,seth=>setg,set=>setmo);u6:h24 port map (clk=>xiaoshimaichongo,clr=>clro,hd=>hdl,hg=>hgh,set=>setho,se tl=>setd,seth=>setg);u7:led_xs port map (clk_g=>clk_g,sd=>sdl,sg=>sgh,md=>mdl,mg=>mgh,hd=>hdl, hg=>hgh,led=>led,sel_out=>sel_out,led_which=>led_which);四、实验结果及分析本设计,满足了本次试验设计的任务要求,能显示时分秒,并且可以手动调节分和时。

24小时计时器设计

24小时计时器设计

24小时计时器设计摘要:使用硬件描述语言VHDL进行编程,设计六十进制和二十四进制计数器,利用原理图输入设计方法,使用两片六十进制计数器和一片二十四进制计数器,设计出了一个24小时计时器系统。

使用QuartusII软件进行编译,时序仿真,来验证该系统的正确性。

整个系统设计简单,使用方便,具有24小时计时显示功能,可以分别对时,分,秒进行校正。

关键词:VHDL 计数器24小时计时器目录1.设计背景 (1)2.设计方案 (1)2.1.六十进制计数器设计 (2)2.2.二十四进制计数器设计 (3)3.方案实施 (5)4.仿真结果 (6)5.参考文献 (7)1.设计背景随着EDA技术的发展和应用领域的扩大,EDA技术在电子信息、通信、自动控制及计算机应用等领域的重要性日益突出。

基于EDA技术的数字系统设计,一般可以再单片PLD实现,具有功能强、功耗低,体积小、可靠性高等特点,成为当今数字系统设计的主流。

此次EDA课程大作业,我的设计课题是24小时计时器系统设计,根据要求使用平时所学VHDL语言进行编程和原理图输入设计方法来完成。

报告书主要包括设计背景、设计方案、方案实施、仿真波形。

设计方案主要介绍了我对于设计课题的大致设计思路,之后各个部分将会详细介绍设计组成及程序。

2.设计方案24小时计时器的原理图如图2.1所示。

它由两片六十进制计时器和一片二十四进制计数器构成,输入CLK为1Hz的时钟,经过60分频后产生1分钟时钟信号,再经过60分频后,产生1小时的时钟信号,最后进行24分频,得到1天的脉冲送COUT输出。

将两个60分频和一个24分频的输出送7段数码管,得到24小时的计时显示结果。

图2.1 24小时计时器的原理图图2.1中的CLK是1Hz时钟输入端;RST是复位输入端,高电平有效;JM、JF和JS分别是校秒、校分和校时的输入端,下将沿有效;QM[7..0]、QF[7..0]和QS[7..0]分别是秒、分、时的计时输出端;COUT是“天”脉冲输出端。

计数计时器的VHDL设计

计数计时器的VHDL设计
ELSE co<='0';
END IF; END IF; END PROCESS;
END behav;
二十四进制计数器的设计
二十四进制计数器
ENTITY clk_h IS PORT(clk: IN BIT;
q1: BUFFER INTEGER RANGE 0 TO 9; qt: BUFFER INTEGER RANGE 0 TO 2; co: OUT BIT); END clk_h;
bcd1n, bcd10n: 计数值的个
DOWNTO 0);
位输出和十位输出;
bcd1n: BUFFER STD_LOGIC_VECTOR(3 DOWNTO 0));
co: 计数值进位输出。
END bcd60count;
结构体
ARCHITECTURE behave OF bcd60count IS BEGIN
二、计数器的设计(P63-67)
简单计时器的设计; 六十进制计数器和计时器的设计; 二十四进制计时器的设计; 数字钟的设计。
最简单的计时器
【例3-19】
ENTITY CNT4 IS
PORT ( CLK : IN BIT ;
Q : BUFFER INTEGER RANGE 15 DOWNTO 0 ) ;
IF EN = '1' THEN IF CQI < 9 THEN CQI := CQI + 1;
CQI := (OTHERS =>‘0’) 为 省略赋值方式,对CQI清零
检测是否允许计数
ELSE CQI := (OTHERS =>'0');
END IF; END IF;
允许计数, 检测是否小于9
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
相关文档
最新文档