FPGA课程设计中的一个小问题,大家帮忙看一下。。。

2019-03-25 07:59发布

最近老师布置了一个课程设计,用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
//如何在上面的代码基础上进行修改啊????  给我个思路啊~~  跪谢了
此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
1条回答
EETUX
1楼-- · 2019-03-25 10:42
< / case(key_pluse)里也要把rom_addr设置好, 否则 rom_addr <= rom_addr + 1'b1,直到放完

一周热门 更多>