找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3649|回复: 2
打印 上一主题 下一主题
收起左侧

谁能给我看看这段vhdl代码,给我讲解下

[复制链接]
跳转到指定楼层
楼主
ID:123572 发表于 2016-5-27 19:34 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
ENTITY GUOGE IS
PORT(CLK,rst:in std_logic;     
         out_bit:OUT STD_LOGIC);
END GUOGE;
ARCHITECTURE PVJ OF GUOGE IS
  SIGNAL time:STD_LOGIC_VECTOR(24 DOWNTO 0);
  signal music21:STD_LOGIC_VECTOR(8 DOWNTO 0);
  SIGNAL L5,L6,L7,M1,M2,M3,M4,M5,M6:STD_LOGIC_VECTOR(16 DOWNTO 0);
  SIGNAL LL5,LL6,LL7,C,MM1,MM2,MM3,MM4,MM5,MM6,X0:STD_LOGIC;
     BEGIN
      process(clk,rst)
        begin
        X0<='1';
        if clk'event and clk='1' then time<=time+1;                 --将20M频率6分频               
                 if L5=12755  then L5<="00000000000000000";LL5<=not LL5;
                    else    L5<=L5+1;                  
                 end if;
                 if L6=11363  then L6<="00000000000000000";LL6<=not LL6;
                    else    L6<=L6+1;                  
                 end if;
                 if L7=10124  then L7<="00000000000000000";LL7<=not LL7;
                    else    L7<=L7+1;                  
                 end if;
                 if M1=9555  then M1<="00000000000000000";MM1<=not MM1;
                    else   M1<=M1+1;                  
                 end if;
                 if M2=8513  then M2<="00000000000000000";MM2<=not MM2;
                    else    M2<=M2+1;                  
                 end if;
                 if M3=7584  then M3<="00000000000000000";MM3<=not MM3;
                    else    M3<=M3+1;                  
                 end if;               
                 if M5=6377  then M5<="00000000000000000";MM5<=not MM5;
                    else   M5<=M5+1;                  
                 end if;
                 if M6=5681  then M6<="00000000000000000";MM6<=not MM6;
                    else    M6<=M6+1;                  
                 end if;
                 if time=2499999 then time<="0000000000000000000000000";c<='1';
                 else c<='0';
                 end if;               
           end if;
        end process;
   PROCESS(c,RST)
       BEGIN
        if c'event and c='1' then music21<=music21+1;
              if music21=255 then music21<="000000000";
              end if;
        end if;
        if music21>=0 and music21<=1 then out_bit<=LL5;END IF;--低音5    起
        if music21>=2 and music21<=7 then out_bit<=MM1;END IF;--中音1    来
        if music21>=8 and music21<=9 then out_bit<=MM1;END IF;--中音1    不
        if music21>=10 and music21<=13 then out_bit<=MM1;END IF;--中音1  愿做
        if music21>=14 and music21<=15 then out_bit<=LL5;END IF;--低音5  奴
        if music21=16 then out_bit<=LL6;END IF;                --低音6   隶
        if music21=17 then out_bit<=LL7;END IF;                --低音7   的
        if music21>=18 and music21<=25 then out_bit<=MM1;END IF;--中音1  人们
        if music21>=26 and music21<=27 then out_bit<=X0;END IF;--休止符
        if music21>=28 and music21<=29 then out_bit<=MM3;END IF;--中音3  把
        if music21>=30 and music21<=31 then out_bit<=MM1;END IF;--中音1  我
        if music21=32 then out_bit<=MM2;END IF;                 --中音2  们
        if music21=33 then out_bit<=MM3;END IF;                 --中音3  的
        if music21>=34 and music21<=41 then out_bit<=MM5;END IF;--中音5  血肉
        if music21>=42 and music21<=45 then out_bit<=MM3;END IF;--中音3  筑成
        if music21>=46 and music21<=47 then out_bit<=MM1;END IF;--中音1  我
        if music21=48 then out_bit<=MM3;END IF;                 --中音3  们
        if music21>=49 and music21<=51 then out_bit<=MM5;END IF;--中音5  新
        if music21=52 then out_bit<=MM3;END IF;                 --中音3  的
        if music21>=53 and music21<=56 then out_bit<=MM2;END IF;--中音2  长
        if music21>=57 and music21<=64 then out_bit<=MM2;END IF;--中音2  城
        if music21>=65 and music21<=68 then out_bit<=MM6;END IF;--中音6  中
        if music21>=69 and music21<=72 then out_bit<=MM5;END IF;--中音5  华
        if music21>=73 and music21<=76 then out_bit<=MM2;END IF;--中音2  民
        if music21>=77 and music21<=80 then out_bit<=MM3;END IF;--中音3  族
        if music21>=81 and music21<=82 then out_bit<=MM5;END IF;--中音5  到
        if music21>=83 and music21<=86 then out_bit<=MM3;END IF;--中音3  了
        if music21>=87 and music21<=88 then out_bit<=MM5;END IF;--中音5  最
        if music21>=89 and music21<=90 then out_bit<=MM3;END IF;--中音3  危
        if music21=91 then out_bit<=MM2;END IF;                 --中音2  险
        if music21=92 then out_bit<=MM3;END IF;                 --中音3  的   
        if music21>=93 and music21<=94 then out_bit<=MM1;END IF;--中音1  时
        if music21=95 then out_bit<=MM2;END IF;                 --中音2
        if music21>=96 and music21<=99 then out_bit<=MM3;END IF;--中音3    候
        if music21>=100 and music21<=103 then out_bit<=X0;END IF; --休止符
        if music21>=104 and music21<=106 then out_bit<=MM5;END IF;--中音5  每
        if music21=107  then out_bit<=MM6;END IF;                 --低音6  个
        if music21>=108 and music21<=111 then out_bit<=MM1;END IF;--中音1 人被
        if music21>=112 and music21<=115 then out_bit<=MM3;END IF;--中音3 迫着
        if music21>=116 and music21<=119 then out_bit<=MM5;END IF;--中音5 发出
        if music21>=120 and music21<=123 then out_bit<=MM2;END IF;--中音2 最后的
        if music21>=124 and music21<=127 then out_bit<=LL6;END IF;--低音6 吼
        if music21>=128 and music21<=133 then out_bit<=MM2;END IF;--中音2 声
        if music21>=134 and music21<=135 then out_bit<=LL5;END IF;--低音5 起
        if music21>=136 and music21<=143 then out_bit<=MM1;END IF;--中音1 来!起
        if music21>=144 and music21<=151 then out_bit<=MM3;END IF;--中音3 来!起
        if music21>=152 and music21<=167 then out_bit<=MM5;END IF; --中音5 来!
        if music21>=168 and music21<=170 then out_bit<=MM1;END IF; --中音1 我
        if music21=171 then out_bit<=MM3;END IF;                   --中音3 们
        if music21>=172 and music21<=175 then out_bit<=MM5;END IF; --中音5  万众
        if music21>=176 and music21<=179 then out_bit<=MM6;END IF; --中音6   一
        if music21>=180 and music21<=183 then out_bit<=MM5;END IF;--中音5    心
        if music21>=184 and music21<=186 then out_bit<=MM3;END IF;--中音3  冒
        if music21=187 then out_bit<=MM1;END IF;                  --中音1  着      
        if music21>=188 and music21<=191 then out_bit<=MM5;END IF;--中音5  敌人的
        if music21>=192 and music21<=193 then out_bit<=MM3;END IF;----中音3 炮
        if music21>=194 and music21<=195 then out_bit<=X0;END IF;
        if music21>=196 and music21<=197 then out_bit<=MM1;END IF;--中音1  火
        if music21>=198 and music21<=199 then out_bit<=X0;END IF;
        if music21>=200 and music21<=203 then out_bit<=LL5;END IF;--低音5  前
        if music21>=204 and music21<=207 then out_bit<=MM1;END IF;--中音1  进
        if music21>=208 and music21<=210 then out_bit<=MM3;END IF;--低音3  冒
        if music21=211 then out_bit<=MM1;END IF;                 --中音1   着
        if music21>=212 and music21<=215 then out_bit<=MM5;END IF;--中音5 敌人的
        if music21>=216 and music21<=217 then out_bit<=MM3;END IF;--中音3 炮
        if music21>=218 and music21<=219 then out_bit<=X0;END IF;
        if music21>=220 and music21<=221 then out_bit<=MM1;END IF;--中音1 火
        if music21>=222 and music21<=223 then out_bit<=X0;END IF;
        if music21>=224 and music21<=227 then out_bit<=LL5;END IF;--中音5    前
        if music21>=228 and music21<=231 then out_bit<=MM1;END IF;--中音1    进
        if music21>=232 and music21<=235 then out_bit<=LL5;END IF;--中音5    前
        if music21>=236 and music21<=239 then out_bit<=MM1;END IF;--中音1    进
        if music21>=240 and music21<=243 then out_bit<=LL5;END IF;--中音5    前
        if music21>=244 and music21<=247 then out_bit<=MM1;END IF;--中音1    进
        if music21>=248 and music21<=251 then out_bit<=MM1;END IF;--中音1    进
        if music21>=252 and music21<=255 then out_bit<=X0;END IF;      
IF RST='0' THEN MUSIC21<="000000000";END IF;   
    END PROCESS;
end;
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖 顶 踩
回复

使用道具 举报

沙发
ID:135513 发表于 2016-7-30 11:02 | 只看该作者
第一次见用FPGA来玩单音合成输出的。
代码的前半部分定义了,1~7音符输出的频率;
后面的就是演奏国歌了。
回复

使用道具 举报

板凳
ID:237939 发表于 2017-10-9 10:28 | 只看该作者
这个代码用来教学可以,不实用。
音频速度很慢,所以可以把比较和结果都放在ram里面,然后pipeline读取比较,最后输出。只要一个比较器一个ram。
否则逻辑用的太多!!
回复

使用道具 举报

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

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

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