EDA实现电子琴的程序.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
实验十五 电子琴设计 音名与频率的关系: 音乐上的十二平均律规定:每两个八度音之间的频率相差一倍。在这两个八度音之间,分成十二个半音,每两个相邻伴音的频率比为12?2。另外还规定,音名A的频率为440Hz。音名B到C、E到F之间为半音,其余为全音。这样,可计算得从A(简谱的低音6)到a1(简谱的高音6)之间每个音名的频率为: A(6):440Hz a(6):880Hz a1(6):1760Hz B(7):493.88Hz b(7):987.76Hz c(1):523.25Hz c1(1):1046.50Hz d(2):587.33Hz d1(2):1174.66Hz e(3):659.25Hz e1(3):1318.51Hz f(4):698.46Hz f1(4):1396.92Hz g(5):783.99Hz g1(5):1567.98Hz 二、设计要求: 设计一个电子琴,要求能演奏音名A到a1之间的全部音阶。按下一个键,则演奏该音名,并用数码管显示音名,用发光二极管指示高、中、低音。 三、设计提示: 本实验由键盘编码,音频输出译码器、分频器组成。取10MHz信号作为基准。以基准频率除以上述频率,可得各音名频率的分频系数。注意,为了减少输出的偶次谐波成分,最后输出应为对称方波。音频输出译码器实质上是一个多路选择器,根据键盘编码的输出,选择音阶发生器的不同的预置数,分频后输出音频。 分频器可以为加法计数器,以可以为减法计数器,计算预置数时稍有不同,应加以注意。另外,应根据基准频率和输出频率,来确定计数器的位数。 设计框图如下图所示: 按键编码 按键编码 预置数选择 可预置计数器 T触发器 (二分频) 扫描时钟 按键输入 键码 10MHz时钟 音频输出 预置数 译码器 显示输出 电子琴框图 四、实验步骤 1、启动ISE集成开发环境,创建工程并输入设计源文件。 2、对设计进行时序仿真,分析设计的正确性。 3、锁定引脚,完成设计实现过程。并在实验箱上连线,利用iMPACT进行程序下载。 4、在实验箱上验证电子琴的功能,观察并记录实验结果. 五、实验报告 1.music的VHDL 源程序: library ieee; use ieee.std_logic_1164.all; entity music is port(kin: std_logic_vector(0 to 15); spk_out: out std_logic; led_out: out std_logic_vector(6 downto 0); index: out std_logic_vector(2 downto 0); clk: in std_logic); end music; architecture stru of music is component tonetab port( index : in INTEGER range 0 to 15; tone : out INTEGER range 0 to 16#3fff#; code : out INTEGER range 0 to 15; high : out STD_LOGIC_VECTOR(2 DOWNTO 0) ); end component; component tonegen port( clk : in STD_LOGIC; tone : in integer range 0 to 16#3fff#; spks : out STD_LOGIC ); end component; component hex2led port( hex : in integer range 0 to 15; led : out STD_LOGIC_VECTOR(6 downto 0) ); end component; component keybord port( kin : in STD_LOGIC_VECTOR(0 to 15); kout : out INTEGER range 0 to 15 ); end component; signal kout: integer range 0 to 15; signal tone: INTEGER range 0 to 16#3fff#; signal digit: integer range 0 to 15; begin u1: keybord port map (kin=kin,kout=kout); u2: toneta

文档评论(0)

pengyou2017 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档