基于eda的乐曲硬件演奏电路内容摘要:

NENT。 SIGNAL Counter : STD_LOGIC_VECTOR (7 DOWNTO 0)。 SIGNAL INDEX1: STD_LOGIC_VECTOR (3 DOWNTO 0) BEGIN CNT8 : PROCESS(clk4hz ,Counter) IF Counter=138 THEN Counter = 00000000。 ELSIF (clk4hz39。 EVENT AND clk4hz = 39。 139。 ) THEN Counter = Counter+1。 END IF。 END PROCESS CNT8。 u1 : MUSIC1 PORT MAP(address=Counter , clock=clk4hz,q=Index1 )。 mux: PROCESS(auto) Begin IF auto=0 THEN Index2 = Tone。 END IF。 ELSE Index1 = Tone。 END PROCESS mux。 END。 END one。 在源程序中 Tone 是 音乐 节拍发生器 输出的音符数据; clk4hz 是计数时钟输入端,该信号作为输出音符的快慢信号 , 此处选择 4Hz 频率,即每一计数值的停留时间为 秒计 1 拍,四四拍的四分音符的持续时间为 1 秒,频率越高,时钟的输出节拍速度就快,演奏的速度就越快,反之演奏的速度就变慢; index2 为手控输入的 音符数据; auto 为 手动 /自动选择按扭, auto=1 时为自动 演奏, auto=0时为手动 输入。 音乐 节拍发生器 的 仿真输出波形文件如图 636( a)所示 ,分析可知仿真结果正确无误,将以上设计的 音乐 节拍发生器 电 路 设置成可调用的元件,以备高层设计中使用,其元件符号如图 636( b)所示 (a) (b) 图 637 音乐节拍发生器 (a) 仿真输出波形。 ( b)元件符号图 2 音符译码电路 Toaba 模块 音符译码电路即音调发生器实际上是一个查表电路,放置 21 个音乐简谱对应的频率表,根据该表为 数控分频模块( speaker)提供所发音符频率的 初始值(该初始值可参照表 64),而此数在 数控分频模块 入口的停留时间即为此音符的节拍数,不失一般性,以下 VDHL 程序中仅设置了“梁祝”乐曲全部音符所对应的音符频率的 初始值,共 16 个,每个 音符停留时间由音乐 节拍发生器的时钟频率决定,在此为 4Hz 信号,这 16 个值的输出由对应于音符译码电路的 4 位输入值 Index[3..0]确定,该值中 音符的停留时间由音乐 节拍发生器中的音符数据决定,该数据重复的次数为该 音符的节拍数,如为 2 则为四二拍,如为 4 则为四四拍即全音符。 其 VHDL 源程序如下: LIBRARY IEEE。 USE。 ENTITY ToneTaba IS PORT ( Index : IN STD_LOGIC_VECTOR (3 DOWNTO 0)。 CODE : OUT STD_LOGIC_VECTOR (3 DOWNTO 0)。 HIGH : OUT STD_LOGIC。 Tone : OUT STD_LOGIC_VECTOR (12 DOWNTO 0) )。 END。 ARCHITECTURE one OF ToneTaba IS BEGIN PROCESS(Index) BEGIN CASE Index IS 译码电路,查表方式,控制音调的预置数 WHEN 0000 = Tone=1111111111111。 CODE=0000。 HIGH =39。 039。 8191 WHEN 0001 = Tone=1000100010001。 CODE=0001。 HIGH =39。 039。 4369。 WHEN 0010 = Tone=1001010110010。 CODE=0010。 HIGH =39。 039。 4786。 WHEN 0011 = Tone=1010000011111。 CODE=0011。 HIGH =39。 039。 5151。 WHEN 0101 = Tone=1011000001000。 CODE=0101。 HIGH =39。 039。 5640。 WHEN 0110 = Tone=1011100011110。 CODE=0110。 HIGH =39。 039。 5918。 WHEN 0111 = Tone=1100000010110。 CODE=0111。 HIGH =39。 039。 6166。 WHEN 1000 = Tone=1100010001000。 CODE=0001。 HIGH =39。 139。 6280。 WHEN 1001 = Tone=1101100001001。 CODE=0010。 HIGH =39。 139。 6921。 WHEN 1010 = Tone=1101000010010。 CODE=0011。 HIGH =39。 139。 6674。 WHEN 1100 = Tone=1101001100111。 CODE=0101。 HIGH =39。 139。 6759。 WHEN 1101 = Tone=1101110001110。 CODE=0110。 HIGH =39。 139。 7054。 WHEN 1111 = Tone=1110001。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。