VERILOG 键盘扫码,有几个warning很难解决

2019-07-15 21:43发布

使用PMOD键盘,扫描并且在七段数码管显示,综合正确,但是下载后结果不对,可能与几个warnings 有关系,但是我不懂如何消除 。求大神指导
module keyscan(clk,
                        rst_n,
                   keyscan,
              keyin,
              real_number);/////////////////////////////////////////////////////////////////////////////////
  input clk,rst_n;
  input[3:0] keyin;
  output[3:0] keyscan;
  output reg[4:0] real_number;
  reg[3:0] state;
  reg[3:0] four_state;
  reg anykeypress;
  reg[4:0] numberout,number_reg,number_reg1;//
  reg[3:0] scancode;
  reg[3:0] scan_state;

  assign keyscan = scancode;

always@(posedge clk or posedge rst_n)  // part 1 :  状态机,确定是哪一行数据
if(rst_n)
        begin
          scancode <= 4'b0000;
          scan_state <= 4'b0000;
        end
else
   if(anykeypress)  //  有健按下
         case(scan_state)
                4'b0000 : begin scancode <=4'b1110 ; scan_state <= 4'b0001 ; end   // 状态机 跳变
                4'b0001 : begin scancode <= {scancode[0],scancode[3:1]} ; end                // 状态依靠移位实现
        endcase
  else  /// initial state
        begin
                scancode<= 4'b0000;
                scan_state <= 4'b0000;
   end


always@(posedge clk )  // part 2 : 检测按键是否按下   
        if(!(&keyin))   //
                begin
                        anykeypress <=1;
                        four_state<= 4'b0000;   //
                end
        else  ///    fourstate 就是用来延时一下
                if(anykeypress)
                        case(four_state)
                        4'b0000 : begin anykeypress <= 1 ;four_state <= 4'b0001; end  //
                        4'b0001 : begin anykeypress <= 1 ;four_state <= 4'b0010; end
                        4'b0010 : begin anykeypress <= 1 ;four_state <= 4'b0100; end
                        4'b0100 : begin anykeypress <= 1 ;four_state <= 4'b1000; end
                        4'b1000 : begin anykeypress <= 0 ; end /// ?
                        default : anykeypress <= 0;
                        endcase
           else
                 four_state <= 4'b0000;
                 
always@(posedge clk)  //  利用扫描码和输出值确定按下的键盘值
        casex({scancode,keyin}) //x 代表无关项
                8'b0111_1110 : numberout <= 5'd0;
                8'b1011_1110 : numberout <= 5'd1;
                8'b1101_1110 : numberout <= 5'd2;
                8'b1110_1110 : numberout <= 5'd3;
               
                8'b0111_1101 : numberout <= 5'd4;
                8'b1011_1101 : numberout <= 5'd5;
                8'b1101_1101 : numberout <= 5'd6;
                8'b1110_1101 : numberout <= 5'd7;
               
                8'b0111_1011 : numberout <= 5'd8;
                8'b1011_1011 : numberout <= 5'd9;
                8'b1101_1011 : numberout <= 5'd10;
                8'b1110_1011 : numberout <= 5'd11;
               
                8'b0111_0111 : numberout <= 5'd12;
                8'b1011_0111 : numberout <= 5'd13;
                8'b1101_0111 : numberout <= 5'd14;
                8'b1110_0111 : numberout <= 5'd15;
                default:numberout <= 8; ///  mistakes ...
                endcase
               
               
always@(posedge clk or posedge rst_n)  //  part4 : 寄存数值
        if(rst_n)
                        number_reg <= 0;
        else
                   number_reg <= numberout;
       
