2841|5

4

帖子

0

TA的资源

一粒金砂(初级)

楼主
 

愿大神助攻 [复制链接]

我最近在做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                 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
此帖出自FPGA/CPLD论坛

最新回复

看的我一口老血吐了出来,这样的代码 老板直接炒鱿鱼 按键模块主要用了上升沿检测和下降沿检测,比较常见,没问题。但是整体代码问题很大。 逻辑不够清晰,模块不够分明。 部分模块的端口定义有错误。wire [3:0]signal?这是什么鬼?例化少了rst_n。led?又是什么鬼? 代码风格不统一,我仿佛看见不同的人的程序强行拼在一起。 大兄弟,个人意见,别往心里去哈  ,祝代码早日调试成功  详情 回复 发表于 2017-5-19 14:24
点赞 关注
 

回复
举报

128

帖子

1

TA的资源

一粒金砂(中级)

沙发
 
复用按键? 按键次数给cmd?你这个是后面的控制程序了吧,不是按键模块。你把相关模块传上来,如果有的不方便传的,应该注释一下作用,不然别人都不知道有些变量的作用
此帖出自FPGA/CPLD论坛
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

板凳
 
低调的路人 发表于 2017-5-18 11:14
复用按键? 按键次数给cmd?你这个是后面的控制程序了吧,不是按键模块。你把相关模块传上来,如果有的不方 ...

好得
此帖出自FPGA/CPLD论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

4
 
这是另外两个模块。
//////////////////////////////////////////////////////////////////////////////////
// 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;
        end
end
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};end
end
wire 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;end
end
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];
      end
end
always @(posedge clk )
begin
    if (!rst_n) begin key_value[1] <= 1'b1;end
         else begin key_value[1] <= key_value[0];end
end         
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;end
end
endmodule

此帖出自FPGA/CPLD论坛
 
 
 

回复

128

帖子

1

TA的资源

一粒金砂(中级)

5
 
看的我一口老血吐了出来,这样的代码 老板直接炒鱿鱼
按键模块主要用了上升沿检测和下降沿检测,比较常见,没问题。但是整体代码问题很大。

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

大兄弟,个人意见,别往心里去哈  ,祝代码早日调试成功
此帖出自FPGA/CPLD论坛
 
 
 

回复

4

帖子

0

TA的资源

一粒金砂(初级)

6
 
低调的路人 发表于 2017-5-19 14:24
看的我一口老血吐了出来,这样的代码 老板直接炒鱿鱼
按键模块主要用了上升沿检测和下降沿检测,比较常 ...

确实是两个程序并在一起的,我看不太懂呢,按键的太迷离了
此帖出自FPGA/CPLD论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/10 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表