⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 keyboard.v

📁 FPGA设计初级班和提高班培训课堂PPT;实验的源代码;实验指导书!
💻 V
字号:
//16个按键代表1---F,按下按键可以在7段数码管上显示相应数字
module keyboard(
       code      ,
       col       ,
       valid     ,
       row       ,
       sys_clk       ,
       rst       ,
	   led_7s
                );
 output  [3:0]  code    ;
 output         valid   ;
 output  [3:0]  col     ;
 output  [11:0] led_7s  ;
 
 input   [3:0]  row     ;
 input          sys_clk,rst ;
 
 reg     [3:0]  col,code;
 reg     [5:0]  state,next_state;
 reg	 [11:0] led_7s;
 
 parameter  S_0 = 6'b000001,
            S_1 = 6'b000010,
            S_2 = 6'b000100,
            S_3 = 6'b001000,
            S_4 = 6'b010000,
            S_5 = 6'b100000;
 reg       S_row ; 
 reg [3:0] count,row_reg,col_reg;
 reg       clk2,clk4;
 
 
 reg [24:0] Mega_cnt;
 wire       clk;
/**************************************/
always @(posedge sys_clk or negedge rst)
begin
if(!rst)
  begin
  Mega_cnt<=0;
  end
else
  begin
  Mega_cnt<=Mega_cnt+1;
  end
end

assign clk = Mega_cnt[4];
/**************************************/ 
 
 always @ (posedge clk)
 clk2 <= ~clk2;
 
 always @ (posedge clk2)
 clk4 <= ~clk4;
           
 always @ (posedge clk4 or negedge rst)
 if(!rst)
     begin
         count <= 0;
         S_row <= 0;
     end
 else
     begin
         if(!(row[0]&row[1]&row[2]&row[3]))
             begin
                 if(count < 'd4)
                     count <= count +1 ;
                 else
                     S_row <= 1;
             end
         else if(state[5]||state[0])
            begin
                count <= 0;
                S_row <= 0;
            end
     end
     
 assign valid = ((state == S_1)||(state == S_2)||(state == S_3)||(state == S_4)) &&  (!(row[3]&row[2]&row[1]&row[0])) ;
 
 always @ (negedge clk)
 if(valid)
     begin
        row_reg <= row ;
        col_reg <= col ;
     end
  else
     begin
        row_reg <= row_reg ;
        col_reg <= col_reg ;
     end
     
 always @ (row_reg or col_reg or clk)
     case({row_reg,col_reg})
        8'b1110_1110: code = 4 ;
        8'b1110_1101: code = 3 ;
        8'b1110_1011: code = 2 ;
        8'b1110_0111: code = 1 ;
        
        8'b1101_1110: code = 8 ;
        8'b1101_1101: code = 7 ;
        8'b1101_1011: code = 6 ;
        8'b1101_0111: code = 5 ;
        
        8'b1011_1110: code = 12 ;
        8'b1011_1101: code = 11 ;
        8'b1011_1011: code = 10;
        8'b1011_0111: code = 9;
        
        8'b0111_1110: code = 0;
        8'b0111_1101: code = 15;
        8'b0111_1011: code = 14;
        8'b0111_0111: code = 13;              
    endcase
 
 always @ (posedge clk4 or negedge rst)
 if(!rst)
      state <= S_0 ;
 else
      state <= next_state ;
    
 always @ ( state or row or S_row)
 begin
   //  next_state = state ; 
     col =0;
     case(state)
        S_0 :  begin
                   col = 4'b0000;
                   if(S_row)
                       next_state = S_1;
                   else
                       next_state = S_0;
               end
        S_1 :  begin
                   col = 4'b1110;
                   if(row!='hf)
                       next_state = S_5;
                   else
                       next_state = S_2;
               end
        S_2 :  begin
                   col = 4'b1101;
                   if(row!='hf)
                       next_state = S_5;
                   else
                       next_state = S_3;
               end 
        S_3 :  begin
                   col = 4'b1011;
                   if(row!='hf)
                       next_state = S_5;
                   else
                       next_state = S_4;
               end  
        S_4 :  begin
                   col = 4'b0111;
                   if(row!='hf)
                       next_state = S_5;
                   else
                       next_state = S_0;
               end  
        S_5 :  begin
                   col = 4'b0000;
                   if(row == 4'b1111) 
                       next_state = S_0;
                   else 
                       next_state = S_5;
               end
        default: next_state = S_0;
  endcase
  end

always @ (code)
begin
	case(code)
    4'd0 : led_7s = 12'b1111_1100_1111;
    4'd1 : led_7s = 12'b0110_0000_1111;
    4'd2 : led_7s = 12'b1101_1010_1111;
    4'd3 : led_7s = 12'b1111_0010_1111;
    4'd4 : led_7s = 12'b0110_0110_1111;
    4'd5 : led_7s = 12'b1011_0110_1111;
    4'd6 : led_7s = 12'b1011_1110_1111;
    4'd7 : led_7s = 12'b1110_0000_1111;
    4'd8 : led_7s = 12'b1111_1110_1111;
    4'd9 : led_7s = 12'b1111_0110_1111;
    4'd10: led_7s = 12'b1110_1110_1111;
    4'd11: led_7s = 12'b0011_1110_1111;
    4'd12: led_7s = 12'b1001_1100_1111;
    4'd13: led_7s = 12'b0111_1010_1111;
    4'd14: led_7s = 12'b1001_1110_1111;
    4'd15: led_7s = 12'b1000_1110_1111;	
	endcase
end
endmodule

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -