a 校时模块最初的图形:
3整点报时模块:
59’50’‘起 OR SPEAKER
整点
a整点报时模块VHDL源程序: 此模块主要完成
整点的报时功能。它通过对预设的时间和计时的时间的比较来完成整点报时,当计时到达59分50秒时开始报时,在59分50、52、54、56、58秒鸣叫,鸣叫声频为500Hz。到达59分60秒时为最后一声整点报时。整点报时的频率为1Kz。该模块的VHDL代码为: library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; entity alert_31 is
port(m1,m0,s1,s0:in std_logic_vector(3 downto 0); siga,sigb:out std_logic); end alert_31;
architecture alert of alert_31 is
begin
siga<='1'when(m1=\and m0=\and s1=\and (s0=\or
s0=\ sigb<='1'when(m1=\end alert;
b报时生成器件图:
本模块端口说明:m1,m0,s1,s0分别为分和秒的高低位的输入;siga,sigb分别为500hz和1khz鸣叫的控制信号。
功能实现:定义一个以m1、m0、s1、s0为敏感信号的一个比较进程,在进程判断分是否为59分,若是则判断秒的高位是否是5,若是则如果秒的低位为0、2、6、8则siga为1;若分不是59则判断分和秒是否都为0,若都为0则sigb为1。
4分频模块: CLK
a分频生成器件图: 计数器1 计数器2 计数器3 1KHZ 500HZ 1HZ
b源代码: library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all; entity fenpin_31 is
port (clk:in std_logic;
hz512,hz256,hz64,hz4,hz1:out std_logic);
end fenpin_31;
architecture fenpin of fenpin_31 is
signal cc: std_logic_vector(9 downto 0); begin
process(clk) begin
if(clk'event and clk='1') then if(cc=\ cc<=\ else
cc<=cc+1; end if; end if; end process; hz512<=cc(0); hz256<=cc(1); hz64<=cc(3); hz4<=cc(7); hz1<=cc(9); end fenpin;
C分频仿真波形图:
模块说明:由于clk的频率为1024hz,所以可以定义一个std_logic_vecture(9 downto 0),使它不停地从0000000000加到1111111111然后又返回000000000,由于最低位在clk
脉冲到来时从0变成1,然后又在下一个脉冲变回0,因此最低位的时钟周期为clk的时钟周期的两倍,它的频率就为clk频率的1/2即512HZ。同理,次高位的频率就为clk频率的1/2*1/2=1/4,用这种方法就可以得到各种能整除1024的频率,从而实现分频功能。
5. 24进制模块
a 24进制器件生成图
b 24进制源程序:
library ieee;
use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; entity hour24_31 is
port (clk:in std_logic;
h1,h0:out std_logic_vector(3 downto 0)); end hour24_31;
architecture hour of hour24_31 is
signal q1,q0:std_logic_vector(3 downto 0); begin
process(clk) begin
if(clk'event and clk='1')then if(q1=\ q1<=\ elsif(q0=\
q0<=\ else
q0<=q0+'1'; end if; end if; h1<=q1; h0<=q0; end process; end hour;
c 24进制仿真波形图:
本模块端口说明:clk输入端;h1和h0分别为小时的高位和低位输出,用来在数码管中分别显示小时的高位和低位数值,定义为std_logic_vector(3 downto 0).
功能实现:在clk上升沿来临时,如果高位为2,低位为3则高位各低位都变回0,不然再低位进行判断,若低位为9变回0,高位加1,若不为9则低位直接加1即可同样实现.
6.60进制模块:
a 60进制器件生成图:
b 60进制源程序:
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity cnt60_31 is -----60进制的分和秒的计数 port (clk:in std_logic; clear:in std_logic; c:out std_logic;
k1,k0:out std_logic_vector(3 downto 0)); end cnt60_31;
architecture cnt of cnt60_31 is
signal q1,q0:std_logic_vector(3 downto 0); begin
process(clk,clear) begin