大家帮忙看下这个程序里的CNT2变量是干什么用的
这是一个控制蜂鸣器发出友谊天长地久音乐的一个乐谱 用Q来表示的 另外再接一个控制部分就可以控制蜂鸣器演奏了 时钟频率4M 其中的CNT2变量是干什么用的呢? library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all;
entity yindiao is port (clk : in std_logic; q : out integer range 0 to 10204 ); end yindiao;
architecture behave of yindiao is begin process(clk) variable cnt1:integer range 0 to 1500000; variable cnt2:integer range 0 to 8; variable n :integer range 0 to 45; begin if clk'event and clk='1' then if cnt1<1500000 then --此数值控制每一个音的长短 cnt1:=cnt1+1; else cnt1:=0; case n is when 0 =>q<=10204; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=1; end if; when 1 =>q<=7364; if cnt2<6 then cnt2:=cnt2+1; else cnt2:=0; n:=2; end if; when 2 =>q<=6061; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=3; end if; when 3 =>q<=6803; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=4; end if; when 4 =>q<=7634; n:=5; when 5 =>q<=6803; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=6; end if; when 6 =>q<=6061; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=7; end if; when 7 =>q<=7634; if cnt2<4 then cnt2:=cnt2+1; else cnt2:=0; n:=8; end if; when 8 =>q<=6061; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=9; end if; when 9 =>q<=5089; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=10; end if; when 10 =>q<=4535; if cnt2<9 then cnt2:=cnt2+1; else cnt2:=0; n:=11; end if; when 11 =>q<=5089; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=12; end if; when 12 =>q<=6061; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=13; end if; when 13 =>q<=7634; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=14; end if; when 14 =>q<=6803; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=15; end if; when 15 =>q<=7634; n:=16; when 16 =>q<=6803; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=17; end if; when 17 =>q<=6061; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=18; end if;
when 18 =>q<=7634; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=19; end if; when 19 =>q<=9050; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=20; end if; when 20 =>q<=10204; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=21; end if; when 21 =>q<=7634; if cnt2<7 then cnt2:=cnt2+1; else cnt2:=0; n:=22; end if; when 22 =>q<=4535; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=23; end if;
when 23 =>q<=5089; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=24; end if; when 24 =>q<=6061; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=25; end if; when 25 =>q<=7634; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=26; end if; when 26 =>q<=6803; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=27; end if; when 27 =>q<=7634; n:=28; when 28 =>q<=6803; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=29; end if; when 29 =>q<=4535; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=30; end if; when 30 =>q<=5089; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=31; end if; when 31 =>q<=6061; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=32; end if; when 32 =>q<=5089; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=33; end if; when 33 =>q<=4535; if cnt2<7 then cnt2:=cnt2+1; else cnt2:=0; n:=34; end if; when 34 =>q<=3809; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=35; end if; when 35 =>q<=5089; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=36; end if; when 36 =>q<=6061; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=37; end if; when 37 =>q<=7634; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=38; end if; when 38 =>q<=6803; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=39; end if; when 39 =>q<=7634; n:=40; when 40 =>q<=6803; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=41; end if; when 41 =>q<=6061; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=42; end if; when 42 =>q<=7634; if cnt2<3 then cnt2:=cnt2+1; else cnt2:=0; n:=43; end if; when 43 =>q<=9050; if cnt2<2 then cnt2:=cnt2+1; else cnt2:=0; n:=44; end if; when 44 =>q<=10204; if cnt2<1 then cnt2:=cnt2+1; else cnt2:=0; n:=45; end if; when 45 =>q<=7634; if cnt2<7 then cnt2:=cnt2+1; else cnt2:=0; n:=0; end if; end case; end if; end if; end process; end behave;
|