代码是这样的:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
entity speakera is
Port ( clk : in std_logic; --系统时钟
tone : in std_logic_vector (10 downto 0); --音符分频系数
spks : out std_logic); --驱动扬声器的音频信号
end ;
architecture one of speakera is
signal preclk,fullspks:std_logic;
begin
divideclk:process(clk) --此进程对系统时钟进行4分频
variable count4:std_logic_vector (3 downto 0);
begin
preclk<='0';
if count4>11 then preclk<='1';count4 :="0000";
elsif clk'event and clk ='1' then count4 := count4 + 1;
end if;
end process ;
genspks:process(preclk,tone)
--此进程按照tone1输入的分频系数对8MHz的脉冲再次分频,得到所需要的音符频率
variable count11: std_logic_vector (10 downto 0);
begin
if preclk'event and preclk='1' then
if count11 = 16#7ff# then count11:=tone;fullspks<='1';
else count11:=count11+1;fullspks<='0';end if;
end if;
end process;
delaysps:process(fullspks) --此进程对fullspks进行2分频
variable count2 :std_logic;
begin
if fullspks'event and fullspks='1' then count2:=not count2;
if count2='1' then spks<='1';
else spks<='0';end if;
end if;
end process;
end ;仿真的结果:见附件
if count4>11 then preclk <='1';count4 :="0000";
elsif clk'event and clk ='1' then count4 := count4 + 1;
这句的if 和elsif 是什么关系,count4的计数是在计数clk,既然你是计数上升沿,就应该在clk的上升沿计数啊,系统的分频出不来,后面的就出不来,你一步一步的显示波形
楼上的,我知道原因了,因为我选的板子不兼容,程序是对的