基于vhdl八音符电子琴电路设计(编辑修改稿)内容摘要:

n 0010=tone=01110010000。 code=0010。 high=39。 039。 912 When 0011=tone=10000001100。 code=0011。 high=39。 039。 1036 When 0100=tone=10000110101。 code=0100。 high=39。 039。 1077 When 0101=tone=10010101101。 code=0101。 high=39。 039。 1197 When 0110=tone=10100001010。 code=0110。 high=39。 039。 1290 When 0111=tone=10101011100。 code=0111。 high=39。 039。 1372 When 1000=tone=10110000010。 code=0001。 high=39。 139。 1410 When 1001=tone=10111001000。 code=0010。 high=39。 139。 1480 When 1010=tone=11000000110。 code=0011。 high=39。 139。 1542 When 1011=tone=11000101000。 code=0100。 high=39。 139。 1576 When 1100=tone=11001010110。 code=0101。 high=39。 139。 1622 When 12 1101=tone=11010000100。 code=0110。 high=39。 139。 1668 When 1110=tone=11011000000。 code=0001。 high=39。 139。 1728 When 1111=tone=11011101010。 code=0010。 high=39。 139。 1770 When others = null。 end case。 end process。 end。 (注:每一个 index 的值都对应一个 code,tone 值, index 的值从 0000 到 0111 对应的 high 为低电,从 1000 到 1111 对应的 high 为高电。 ) ToneTaba 模块波形仿真图如图 10: 图 10 Toaba 的波形仿真图 3. Speakera( 数控分频器) 模块: 原理: 数控分频器的功能是当在输入端给定不同的输入数时 ,将对 输入的时钟信号有不同的分频比,数控分频器是用计数值可并行 预置的加法计数器来完成的。 在此, 音符的频率可由 数控分频器 Speakera 获得。 由其 clk 端输入一具有较高频率的信号,通过 Speakera 分频后由 Spkout 输出,由于直接从数控分频器中出 13 来的输出信号是脉宽极窄的脉冲式信号,为了有利于驱动扬声器,需 加一个 D触发器以均衡其占空比,但这时的频率将是原来的 1/2。 Speakera 对 clk 输入信号的分频比由 11 位预置数 Tone[10..0]决定。 Spkout 的输出频率将 决定每一音符的音调,这样分频计 数器的预置值 Tone[10..0]与 Spkout 的输 出频率就有了对应关系。 如图 11 图 11 Speakera 模块 程序: library ieee。 library ieee。 use。 use。 entity speakera is port(clk2: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(clk2) variable count4:std_logic_vector(3 downto 0)。 begin preclk=39。 039。 if count411 then preclk=39。 139。 14 count4:=0000。 elsif clk239。 event and clk2=39。 139。 then count4:=count4+1。 end if。 end process。 genspks:process(preclk,tone) variable count11:std_logic_vector(10 downto 0)。 begin if preclk39。 event and preclk=39。 139。 then if count11=167FF then count11:=tone。 fullspks=39。 139。 else count11:=count11+1。 fullspks=39。 039。 end if。 end if。 end process。 delayspks:process(fullspks) variable count2:std_logic。 begin if fullspks39。 event and fullspks=39。 139。 then count2:=not count2。 if count2=39。 139。 then spks=39。 139。 else spks=39。 039。 end if。 end if。 end process。 15 end。 Speakera( 数控分频器) 模块仿 真波形如图 12: 图 12 Speakera 的波形仿真图 2) 、 Div 模块: 原理: 由于我们所使用的硬件设备不能满足我们所需要的两个 CLK 输出 的 频率,所以我们使用一个分频器来实现把一个 50MHz 的晶体振荡频率分 成一个 12MHz,一个 8Hz 两。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。