用vhdl写了一个分频器,波形仿真没有输出,怎么解决

johnny117   2009-5-7 14:50 楼主
代码是这样的:
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 ;仿真的结果:见附件

回复评论 (2)

if count4>11 then preclk <='1';count4 :="0000";
elsif clk'event and clk ='1' then count4 := count4 + 1;
这句的if 和elsif 是什么关系,count4的计数是在计数clk,既然你是计数上升沿,就应该在clk的上升沿计数啊,系统的分频出不来,后面的就出不来,你一步一步的显示波形
点赞  2009-5-8 09:18
楼上的,我知道原因了,因为我选的板子不兼容,程序是对的
点赞  2009-5-10 18:02
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 京公网安备 11010802033920号
    写回复