always@(posedge clk or posedge rst_n)  ///  part5 :消除抖动
        if(rst_n)
                state<=4'b000;
        else
                case(state)  // 按键消除抖动 ,不记录按键时间低于15的按键值
                4'd0:begin
                                                number_reg1 <= number_reg;  
                                                state <= 4'd1 ;
                                end
                4'd1: begin
                                if(number_reg == number_reg1)
                                                                        state <= 4'd2;
                                                        else        
                                                                        state <= 4'd0;
                                   end
                4'd2 : begin
                                                if(number_reg == number_reg1)        
                                                            state <= 4'd3;
                                                        else
                                                                 state <= 4'd0;
                                   end
                4'd3 : begin
                                        if(number_reg == number_reg1)
                                                        state <= 4'd4;
                                        else                
                                                        state <= 4'd0;
                                        end
                4'd4 : begin
                                        if(number_reg == number_reg1)       
                                                        state <= 4'd5;
                                        else        
                                                        state <= 4'd0;
                                        end
                    4'd5 : begin
                                        if(number_reg == number_reg1)
                                    state <= 4'd6;
                                        else        
                                                        state <= 4'd0;
                         end
                 4'd6 : begin
                                        if(number_reg == number_reg1)  
                                                        state <= 4'd7;
                                        else        
                                                state <= 4'd0;
                                        end
                 4'd7 : begin
                                        if(number_reg == number_reg1)
                                                        state <= 4'd8;
                                        else        
                                                        state <= 4'd0;
                                        end
                 4'd8 : begin
                                        if(number_reg == number_reg1)
                                                        state <= 4'd9;
                                        else        
                                                        state <= 4'd0;
                                        end
                 4'd9 : begin        
                                if(number_reg == number_reg1)
                                                state <= 4'd10;
                                        else
                                                        state <= 4'd0;
                                        end
                 4'd10 : begin
                                        if(number_reg == number_reg1)  
                                                        state <= 4'd11;
                                        else        
                                                        state <= 4'd0;
                 end
                 4'd11 : begin        
                                if(number_reg == number_reg1)
                                                state <= 4'd12;
                                        else
                                                        state <= 4'd0;
                 end
                 4'd12 : begin
                                        if(number_reg == number_reg1)
                                                        state <= 4'd13;
                                        else        
                                                        state <= 4'd0;
                 end
                          4'd13 : begin
                                                if(number_reg == number_reg1)  
                                                                state <= 4'd14;
                                        else        
                                                        state <= 4'd0;
                 end
                          4'd14 : begin
                                                if(number_reg == number_reg1)
                                                                state <= 4'd15;
                                        else        
                                                           state <= 4'd0;
                                        end
                          4'd15:begin
                               if(number_reg == number_reg1)
                                        begin
                                        state <= 4'd0;
                                   real_number <= number_reg;// 数据传输
                                 end
                              else        
                                   state <= 4'b0000;
                       end
                default:  state <= 4'b0000;
                endcase
endmodule


warning:
WARNING:Xst:1710 - FF/Latch <numberout_4> (without init value) has a constant value of 0 in block <u2>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <number_reg_4> (without init value) has a constant value of 0 in block <u2>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <number_reg1_4> (without init value) has a constant value of 0 in block <u2>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:1895 - Due to other FF/Latch trimming, FF/Latch <real_number_4> (without init value) has a constant value of 0 in block <u2>. This FF/Latch will be trimmed during the optimization process.
WARNING:Xst:2404 -  FFs/Latches <numberout<4:4>> (without init value) have a constant value of 0 in block <keyscan>.     //// 为啥会是恒定0?  搞死人了
WARNING:Xst:2404 -  FFs/Latches <number_reg<4:4>> (without init value) have a constant value of 0 in block <keyscan>.
WARNING:Xst:2404 -  FFs/Latches <number_reg1<4:4>> (without init value) have a constant value of 0 in block <keyscan>.
WARNING:Xst:2404 -  FFs/Latches <real_number<4:4>> (without init value) have a constant value of 0 in block <keyscan>.


友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
2条回答
ilovecandcjia
1楼-- · 2019-07-15 22:12
 精彩回答 2  元偷偷看……
songqiaiwen
2楼-- · 2019-07-16 02:42
这个应该是没有设置初始值,后面用了并且赋值了的话就没问题。

一周热门 更多>