社区导航

 

搜索
查看: 3264|回复: 2

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

[复制链接]

116

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 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 ;仿真的结果:见附件

107

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-5-8 09:18 | 显示全部楼层
if count4>11 then preclk <='1';count4 :="0000";
elsif clk'event and clk ='1' then count4 := count4 + 1;
这句的if 和elsif 是什么关系,count4的计数是在计数clk,既然你是计数上升沿,就应该在clk的上升沿计数啊,系统的分频出不来,后面的就出不来,你一步一步的显示波形

回复

使用道具 举报

104

TA的帖子

0

TA的资源

一粒金砂(初级)

Rank: 1

发表于 2009-5-10 18:02 | 显示全部楼层
楼上的,我知道原因了,因为我选的板子不兼容,程序是对的

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

关闭

站长推荐上一条 /5 下一条

  • 论坛活动 E手掌握

    扫码关注
    EEWORLD 官方微信

  • EE福利  唾手可得

    扫码关注
    EE福利 唾手可得

Archiver|手机版|小黑屋|电子工程世界 ( 京ICP证 060456 )

GMT+8, 2020-2-22 23:06 , Processed in 0.130354 second(s), 18 queries , Gzip On, MemCache On.

快速回复 返回顶部 返回列表