#Verilog FPGA实现乐曲演奏电路

FPGA实现乐曲演奏电路

音符对照表

音名频率(Hz)半周期(us)12MHz分频系数音名频率(Hz)半周期(us)12MHz分频系数音名频率(Hz)半周期(us)12MHz分频系数
低音1261.63191122932中音1523.2595611472高音11046.54785736
低音2293.66170320436中音2587.3385110212高音21174.664265112
低音3329.63151718204中音3659.257589096高音31318.513794548
低音4349.23143217184中音4698.467168592高音41396.913584296
低音5392127615312中音5783.996387656高音51567.983193828
低音6440113613632中音68805686816高音617602843408
低音7493.88101212144中音7987.775066072高音71975.532533036

原理图

乐曲演奏电路原理图

代码实现

module music(sel,clock_12MHz,clock_8Hz,speak);
input sel,clock_12MHz,clock_8Hz;
output speak;
reg [14:0]quti;//分频系数//0-32767
reg [4:0]mic;//当前音符//0-31
reg [7:0]music_mem;//指向音符的指针//256个音符

always @(posedge clock_8Hz)//4Hz
	clk_4Hz<=~clk_4Hz;
	
always @(posedge sel or negedge sel)//换歌的时候从头开始播放
	music_mem<=0;

always @(posedge clk_4Hz)//储存乐谱,输出乐谱
	begin
	if (sel)
		begin
		if(music_mem==total_long)//乐谱1的长度
		music_mem<=0;
		else
		music_mem<=music_mem+1;
		case(music_mem)//指向音节位置
		'd0:mic<='d1;//乐谱1
		'd1:mic<='d2;
		'd2:mic<='d3;
		'd3:mic<='d4;
		default:mic<=0;//stop
		endcase
		end
	else
		begin
		if(music_mem==total_long)//乐谱2的长度
		music_mem<=0;
		else
		music_mem<=music_mem+1;
		case(music_mem)//指向音节位置
		'd0:mic<='d1;//乐谱2
		'd1:mic<='d2;
		'd2:mic<='d3;
		'd3:mic<='d4;
		default:mic<=0;//stop
		endcase
		end
	end

always @(mic)//将1-7转换为频率
	begin 
	case(mic)
	'd0:quti<=0;
	'd1:quti<=22932;//低音
	'd2:quti<=20436;
	'd3:quti<=18024;
	'd4:quti<=17184;
	'd5:quti<=15312;
	'd6:quti<=13632;
	'd7:quti<=12144;
	'd8:quti<=11424;//中音
	'd9:quti<=10212;
	'd10:quti<=9096;
	'd11:quti<=8592;
	'd12:quti<=7656;
	'd13:quti<=6818;
	'd14:quti<=6072;
	'd15:quti<=5736;//高音
	'd16:quti<=5112;
	'd17:quti<=4548;
	'd18:quti<=4296;
	'd19:quti<=3828;
	'd20:quti<=3408;
	'd21:quti<=3036;
	default:quti<=0;
	endcase
	end

always @(clock_12MHz)//speak模块,输出一定频率(quti)的声音
	begin 
	if(count==quti)
		begin
		count<=0;
		speak<=~speak;
		end
	else
		begin
		count<=count+1;
		end
	end

endmodule
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值