process (clk)
begin
sel<=addr;
case sel is
when "0000"=>led<="11000000";
when "0001"=>led<="11111001";
when "0010"=>led<="10100100";
when "0011"=>led<="10110000";
when "0100"=>led<="10011001";
when "0101"=>led<="10010010";
when "0110"=>led<="10000010";
when "0111"=>led<="11111000";
when "1000"=>led<="10000000";
when "1001"=>led<="10010000";
when others=>led<="10111111";
end case;
end process;
end behave;
该模块的仿真波形如图18所示。
图18 译码显示波形仿真
4.4 整点报时模块
该模块能够完成整点时的报时功能。即将至整点时,前四秒低音,1Hz的标准脉冲作为输入信号,最后一秒高音,500Hz的高频脉冲作为输入信号[12]。模块逻辑图如图19。
图19 整点报时模块元件
整点报时核心子程序:
library ieee;
use ieee.std_logic_1164.all;
entity baoshi is
port (ml,mh,sh,sl :in std_logic_vector(3 downto 0);
clk05s,clk1k:in std_logic; speaker :out std_logic);
end baoshi;
architecture one of baoshi is
signal a,b,c,d : std_logic ;
begin
process (clk05s,clk1k)
variable cnt : integer range 0 to 200 :=0;
begin
if clk05s'event and clk05s = '1' then
if cnt=119 then
cnt:=0;
else
cnt:=cnt+1;
end if;
if mh="0101" and ml="1001" and (cnt=117 or cnt=115 or cnt=113 or cnt=111)then
c<='0';else c<='1';
end if;
if mh="0000" and ml="0000" and (cnt=119 or cnt=0 or cnt=1)then
d<='0';
else
d<='1';
end if;
end if;
end process;
a<=clk1k and not (d);
b<=clk05s and not (c);
speaker<=a or b;end;
该程序中的时钟信号clk05s的频率为2Hz,且其有效电平(高电平)占空2/3,整点报时模块仿真波形如图20所示。