课程设计报告
题 目
专业学号
授课班号
学生姓名
指导教师
完成时间
课程设计(报告)务书
(理 工 科 类)
Ⅰ课程设计(报告)题目:
电子琴
Ⅱ课程设计(文)工作容
课程设计目标
1培养综合运知识独立开展实践创新力
2提高独立发现问题分析问题解决问题力
3更加解掌握Verilog HDL基知识基编写程序更加深入解门课程
4理学基础通完成涉时序逻辑组合逻辑声光输出具实性趣味性系统设计
5理知识实际应结合起够独立进行某数字应系统开发设计工作定基础
二研究方法手段应
1务分成干模块查阅相关文资料分模块调试完成务
2Verilog HDL语言编写程序
3Modesim60 Quartus II软件进行仿真
4硬件完成实验效果调试演示
三课程设计预期效果
1熟练掌握Verilog HDL语言
2实现功电子琴FPGA实验箱查效果
3键盘key1key7输入中音七音符发音DOREMIFASOLASI控制应音响
4户编制乐曲存入电子琴电子琴完成动演奏功通第八键key8动演奏曲子两老虎第九键key9演奏梁祝第八第九键时蜂鸣器动播放曲子天空城
5数码实时显示音调值
学生姓名: 专业年级:
摘
着EDA技术进展基编程数字电子系统设计完整方案越越受重视利微处理器(CPUMCU)实现乐曲演奏相纯硬件完成乐曲演奏电路逻辑复杂果助功强EDA工具硬件描述语言仅传统数字逻辑技术简单演奏电路难实现课程设计Modesim60利Verilog HDL语言完成软件编写 Quartus Ⅱ软件台编译载FPGA实验箱采FPGA器件驱动扬声器构成乐曲演奏电路该电子琴设计体三模块构成分控制模块乐曲存储循环播放模块顶层模块设计实现手动电子琴动播放音乐功
关键词 EDA Verilog HDL FPGA Quartus Ⅱ 电子琴
ABSTRACT
With the progress of EDA technology based on programmable digital electronic system design complete solutions more and more attention And the use of a microprocessor (CPU or MCU) to achieve the music play compared to the pure hardware logic circuit to play complete songs much more complex without the help of powerful EDA tools and hardware description language the mere number of traditional logic technology even the simplest circuit performance is difficult to achieve This course is designed primarily to use Verilog HDL language in Modesim60 complete software development software platform in the Quartus Ⅱ downloaded to the FPGA compile test cases the use of FPGA devices drive a small speaker to play music to form a circuit The design of the keyboard in general consists of three modules namely control module music storage and playback module cycle the top module The design of manual and automatic keyboard to play music
Key words:EDA Verilog HDL FPGA Quartus ⅡElectronic keyboard
目录
第章 系统设计 4
第节 设计目标 4
基功 4
二 提高部分 4
第二节 设计语言 4
Verilog HDL语言介绍 4
第三节 设计原理 5
乐曲演奏原理 5
第四节 设计方案较 7
方案较 7
二方案选择 8
第五节 总体设计方案 8
第二章 单元模块设计 9
第节 电子琴输入控制模块 9
基原理 9
二原理框图分频系数产生 9
第二节 乐曲存储循环播放模块 10
第三节 顶层模块 11
第三章 软件设计 12
第四章 实验结果讨 14
第节 调试步骤 14
第二节 调试现象出现问题分析 15
第五章 总结 15
致谢 17
参考文献 18
附 录 18
电子琴程序: 18
顶层模块 18
二输入控制模块 21
三曲目1乐谱存储循环播放模块 22
三曲目 二乐谱存储循环播放模块 26
第章 系统设计
第节 设计目标
基功
设计电子琴键盘输入中音七音符发音(DOREMIFASOLASI)控制蜂鸣器发出应音响
二 提高部分
数码显示出发出音调值说:发出DO’音调显示1设计歌曲动演奏器户编制乐曲存入电子琴电子琴完成动演奏功
第二节 设计语言
Verilog HDL语言介绍
Verilog HDL种硬件描述语言算法级门级开关级种抽象设计层次数字系统建模建模数字系统象复杂性介简单门完整电子数字系统间数字系统够层次描述相描述中显式进行时序建模[2]
作种通化硬件描述语言Verilog HDL语言具述描述力:设计行特性设计数流特性设计结构组成包含响应监控设计验证方面时延波形产生机制种建模语言外Verilog HDL语言提供编程语言接口通该接口模拟验证期间设计外部访问设计包括模拟具体控制运行[3]
Verilog HDL语言仅定义语法语法结构定义清晰模拟仿真语义种语言编写模型够Verilog仿真器进行验证语言C编程语言中继承种操作符结构Verilog HDL提供扩展建模力中许扩展初难理解Verilog HDL语言核心子集非常易学数建模应说已足够然完整硬件描述语句足复杂芯片完整电子系统进行描述
Verilog HDL语言已成种标准硬件描述语言具特点:
(1)作种途硬件描述语言具易学性易性
(2)Verilog HDL语言允许模块中进行抽象层次描述
(3)数逻辑综合工具支持Verilog HDL成设计员选择
(4)制造厂商提供Verilog HDL工艺库支持仿真
(5)Verilog HDL程序语言接口拥强功允许户C语言部数结构进行描述[3]
正优点Verilog HDL语言广泛流行
第三节 设计原理
乐曲演奏原理
组成乐曲音符频率值(音调)持续时间(音长)乐曲连续演奏需两基数控制输出扬声器激励信号频率高低持续时间扬声器发出连续乐曲声
1音调控制
频率高低决定音调高低音乐十二均率规定:两8度音(简谱中中音1高音1)间频率相差倍两8度音间分12半音两半音频率12√2 外音名A(简谱中低音6)频率440Hz音名BC间EF间半音余全音[4]计算出简谱中低音1高音1间音名应频率表131示:
表131 简谱中音名频率关系
音名
频率Hz
音名
频率Hz
音名
频率Hz
低音1
2616
中音1
5233
高音1
10465
低音2
2937
中音2
5873
高音2
11747
低音3
3296
中音3
6593
高音3
13185
低音4
3492
中音4
6985
高音4
13969
低音5
392
中音5
784
高音5
1568
低音6
440
中音6
880
高音6
1760
低音7
4939
中音7
9878
高音7
19755
频率信号基准频率分频音阶频率非整数分频系数数必须计算分频数四舍五入取整基准频率低分频太四舍五入取整误差较基准频率高然误差变分频数变实际设计综合考虑两方面素量减频率误差前提取合适基准频率[4]例中选取6MHz基准频率6MHz基准频率先分频6MHz换新基准频率实际音名间相频率关系变演奏出乐曲听起会走调
例需演奏梁祝乐曲该乐曲音阶频率相应分频表2示减输出偶次谐波分量输出扬声器波形应称方波达扬声器前二分频分频器表2中分频6MHz频率二分频3MHz频率基础计算出分频系数9102采14位二进制计数器分频满足需表2中出分频外出应音阶频率时计数器预置数分频系数加载预置数采加载预置数实现分频方法采反馈复零法节省资源实现起容易表132示:
表132 音阶频率应分频预置数
音名
分频
预置数
音名
分频
预置数
低音3
9102
7281
中音2
5111
11272
低音5
7653
8730
中音3
4552
11831
低音6
6818
9565
中音5
3827
12556
低音7
6073
10310
中音6
3409
12974
中音1
5736
10647
高音1
2867
13516
外乐曲中休止符分频系数设0初始值214116383时扬声器会发声
2音长控制
音符持续时间必须根乐曲速度音符节拍数确定果全音符持续时间设1s话需提供4Hz时钟频率产生4分音符时长
图131示乐曲演奏电路原理框图中乐谱产生电路控制音乐音调音长控制音调通设置计数器预置数实现预置数值计数器产生频率信号产生音调控制音长通控制计数器预置数停留时间实现预置数停留时间越长该音符演奏时间越长音符演奏时间025s整数倍节拍较长音符2分音符记谱时该音名连续记录两次
预置数
6MHZ 扬声器
乐谱产生电路
4HZ音调名显示电路
数码
图131乐曲演奏电路原理图
演奏循环进行需外设置时长计数器乐曲演奏完成时保证动头开始演奏
第四节 设计方案较
方案较
方案:采单逻辑器件组合实现样然较直观逻辑器件分工鲜明思路清晰目然元器件种类数繁复杂硬件电路容易引起系统精度高体积等利素例八音符八频率控制发出采方案运分频器信号进行程度分频仪器显易见
方案二:采Verilog HDL语言编程实现电子琴项功系统输入控制电路顶层模块乐曲存储循环播放模块模块组成
二方案选择
方案相较方案二显较笼统整系统分干模块牵涉具体硬件电路必须硬件描述语言Verilog HDL优势仅具良电路行描述系统描述力通俗易懂
两种方案分析较总结选方案二进行电子琴设计
第五节 总体设计方案
利EDA软件中Verilog HDL硬件描述语言编程进行控制然烧程序FPGA实验箱实现系统原理图图151示
控制输入模块
(手动输入音符功)
()
顶层模块
(调功)
乐曲存储循环播放模块
(动循环播放)
乐曲1模块
乐曲3模块
乐曲2模块
图151 系统总体设计方框图
中输入控制模块户设计起输入控制作通该模块通键输入音符乐曲乐曲存储循环播放模块储存事先编写乐谱通循环播放部分产生频率驱动扬声器输出顶层模块实现调功通调输入控制模块乐曲存储循环播放模块选择手动播放者动播放曲目1曲目2曲目3三模块相互联系实现电子琴基功发挥功
第二章 单元模块设计
第节 电子琴输入控制模块
基原理
电子输入控制模块电子琴核心部分程序控制分频模块分频系数部集成1分频器输出端口外部扩音器接受处理外部输入命令(端功控制键乐曲存入写出控制键命令)部分中分频器根分频系数分出七频率发出相应七音符声音通数码观察音符输出里定义秒节拍
二原理框图分频系数产生
基原理图图211
50MHz基准脉
6MHz分频
状态预置
控制分频系数分频模块
选择音符输出
图211输入控制模块基原理
输入控制模块目基准脉分频1234567七音符应频率该模块Verilog HDL描述中包含三进程首先50MHz基准脉进行分频6MHz脉然tone1输入分频系数6MHz脉次分频便需频率终根状态预置情况选择音符输出中音符相应分频系数根音符频率计算
第二节 乐曲存储循环播放模块
该模块实现音调存储发生循环播放功音调发生器作产生获音阶分频预置值12位(高音中音低音分4位)发声输入控制中某位某两位某三位高电时应某音阶数值端口{highmidlow}输出作获该音阶分频预置值该值作数控分频器输入4Hz脉进行分频音阶相应频率例输入{ highmidlow } 12'b000000100000应音符中音RE产生分频系数便10216根已知乐谱利分频系数产生方法实现乐谱存储存储乐谱时计数器state蜂鸣器输出音调计数达值时计数器清零(state<0)计数器0开始重新计数实现循环播放中具体原理框图图221示
4Hz分频
6MHz分频
50MHz基准脉
音调发生器
乐谱存储
循环播放
图221乐曲存储循环播放模块原理图
第三节 顶层模块
该模块电子琴系统设计核心模块通该模块实现两节子模块调模块包括两进程:进程50MHz基准脉分频产生6MHz进程二曲目方式进行控制选择该部分采两位状态标识寄存器mm应实验箱开关key8key9key8拨低电0时调循环演奏曲目1模块输出曲目1dip9拨低电0时调循环演奏曲目2模块输出曲目2key8key8时拨低电0时调循环演奏曲目3模块输出曲目3key8key9时处高电1时调手动演奏模块通键key1~key7实现手动演奏曲目
中顶层模块原理图图231示
控制选择曲目演奏方式
6MHz分频
50MHz基准脉
手动演奏
动演奏曲目1
动演奏曲目2
动演奏曲目1
调循环演奏曲目1模块
调循环演奏曲目2模块
调循环演奏曲目3模块
调手动演奏模块
图231 顶层模块原理图
第三章 软件设计
设计EDA软件系统Quartus Ⅱ完成采顶[2]设计方法图311软件流程图
图311 系统软件流程图
软件设计采结构化程序设计方法功模块独立实际设计中键输入乐曲存储分放四模块中(中动循环播放三曲目原理相)软件设计核心部分数控分频器键输入乐曲储存提供相应分频输入基准时钟进行次分频终输出想音阶频率Verilog HDL描述语言见附录
第四章 实验结果讨
第节 调试步骤
设计采FPGA器件驱动扬声器构成乐曲演奏电路图411典型FPGACPLD设计流程:
图411系统调试图
设计求Quartus IIEDA软件台运Verilog HDL语言进行编程实现相应功
调试时采分模块调试首先子模块调试顶层模块调试总体分三步骤:
1电子琴输入控制模块调试
2乐曲存储循环播放模块调试:
(1)曲目1存储循环播放模块调试
(2)曲目2存储循环播放模块调试
(3)曲目3存储循环播放模块调试
3顶层模块调试
第二节 调试现象出现问题分析
问题:进行电子琴输入控制模块调试时编译正确成功载[2]实验箱DOREMEFASOLASI应键时蜂鸣器发出音调检查程序误猜想问题出实验箱检查音符应引脚发现键开关引脚拨动开关蜂鸣器发出音调开关均拨高电键蜂鸣器发出相应音调
问题二:进行乐曲存储循环播放模块调试时程序载实验箱曲目够动播放蜂鸣器发出音调音调刺耳发现时硬件蜂鸣器换蜂鸣器
问题三:调试数码电路时发现数码乱码观察数码编码引脚分配改编码
问题四:子模块顶层模块实例引中输入输出匹配反复确认顶层模块误曲目1播放猜想问题出曲目1子模块检查发现曲目1子模块中输入设置复位端口信号顶层模块调时没连接该端口信号曲目1子模块调没产生曲目1子模块中复位信号重新编译载够播放曲目1子模块
调试发现问题解决问题够实现基功发挥功
第五章 总结
设计利硬件描述语言Verilog HDL实现电子琴动演奏键盘输入发音简易功编程综合仿真载芯片烧制终做出成品通系统测试结果数分析计算测试结果符合预期结果测试情况良够基实现音阶发音功切换动演奏存储乐曲根需更改程序实现乐曲存储
课程设计培养综合运学知识发现提出分析解决实际问题锻炼实践力重环节学生实际工作力具体训练考察程着科学技术发展日新月异EDA技术已成计算机应中空前活跃领域生活中说处作二十世纪学生说掌握EDA技术十分重
第次接触课程设计开始窍通慢慢解历长时间回顾起次HDL课程设计感慨良确审题编程理实践三星期日子里受益匪浅仅巩固前学知识学书没学知识通次课程设计懂理实际相结合重理知识远远够学理知识实践相结合起理中出结解决实际中问题提高实际动手力独立思考力毕竟第次做课程设计难免会遇种样问题时设计程中发现足处前学知识理解够深刻掌握够牢固通次课程设计进步加深HDL解更加浓厚兴趣
复杂工程分成干基模块进行分步设计测试模块连接起实验基设计思想然测试时遇困难终实现感觉扩展方说播放乐曲时显示出音调加复位暂停快进等功
致谢
课程设计程中知识理解遇困难然设计存足处通学老师帮助问题步步解决课程设计程中学知识解HDL编程精深程断调试断实践断付出努力预期结果课程设计学老师支持深表感谢
参考文献
[1] 潘松黄继业EDA技术教程北京:科学出版社2002
[2] 王伟Verilog HDL程序设计应 北京:民邮电出版社2005
[3] 刘秋云王佳Verilog HDL设计实践指导北京:机械工业出版社2005
[4] 王金民 数字系统设计Verilog HDL(第二版) 北京:电子工业出版社2005
[5] 李国洪沈明山胡辉.编程器件EDA技术实践[M].北京:机械工业出版社2004年7月.
[6] 付家.EDA工程实践技术[M].北京:工业出版社2005年1月.
附 录
电子琴程序:
顶层模块
module yiranliang(inclkoutclkkey1key2key3key4key5key6key7key8key9shumaguan)
input inclk
input key1key2key3key4key5key6key7key8key9
output outclk
output [110] shumaguan
reg outclkclk_6M
reg [110] shumaguan
reg [30]c
wire out1out2out3out4
wire[80] key
reg [10]mm
wire [30]num
assign key {key1key2key3key4key5key6key7key8key9} 键拼键变量key
调子调块
digital_piano m1(inclk(inclk)key1(key1)key2(key2)key3(key3)key4(key4)
key5(key5)key6(key6)key7(key7)beep2(out2)num(num))
bell m2(inclk(inclk)beep1(out1))
bell2 m3(inclk(inclk)beep3(out3))
bell3 m4(inclk(inclk)beep4(out4))
always @(num)
begin
if(num3'd1)
shumaguan<{4'b11101'b1led7(1)}
else if(num4'd2)
shumaguan<{4'b11101'b1led7(2)}
else if(num4'd3)
shumaguan<{4'b11101'b1led7(3)}
else if(num4'd4)
shumaguan<{4'b11101'b1led7(4)}
else if(num4'd5)
shumaguan<{4'b11101'b1led7(5)}
else if(num4'd6)
shumaguan<{4'b11101'b1led7(6)}
else if(num4'd7)
shumaguan<{4'b11101'b1led7(7)}
end
always @(posedge clk_6M) 时钟升检测否键
begin
if(key 9'b111111110)
mm < 2'b01
else if(key9'b111111101)
mm < 2'b10
else if(key9'b111111100)
mm < 2'b11
else mm < 2'b00
end
always@(posedge inclk)
begin
if(c<4'd4)
c
begin
c<4'd0
clk_6M~clk_6M
end
end
always @(posedge clk_6M)
begin
if(mm 2'b01)
outclk < out1
else if(mm 2'b00)
outclk < out2
else if(mm 2'b10)
outclk < out3
else outclk < out4
end
*数码段码表*
function [60] led7
input [30] dis_input
begin
case (dis_input)
0 led7 ~7'b011_1111
1 led7 ~7'b000_0110
2 led7 ~7'b101_1011
3 led7 ~7'b100_1111
4 led7 ~7'b110_0110
5 led7 ~7'b110_1101
6 led7 ~7'b111_1101
7 led7 ~7'b000_0111
8 led7 ~7'b111_1111
9 led7 ~7'b110_0111
default led7 ~7'b111_1111
endcase
end
endfunction
endmodule
二输入控制模块
digital_piano子模块
module digital_piano(inclkkey1key2key3key4key5key6key7beep2num)
input inclkkey1key2key3key4key5key6key7
output[30]num
output beep2
wire [60] key_code
reg [30]c
reg clk_6M
reg beep_r
reg [30]num
reg [150] count
reg [150] count_end
parameter Do 7'b1111110 状态机7编码分应中音7音符
re 7'b1111101
mi 7'b1111011
fa 7'b1110111
so 7'b1101111
la 7'b1011111
si 7'b0111111
assign key_code {key7key6key5key4key3key2key1}
assign beep2 beep_r 输出音乐
always@(posedge inclk)
begin
if(c<4'd4)
c
begin
c<4'd0
clk_6M~clk_6M
end
end
always@(posedge clk_6M) 分频模块出乐谱
begin
count < count + 16'd1 计数器加1
if(count count_end)
begin
count <16'd0 计数器清零
beep_r < beep_r
end
end
always@(posedge clk_6M) 状态机根键状态选择音符输出
begin
case(key_code)
Do count_end < 16'd11450
re count_end < 16'd10204
mi count_end < 16'd09090
fa count_end < 16'd08571
so count_end < 16'd07802
la count_end < 16'd06802
si count_end < 16'd06060
defaultcount_end < 16'd0
endcase
end
always @ (posedge clk_6M)
begin
case(key_code)
Do num<4'b0001
re num<4'b0010
mi num<4'b0011
fa num<4'b0100
so num<4'b0101
la num<4'b0110
si num<4'b0111
endcase
end
endmodule
三曲目1乐谱存储循环播放模块
bell子模块 两老虎
module bell (inclkbeep1)
input inclk 系统时钟
output beep1 蜂鸣器输出端
reg [30]highmedlow
reg [150]origin
reg beep_r 寄存器
reg [70]state
reg [150]count
assign beep1beep_r 输出音乐
时钟频率6MHz
reg clk_6MHz
reg [20] cnt1
always@(posedge inclk)
begin
if(cnt1<3'd4)
cnt1
begin
cnt1<3'b0
clk_6MHz<~clk_6MHz
end
end
时钟频率4MHz
reg clk_4Hz
reg [240] cnt2
always@(posedge inclk)
begin
if(cnt2<25'd6250000)
cnt2
begin
cnt2<25'b0
clk_4Hz<~clk_4Hz
end
end
always @(posedge clk_6MHz)
begin
count < count + 1'b1 计数器加1
if(count origin)
begin
count < 16'h0 计数器清零
beep_r < beep_r 输出取反
end
end
always@(posedge clk_4Hz)
begin
case({highmedlow})
'b000000000101origin14447
'b000000000110origin13636
'b000000000111origin12149
'b000000010000origin11466
'b000000100000origin10216
'b000000110000origin9101
'b000001000000origin8590
'b000001010000origin7653
'b000001100000origin6818
'b000001110000origin6074
'b000100000000origin5733
'b001000000000origin5108
'b001100000000origin4551
endcase
end
always @(posedge clk_4Hz) 歌曲
begin
if(state 171) state 0计时实现循环演奏
else
state state + 1
case(state)
0 {highmedlow}'b0000000001015
1234 {highmedlow}'b0000001100003
5 {highmedlow}'b0000001000002
6 {highmedlow}'b0000000100001
78910111213141516 {highmedlow}'b0000001000002
17 {highmedlow}'b0000000100001
18 {highmedlow}'b0000000001106
192021222324252627 {highmedlow}'b0000000100001
28 {highmedlow}'b0000000001117
29 {highmedlow}'b0000000001106
303132333435363738 {highmedlow}'b0000000001117
39 {highmedlow}'b0000000001106
40 {highmedlow}'b0000000001015
4142434445 {highmedlow}'b0000000001106
46 {highmedlow}'b0000000001015
47484950 {highmedlow}'b0000001100003
51 {highmedlow}'b0000001000002
52 {highmedlow}'b0000000100001
53545556 {highmedlow}'b0000001000002
57 {highmedlow}'b0000000001015
58596061 {highmedlow}'b0000001000002
62 {highmedlow}'b0000000100001
63 {highmedlow}'b0000000001106
64656667 {highmedlow}'b0000000100001
68 {highmedlow}'b0000000001015
69707172 {highmedlow}'b0000000001117
73 {highmedlow}'b0000000001106
74 {highmedlow}'b0000000001015
757677787980 {highmedlow}'b0000000001117
8182 {highmedlow}'b0000000100001
83 {highmedlow}'b0000000001106
84 {highmedlow}'b0000001000002
85 {highmedlow}'b0000000100001
86 {highmedlow}'b0000001000002
878889909192939495 {highmedlow}'b0000001100003
969798 {highmedlow}'b0000001100003
99100101102 {highmedlow}'b0000011000006
103 {highmedlow}'b0000010100005
104 {highmedlow}'b0000011000006
105106107108109110 {highmedlow}'b0000001100003
111112113114 {highmedlow}'b0000010000004
115 {highmedlow}'b0000010100005
116 {highmedlow}'b0000011000006
117118119120121122 {highmedlow}'b0000001100003
123124125126 {highmedlow}'b0000001000002
127 {highmedlow}'b0000001100003
128 {highmedlow}'b0000010000004
129130 {highmedlow}'b0000001100003
131 {highmedlow}'b0000011000006
132 {highmedlow}'b0000001100003
133 {highmedlow}'b0000001000002
134 {highmedlow}'b0000000100001
135 {highmedlow}'b0000001000002
136 {highmedlow}'b0000000100001
137138 {highmedlow}'b0000000001117
139 {highmedlow}'b0000000001015
140 {highmedlow}'b0000010100005
141 {highmedlow}'b0000001000002
142 {highmedlow}'b0000010100005
143144145146147148 {highmedlow}'b0000001100003
149150151152 {highmedlow}'b0000011000006
153 {highmedlow}'b0000011100007
154 {highmedlow}'b0001000000001
155156157158159160 {highmedlow}'b0011000000003
161162163164 {highmedlow}'b0010000000002
165 {highmedlow}'b0000011100007
166 {highmedlow}'b0001000000001
167168169170171 {highmedlow}'b0000011000006
default {highmedlow}12'bx
endcase
end
三曲目 二乐谱存储循环播放模块
bell2子模块康定情歌
module bell2 (inclkbeep3)
input inclk 系统时钟
output beep3 蜂鸣器输出端
reg [30]highmedlow
reg [150]origin
reg beep_r 寄存器
reg [70]state
reg [150]count
assign beep3beep_r 输出音乐
时钟频率6MHz
reg clk_6MHz
reg [20] cnt1
always@(posedge inclk)
begin
if(cnt1<3'd4)
cnt1
begin
cnt1<3'b0
clk_6MHz<~clk_6MHz
end
end
时钟频率4MHz
reg clk_4Hz
reg [240] cnt2
always@(posedge inclk)
begin
if(cnt2<25'd6250000)
cnt2
begin
cnt2<25'b0
clk_4Hz<~clk_4Hz
end
end
always @(posedge clk_6MHz)
begin
count < count + 1'b1 计数器加1
if(count origin)
begin
count < 16'h0 计数器清零
beep_r < beep_r 输出取反
end
end
always@(posedge clk_4Hz)
begin
case({highmedlow})
'b000000000011origin<7281 低音3
'b000000000101origin<8730 低音5
'b000000000110origin<9565 低音6
'b000000000111origin<10310 低音7
'b000000010000origin<10647 中音1
'b000000100000origin<11272 中音2
'b000000110000origin<11831 中音3
'b000001010000origin<12556 中音5
'b000001100000origin<12974 中音6
'b000100000000origin<13516 高音1
'b000000000000origin<16383 休止符
endcase
end
always @(posedge clk_4Hz)
begin
if(state 151)
state 0
else
state state + 1 梁祝
case(state)
0 {highmedlow}<'b000000000011 低音3
1 {highmedlow}<'b000000000011 持续4时钟节拍
2 {highmedlow}<'b000000000011
3 {highmedlow}<'b000000000011
4 {highmedlow}<'b000000000101 低音5
5 {highmedlow}<'b000000000101 发3时钟节拍
6 {highmedlow}<'b000000000101
7 {highmedlow}<'b000000000110 低音6
8 {highmedlow}<'b000000010000 中音1
9 {highmedlow}<'b000000010000 发3时钟节拍
10 {highmedlow}<'b000000010000
11 {highmedlow}<'b000000100000 中音2
12 {highmedlow}<'b000000000110 低音6
13 {highmedlow}<'b000000010000 中音1
14 {highmedlow}<'b000000000101 低音5
15 {highmedlow}<'b000000000101
16 {highmedlow}<'b000001010000 中音5
17 {highmedlow}<'b000001010000 发3时钟节拍
18 {highmedlow}<'b000001010000
19 {highmedlow}<'b000100000000 高音1
20 {highmedlow}<'b000001100000 中音6
21 {highmedlow}<'b000001010000 中音5
22 {highmedlow}<'b000000110000 中音3
23 {highmedlow}<'b000001010000 中音5
24 {highmedlow}<'b000000100000 中音2
25 {highmedlow}<'b000000100000 持续11时钟节拍
26 {highmedlow}<'b000000100000
27 {highmedlow}<'b000000100000
28 {highmedlow}<'b000000100000
29 {highmedlow}<'b000000100000
30 {highmedlow}<'b000000100000
31 {highmedlow}<'b000000100000
32 {highmedlow}<'b000000100000
33 {highmedlow}<'b000000100000
34 {highmedlow}<'b000000100000
35 {highmedlow}<'b000000110000 中音3
36 {highmedlow}<'b000000000111 低音7
37 {highmedlow}<'b000000000111
38 {highmedlow}<'b000000000110 低音6
39 {highmedlow}<'b000000000110
40 {highmedlow}<'b000000000101 低音5
41 {highmedlow}<'b000000000101
42 {highmedlow}<'b000000000101
43 {highmedlow}<'b000000000110 低音6
44 {highmedlow}<'b000000010000 中音1
45 {highmedlow}<'b000000010000
46 {highmedlow}<'b000000100000 中音2
47 {highmedlow}<'b000000100000
48 {highmedlow}<'b000000000011 低音3
49 {highmedlow}<'b000000000011
50 {highmedlow}<'b000000010000 中音1
51 {highmedlow}<'b000000010000
52 {highmedlow}<'b000000000110 低音6
53 {highmedlow}<'b000000000101 低音5
54 {highmedlow}<'b000000000110 低音6
55 {highmedlow}<'b000000010000 中音1
56 {highmedlow}<'b000000000101 低音5
57 {highmedlow}<'b000000000101 持续8时钟节拍
58 {highmedlow}<'b000000000101
59 {highmedlow}<'b000000000101
60 {highmedlow}<'b000000000101
61 {highmedlow}<'b000000000101
62 {highmedlow}<'b000000000101
63 {highmedlow}<'b000000000101
64 {highmedlow}<'b000000110000 中音3
65 {highmedlow}<'b000000110000 发3时钟节拍
66 {highmedlow}<'b000000110000
67 {highmedlow}<'b000001010000 中音5
68 {highmedlow}<'b000000000111 低音7
69 {highmedlow}<'b000000000111
70 {highmedlow}<'b000000100000 中音2
71 {highmedlow}<'b000000100000
72 {highmedlow}<'b000000000110 低音6
73 {highmedlow}<'b000000010000 中音1
74 {highmedlow}<'b000000000101 低音5
75 {highmedlow}<'b000000000101 持续4时钟节拍
76 {highmedlow}<'b000000000101
77 {highmedlow}<'b000000000101
78 {highmedlow}<'b000000000000 休止符
79 {highmedlow}<'b000000000000
80 {highmedlow}<'b000000000011 低音3
81 {highmedlow}<'b000000000101 低音5
82 {highmedlow}<'b000000000101
83 {highmedlow}<'b000000000011 低音3
84 {highmedlow}<'b000000000101 低音5
85 {highmedlow}<'b000000000110 低音6
86 {highmedlow}<'b000000000111 低音7
87 {highmedlow}<'b000000100000 中音2
88 {highmedlow}<'b000000000110 低音6
89 {highmedlow}<'b000000000110 持续6时钟节拍
90 {highmedlow}<'b000000000110
91 {highmedlow}<'b000000000110
92 {highmedlow}<'b000000000110
93 {highmedlow}<'b000000000110
94 {highmedlow}<'b000000000101 低音5
95 {highmedlow}<'b000000000110 低音6
96 {highmedlow}<'b000000010000 中音1
97 {highmedlow}<'b000000010000 发3时钟节拍
98 {highmedlow}<'b000000010000
99 {highmedlow}<'b000000100000 中音2
100 {highmedlow}<'b000001010000 中音5
101 {highmedlow}<'b000001010000
102 {highmedlow}<'b000000110000 中音3
103 {highmedlow}<'b000000110000
104 {highmedlow}<'b000000100000 中音2
105 {highmedlow}<'b000000100000
106 {highmedlow}<'b000000110000 中音3
107 {highmedlow}<'b000000100000 中音2
108 {highmedlow}<'b000000010000 中音1
109 {highmedlow}<'b000000010000
110 {highmedlow}<'b000000000110 低音6
111 {highmedlow}<'b000000000101 低音5
112 {highmedlow}<'b000000000011 低音3
113 {highmedlow}<'b000000000011 持续4时钟节拍
114 {highmedlow}<'b000000000011
115 {highmedlow}<'b000000000011
116 {highmedlow}<'b000000010000 中音1
117 {highmedlow}<'b000000010000 持续4时钟节拍
118 {highmedlow}<'b000000010000
119 {highmedlow}<'b000000010000
120 {highmedlow}<'b000000000110 低音6
121 {highmedlow}<'b000000010000 中音1
122 {highmedlow}<'b000000000110 低音6
123 {highmedlow}<'b000000000101 低音5
124 {highmedlow}<'b000000000011 低音3
125 {highmedlow}<'b000000000101 低音5
126 {highmedlow}<'b000000000110 低音6
127 {highmedlow}<'b000000010000 中音1
128 {highmedlow}<'b000000000101 低音5
129 {highmedlow}<'b000000000101 持续6时钟节拍
130 {highmedlow}<'b000000000101
131 {highmedlow}<'b000000000101
132 {highmedlow}<'b000000000101
133 {highmedlow}<'b000000000101
134 {highmedlow}<'b000000110000 中音3
135 {highmedlow}<'b000001010000 中音5
136 {highmedlow}<'b000000100000 中音2
137 {highmedlow}<'b000000110000 中音3
138 {highmedlow}<'b000000100000 中音2
139 {highmedlow}<'b000000010000 中音1
140 {highmedlow}<'b000000000111 低音7
141 {highmedlow}<'b000000000111
142 {highmedlow}<'b000000000110 低音6
143 {highmedlow}<'b000000000110
144 {highmedlow}<'b000000000101 低音5
145 {highmedlow}<'b000000000101 持续8时钟节拍
146 {highmedlow}<'b000000000101
147 {highmedlow}<'b000000000101
148 {highmedlow}<'b000000000101
149 {highmedlow}<'b000000000101
150 {highmedlow}<'b000000000101
151 {highmedlow}<'b000000000101
endcase
end
endmodule
文档香网(httpswwwxiangdangnet)户传
《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
该内容是文档的文本内容,更好的格式请下载文档