愿大神助攻

2019-03-25 07:26发布

我最近在做SD卡音乐播放器,想做一个按键模块,实现播放、暂停,上下曲切换,这个程序好像无法控制,大神帮忙看下程序。
//部分控制程序
reg [10:0]cnt=0;
reg pause=0;
reg back=0;
reg next=0;
reg [32:0]temp=0;

always@(posedge en)
begin
        case (cmd)
                2'b00: begin pause<=0; next<=0;back<=0;end
                2'b01: begin pause<=1; next<=0;back<=0;end
                2'b10: begin back<=1; end
                2'b11: begin next<=1; end
                endcase
end

                       
//SD卡的sec地址处理程序

always @(posedge SD_clk )
begin
        if(counter==10'd1022)  
           read_sec<=SADDR;
        else if(data_come)
        begin
                if(read_sec<OADDR)
                begin
                        if(!pause)
                        begin
                                read_sec<=read_sec+1'b1;       //SD卡sec地址加1
                        end
                       
                        if(back)
                        begin
                                read_sec<=add_pre;
                        end
                       
                        if(next)
                        begin
                                read_sec<=add_nxt;
                        end
                       
                        if(cnt==64)
                        begin
                                add_nxt<={temp[7:0],temp[15:8],temp[23:16],temp[31:24]}+add_now;
                        end
                        else
                        begin
                                cnt<=cnt+1;
                                temp[31:1]<=temp[30:0];
                                temp[0]<=SD_dataout;
                        end
                       
                        if(read_sec==add_nxt)
                        begin
                                cnt<=0;
                                add_pre<=add_now;
                                add_now<=add_nxt;
                        end
                end
                else
                   read_sec<=SADDR;
        end
end 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
5条回答
低调的路人
1楼-- · 2019-03-25 12:43
< / 复用按键? 按键次数给cmd?你这个是后面的控制程序了吧,不是按键模块。你把相关模块传上来,如果有的不方便传的,应该注释一下作用,不然别人都不知道有些变量的作用
拨开云雾
2楼-- · 2019-03-25 15:58
低调的路人 发表于 2017-5-18 11:14
复用按键? 按键次数给cmd?你这个是后面的控制程序了吧,不是按键模块。你把相关模块传上来,如果有的不方 ...

好得
拨开云雾
3楼-- · 2019-03-25 19:59
这是另外两个模块。//////////////////////////////////////////////////////////////////////////////////// Module Name:    key_conmand //////////////////////////////////////////////////////////////////////////////////module key_conmand(               input [3:0]button,                                   input clk,                                   output reg [1:0]cmd,                                   output reg en=0    );reg [3:0]signal_temp=0;wire [3:0]signal; always@(posedge clk)begin        if(signal!=signal_temp)        begin                case (signal[3:0])                        4'b0001: begin cmd[1:0]<=0; end  //四种,暂停播放,上下曲                        4'b0010: begin cmd[1:0]<=1; end                        4'b0100: begin cmd[1:0]<=2; end                        4'b1000: begin cmd[1:0]<=3; end                        default: begin cmd[1:0]<=0; end                endcase                en<=1;                        end        else        begin                 en<=0;        endend key_check play(                    .clk(clk),                        .key(button[0]),                        .led(signal[0])                    );                        key_check stop(                    .clk(clk),                        .key(button[1]),                        .led(signal[1])                    ); key_check back(                    .clk(clk),                        .key(button[2]),                        .led(signal[2])                    ); key_check next(                    .clk(clk),                        .key(button[3]),                        .led(signal[3])                    );        endmodule////////////////////////////////////////////////////////////////////////////////// // Module Name:    key_check //////////////////////////////////////////////////////////////////////////////////module key_check(                 input clk        ,                 input rst_n,                 input key,                          output reg led    );//-------------------------------------reg[3:0] keyr;   always @(posedge clk )begin    if (!rst_n) begin keyr <= 4'b1111;end    else begin keyr <= {keyr[2:0],key};endendwire key_pos = keyr[2] & ~keyr[3];wire key_neg = ~keyr[2] & keyr[3]; //-------------------------------------reg[19:0]  cnt;        always @ (posedge clk )begin   if (!rst_n) begin cnt <= 20'd0;end                else if(key_pos || key_neg) begin cnt <=20'd0;end        else if(cnt < 20'd999_999) begin cnt <= cnt + 1'b1;end        else begin cnt <= 20'd0;endend reg[1:0] key_value; always @(posedge clk )begin    if (!rst_n) begin key_value[0] <= 1'b1;end         else if(cnt == 20'd999_999)      begin                key_value[0] <= keyr[3];      endendalways @(posedge clk )begin    if (!rst_n) begin key_value[1] <= 1'b1;end         else begin key_value[1] <= key_value[0];endend         wire led_ctrl = ~key_value[0] & key_value[1];        //-------------------------------------always @ (posedge clk )begin    if (!rst_n)  begin led <= 1'b0;end    else if(led_ctrl) begin led <= ~led;endendendmodule
低调的路人
4楼-- · 2019-03-25 23:01
看的我一口老血吐了出来,这样的代码 老板直接炒鱿鱼
按键模块主要用了上升沿检测和下降沿检测,比较常见,没问题。但是整体代码问题很大。

逻辑不够清晰,模块不够分明。
部分模块的端口定义有错误。wire [3:0]signal?这是什么鬼?例化少了rst_n。led?又是什么鬼?
代码风格不统一,我仿佛看见不同的人的程序强行拼在一起。

大兄弟,个人意见,别往心里去哈  ,祝代码早日调试成功
拨开云雾
5楼-- · 2019-03-26 00:56
 精彩回答 2  元偷偷看……

一周热门 更多>