您好,欢迎来到爱玩科技网。
搜索
您的当前位置:首页vhdl语言数字钟带译码器的数码管显示

vhdl语言数字钟带译码器的数码管显示

来源:爱玩科技网


library ieee;

use ieee.std_logic_11.all;

use ieee.std_logic_unsigned.all;

entity shzizhong is

port(

clk,stop,reset,tiaoshi,tiaofen:in std_logic;--停止,复位,调时,调分 功能

miaoling,miaoge,miaoshi:out std_logic_vector(3 downto 0);--对应各自数码管译码器的四 fenge,fenshi,shige,shishi:out std_logic_vector(3 downto 0)); --位二进制输出

end shzizhong;

architecture dong of shzizhong is

signal fen1,fen2,miao1,miao2,shi1,shi2:integer range 0 to 9;

signal miao0_clk,fen1_clk,shi1_clk,miao1_clk:std_logic;

signal jiaoshi_clk,fen_clk,shi_clk:std_logic;

begin

process(CLK,stop) --50M分频为10hz

variable n1:integer range 0 to 2499999;

begin

if rising_edge(Clk) then

if n1<2499999 then n1:=n1+1;

else n1:=0; miao0_clk<=not miao0_clk;

end if;

end if;

end process;

process(miao0_clk)--产生校时信号

variable cq0:std_logic_vector(2 downto 0);

begin

if rising_edge(miao0_Clk) then

if cq0<2 then cq0:=cq0+1;jiaoshi_clk<='0';

else cq0:= (others =>'0');jiaoshi_clk<='1';

end if;

end if;

end process;

process(miao0_clk,reset,stop) --0.1s 10进制计数器

variable cq1:std_logic_vector(3 downto 0);

begin

if stop='0' then

if reset='1' then cq1:= (others =>'0');

elsif rising_edge(miao0_Clk) then

if cq1<9 then cq1:=cq1+1;miao1_clk<='0';

else cq1:= (others =>'0');miao1_clk<='1';

end if;

end if;

end if;

miaoling<=cq1;

end process;

process(miao1_clk,reset,tiaofen,fen1_clk,jiaoshi_clk)-- 秒,variable cq4:integer range 0 to 59;

begin

if reset='1' then cq4:=0;

elsif rising_edge(miao1_Clk) then

if cq4<59 then cq4:=cq4+1;fen1_clk<='0';

else cq4:=0;fen1_clk<='1';

60进制计数器

end if;

end if;

miao2<=cq4 / 10; --对10取整,即调取 十位上的数

miao1 <=cq4 rem 10;-- 对10取余,即调取 个位上的数

fen_clk<= (tiaofen and jiaoshi_clk) or ((not tiaofen) and fen1_clk);--调分的语句

case miao2 is

when 0 => miaoshi<=\"0000\";

when 1 => miaoshi<=\"0001\";

when 2 => miaoshi<=\"0010\";

when 3 => miaoshi<=\"0011\";

when 4 => miaoshi<=\"0100\";

when 5 => miaoshi<=\"0101\";

when others => null;

end case;

case miao1 is

when 0 => miaoge<=\"0000\";

when 1 => miaoge<=\"0001\";

when 2 => miaoge<=\"0010\";

when 3 => miaoge<=\"0011\";

when 4 => miaoge<=\"0100\";

when 5 => miaoge<=\"0101\";

when 6 => miaoge<=\"0110\";

when 7 => miaoge<=\"0111\";

when 8 => miaoge<=\"1000\";

when 9 => miaoge<=\"1001\";

when others => null;

end case;

end process;

process(fen_clk,reset,tiaoshi,jiaoshi_clk,shi1_clk)--分钟,60进制计数器

variable cq5:integer range 0 to 59;

begin

if reset='1' then cq5:=0;

elsif rising_edge(fen_Clk) then

if cq5<59 then cq5:=cq5+1;shi1_clk<='0';

else cq5:=0;shi1_clk<='1';

end if;

end if;

fen2<= cq5 / 10;--对10取整,即调取 十位上的数

fen1 <= cq5 rem 10; --对10取余,即调取 个位上的数

shi_clk<= (tiaoshi and jiaoshi_clk) or ((not tiaoshi) and shi1_clk); --调时的语句

case fen2 is

when 0 => fenshi<=\"0000\";

when 1 => fenshi<=\"0001\";

when 2 => fenshi<=\"0010\";

when 3 => fenshi<=\"0011\";

when 4 => fenshi<=\"0100\";

when 5 => fenshi<=\"0101\";

when others => null;

end case;

case fen1 is

when 0 => fenge<=\"0000\";

when 1 => fenge<=\"0001\";

when 2 => fenge<=\"0010\";

when 3 => fenge<=\"0011\";

when 4 => fenge<=\"0100\";

when 5 => fenge<=\"0101\";

when 6 => fenge<=\"0110\";

when 7 => fenge<=\"0111\";

when 8 => fenge<=\"1000\";

when 9 => fenge<=\"1001\";

when others => null;

end case;

end process;

process(shi_clk,reset)--小时,十二进制计数器

variable cq6:integer range 0 to 11;

begin

if reset='1' then cq6:=0;

elsif rising_edge(shi_Clk) then

if cq6<11 then cq6:=cq6+1;

else cq6:=0;

end if;

end if;

shi1<= cq6 rem 10;

shi2<= cq6 / 10;

case shi2 is

when 0 => shishi<=\"0000\";

when 1 => shishi<=\"0001\";

when others => null;

end case;

case shi1 is

when 0 => shige<=\"0000\";

when 1 => shige<=\"0001\";

when 2 => shige<=\"0010\";

when 3 => shige<=\"0011\";

when 4 => shige<=\"0100\";

when 5 => shige<=\"0101\";

when 6 => shige<=\"0110\";

when 7 => shige<=\"0111\";

when 8 => shige<=\"1000\";

when 9 => shige<=\"1001\";

when others => null;

end case;

end process;

end dong;

--本次EDA实习较简单,是用FPGA芯片 Cyclone:EP1C3T144C8 来设计完成,采用50MHZ的输入时钟,对其进行分频到10HZ 作为最低位的计数时钟,最低位即0.1s的显示,用10进制计数器计 10HZ时钟上升沿的跳变次数,来实现这一位的计时,当出现进位时,10进制计数器清零并输出进位信号(即1s的时钟信号),再用60进制对一秒的信号进行计数,并进位输出一分钟的时钟信号。。。。。直至小时。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- aiwanbo.com 版权所有 赣ICP备2024042808号-3

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务