产生一个上升沿clk1。如果a没有变化到110010则a继续自加,直到110010为止产生下一个上升沿。
process(clk)
variable b:std_logic_vector(4 downto 0); begin
if clr='1' then
clk2<='0'; -----复位信号 else
if clk'event and clk='1'then if b=\ b:=\ clk2<='1'; else b:=b+1; clk2<='0'; end if; end if; end if;
end process;
以上程序为对clk进行25分频,原理同上,产生信号clk2。 process(clk)
variable c:std_logic_vector(2 downto 0); begin if clr='1' then
clk3<='0'; ----复位信号 else
if clk'event and clk='1'then if c=\ c:=\
clk3<='1'; else c:=c+1; clk3<='0'; end if; end if; end if;
end process;
以上程序为对clk进行8分频,产生一个新的时钟脉冲信号clk3。 数码管及二极管循环显示时序控制程序: process(clk2)
variable z:integer range 0 to 20; begin if clr='1' then
s<=\ -------复位信号 else
if clk'event and clk='1'then
z:=z+1;
if z=20then s<=s+1;s:=0;
if s=\else s<=s+1; end if; end if; end if; end if;
end process;
该段程序的目的是对clk2再进行一次分频,当clk2发生变化,并且变化为上升沿时,z就加1,直到加到为20时,s就发生变化,加1,每当s发生变化,加到30时,s就加1。当s从00000变化到10111时,就对s清零,从而实现数码显示管和发光二极管的循环显示,以达到显示速度的要求。 发光二极管及数码管显示程序: process(s)
begin
case s is
when \ when \when \ when \ when \ when \ when \ when \ 此段程序就是当敏感信号s发生变化至01000时,对数码管进行置位和置型,0000011也就是对相应的数码管使之显示花型为B,通过对数码管使能端的置位,控制显示的数码管显示为BB ,并且发光二极管最左边显示为亮。当S每变化一次,数码管向右移动一格,发光二极管也同步向右移动,每次只亮一个灯。当 s变化到01111之后执行下一段程序,同时扬声器发出声音。
when \ when\ when\ when \ when\when\ when\ when \
when others=>null; end case; end process; end;
此段程序就是当敏感信号s发生变化至10000时,对数码管进行置位和置型,1000110也就是对相应的数码管使之显示花型为C,通过对数码管使能端的置位,控制显示的数码管显示为CC ,并且发光二极管最左边第一个和最右边第一个显示为亮。当S每变化一次,数码管向中间移动一格,发光二极管也同步中间移动,可以看到由二边向中间移动再发散到二边的变化过程。当 s变化到10111之后执行再循环显示A花型,同时扬声器发出声音。
三 波形仿真及分析
为了方便观察显示结果,这里调节仿真时间为3us ,脉冲频率clk的周期为5ns,如下图所示为显示花型AA的仿真结果。
图2 花型A波形仿真图
由图2可知,当clk发生变化,来上升沿时,led7s1为0001000即数码管首先显示为花型A 二极管按规定的显示,首先led7s2位01111111即最右边的二极管亮灯,led_selout
为11000000即最右边的2个数码管显示2个A的花型。当clk变化到规定次数时二极管的显示开始按左移动,数码显示管也向左移动。Led7s2依次变化01111111~11111110,实现二极管的向左移动;led_selout也依次变化11000000~00000011实现数码显示管的向左移动。同时当clk信号变化50次时产生一个上升沿clk1,控制扬声器发出声音。
图3 花型BB的波形仿真图
由图3可知,当clk发生变化,来上升沿时,led7s1为0000011即数码管首先显示为花型B二极管按规定的显示,首先led7s2位11111110即最右边的二极管亮灯,led_selout为00000011即最右边的2个数码管显示2个B的花型。当clk变化到规定次数时二极管的显示开始向右移动,数码显示管也向右移动。Led7s2依次变化11111110~01111111,实现二极管
相关推荐: