最近老师布置了一个课程设计,用FPGA实现一个音乐点唱机。将3首乐谱存放在rom中,然后通过按键切歌。具体要求如下:
1。复位时蜂鸣器不播放音乐
2。按下第1按键时播放第一首音乐,播放过程中按下第2个按键时就播放第二首音乐,按下第3个按键就立即播放第三首音乐。
但是设计中出现了一个小问题,如何在按下按键时立即就播放所对应的歌曲。比如在复位后我按下第二个按键,总是从第一首音乐开始播放,完了以后才播放第二首,才一直循环。我想直接就播放第二首,怎样才能修改我想要的啊????
消抖代码采用的是特权同学的
主要代码如下:
always @ (posedge clk_10m or negedge rst_n) begin
if(~rst_n)
cnt_r <= 8'dz;
else
case(key_pluse)
3'b100 : begin cnt_r <= 8'd0; end //当第一个按键按下时cnt_r为0,从rom地址为0开始读数据
3'b010 : begin cnt_r <= 8'd64; end //当第二个按键按下时cnt_r为64,从rom地址为64开始读数据
3'b001 : begin cnt_r <= 8'd128;end //当第三个按键按下时cnt_r为128,从rom地址为128开始读数据
endcase
end
always @ (posedge clk_4 or negedge rst_n) begin
if(~rst_n)
rom_addr <= 8'bz;
else
if(rom_addr == (cnt_r + 64)) //每首歌只存rom中的64个地址
rom_addr <= cnt_r;
else
rom_addr <= rom_addr + 1'b1;
end
//其中clk_10m为10MHz,clk_4为4Hz
//如何在上面的代码基础上进行修改啊???? 给我个思路啊~~ 跪谢了
此帖出自
小平头技术问答
一周热门 更多>