打印

想请教高手们,我是超级菜鸟,不知道显示为什么加1是乱加的

[复制链接]
1060|3
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
上官紫虞|  楼主 | 2014-4-10 13:28 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
这按键部分有错误码?
module key(clk_k,reset,key_mode,key_freq,key_out_mode,key_out_amp,key_amp,key_out_freq,key_ok);
input reset;
input clk_k;
input key_mode,key_freq,key_amp,key_ok;
output reg [1:0] key_out_mode;
output reg [7:0] key_out_freq;
output reg [3:0] key_out_amp;

reg key_new_ok;

reg key_flag_mode1;                            //按键去抖动标志位
reg key_flag_old_mode1;                        //前一拍为0,后一拍为1上升沿触发按键功能选择
reg [1:0] key_flag_ctrl_mode1;                 //MOD标志位
reg [3:0] key_shift_mode1;                     //移位寄存器,用于按键区抖动

reg key_flag_mode2;                            //按键去抖动标志位
reg key_flag_old_mode2;                        //前一拍为0,后一拍为1上升沿触发按键功能选择
reg [7:0] key_flag_ctrl_mode2;                 //MOD标志位
reg [9:0] key_shift_mode2;                     //移位寄存器,用于按键区抖动

reg key_flag_mode3;                            //按键去抖动标志位
reg key_flag_old_mode3;                        //前一拍为0,后一拍为1上升沿触发按键功能选择
reg [3:0] key_flag_ctrl_mode3;                 //MOD标志位
reg [5:0] key_shift_mode3;                     //移位寄存器,用于按键区抖动

reg key_flag_mode4;                            //按键去抖动标志位
reg key_flag_old_mode4;                        //前一拍为0,后一拍为1上升沿触发按键功能选择
reg key_flag_ctrl_mode4;                       //MOD标志位
reg [1:0] key_shift_mode4;                     //移位寄存器,用于按键区抖动



always @ (posedge clk_k or negedge reset)
begin
        if(!reset)
                begin
                        key_flag_mode1<= 1;
                        key_shift_mode1<= 3'b111;
                        key_flag_old_mode1<= 1;
                        key_flag_ctrl_mode1<= 0;     
                end
        else
                begin
                        key_shift_mode1 <= {key_shift_mode1[2:0],key_mode};
                        key_flag_mode1 <= &key_shift_mode1;
                        key_flag_old_mode1<= key_flag_mode1;
                        if(key_flag_old_mode1 == 0 && key_flag_mode1 == 1)
                                key_flag_ctrl_mode1 <= key_flag_ctrl_mode1 + 1'b1;
                        if(key_flag_ctrl_mode4)
                                key_out_mode<=key_flag_ctrl_mode1;
                end               
end

always @ (posedge clk_k or negedge reset)
begin
        if(!reset)
                begin
                        key_flag_mode2<= 1;
                        key_shift_mode2<= 9'b111111111;
                        key_flag_old_mode2<= 1;
                        key_flag_ctrl_mode2<= 0;     
                end
        else
                begin
                        key_shift_mode2 <= {key_shift_mode2[8:0],key_freq};
                        key_flag_mode2 <= &key_shift_mode2;
                        key_flag_old_mode2<= key_flag_mode2;
                        if(key_flag_old_mode2== 0 && key_flag_mode2 == 1)
                       
                           begin
                                        if(key_flag_ctrl_mode2[3:0]==9)
                                                begin
                                            key_flag_ctrl_mode2[3:0]<=0;
                                            key_flag_ctrl_mode2[7:4]<=key_flag_ctrl_mode2[7:4]+ 1'b1;
                                            end
                                         else
                                                key_flag_ctrl_mode2[3:0]<= key_flag_ctrl_mode2[3:0] + 1'b1;
                            end                    
                            
                        if(key_flag_ctrl_mode4)
                                begin
                                key_out_freq[3:0]<=key_flag_ctrl_mode2[3:0];
                                key_out_freq[7:4]<=key_flag_ctrl_mode2[7:4];
                                end
                end               
end

always @ (posedge clk_k or negedge reset)
begin
        if(!reset)
                begin
                        key_flag_mode3<= 1;
                        key_shift_mode3<= 5'b11111;
                        key_flag_old_mode3<= 1;
                        key_flag_ctrl_mode3<= 0;     
                end
        else
                begin
                        key_shift_mode3 <= {key_shift_mode3[4:0],key_amp};
                        key_flag_mode3 <= &key_shift_mode3;
                        key_flag_old_mode3<= key_flag_mode3;
                        if(key_flag_old_mode3== 0 && key_flag_mode3 == 1)
                       
                                begin
                                if(key_flag_ctrl_mode3==9)
                                key_flag_ctrl_mode3<=0;
                                else
                                key_flag_ctrl_mode3<= key_flag_ctrl_mode3 + 1'b1;
                                end                       
                end
                key_out_amp<=key_flag_ctrl_mode3;
end


always @ (posedge clk_k or negedge reset)
begin
        if(!reset)
                begin
                        key_flag_mode4<= 1;
                        key_shift_mode4<=2'b11;
                        key_flag_old_mode4<= 1;
                        key_flag_ctrl_mode4<= 0;     
                end
        else
                begin
                        key_shift_mode4 <= {key_shift_mode4,key_ok};
                        key_flag_mode4 <= &key_shift_mode4;
                        key_flag_old_mode4<= key_flag_mode4;
                        if(key_flag_old_mode4 == 0 && key_flag_mode4 == 1)
                                begin
                                 key_flag_ctrl_mode4<=1;
                                end
                end
end

endmodule     

相关帖子

沙发
gaochy1126| | 2014-4-13 15:58 | 只看该作者
你直接使用数组读取

使用特权

评论回复
板凳
gaochy1126| | 2014-4-13 15:58 | 只看该作者
这样写不是很麻烦么?

使用特权

评论回复
地板
上官紫虞|  楼主 | 2014-4-18 08:40 | 只看该作者
gaochy1126 发表于 2014-4-13 15:58
这样写不是很麻烦么?

我也觉得很麻烦,但是现在解决了,是时钟的问题,谢谢啦

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

13

主题

79

帖子

0

粉丝