微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > FPGA和CPLD > 明德扬至简设计法--分享一份实现矩阵键盘的verilog代码 可直接使用

明德扬至简设计法--分享一份实现矩阵键盘的verilog代码 可直接使用

时间:02-21 来源:互联网 点击:


  1.                      else begin
  2.                          state_n = state_c;
  3.                      end
  4.                  end
  5.         FIN: begin
  6.                      if(fin2col_start)begin
  7.                          state_n = COL;
  8.                      end
  9.                      else begin
  10.                          state_n = state_c;
  11.                      end
  12.                   end
  13.        default: state_n = COL;
  14.     endcase
  15. end

  16. assign  col2row_start = state_c==COL && end_shake_cnt;
  17. assign  row2dly_start = state_c==ROW && end_row_index;
  18. assign  dly2fin_start = state_c==DLY && end_row_index;
  19. assign  fin2col_start = state_c==FIN && key_col_ff1==4'hf;





  20. always  @(posedge clk or negedge rst_n)begin
  21.     if(rst_n==1'b0)begin
  22.         key_row <= 4'b0;
  23.     end
  24.     else if(state_c==ROW)begin
  25.         key_row <= ~(1'b1 << row_index);
  26.     end
  27.     else begin
  28.         key_row <= 4'b0;
  29.     end
  30. end


  31. always  @(posedge clk or negedge rst_n)begin
  32.     if(rst_n==1'b0)begin
  33.         row_cnt <= 0;
  34.     end
  35.     else if(add_row_cnt) begin
  36.         if(end_row_cnt)
  37.             row_cnt <= 0;
  38.         else
  39.             row_cnt <= row_cnt + 1;
  40.     end
  41. end
  42. assign add_row_cnt = state_c==ROW || state_c==DLY;
  43. assign end_row_cnt = add_row_cnt && row_cnt==COL_CNT-1;


  44. always  @(posedge clk or negedge rst_n)begin
  45.     if(rst_n==1'b0)begin
  46.         row_index <= 0;
  47.     end
  48.     else if(add_row_index) begin
  49.         if(end_row_index)
  50.             row_index <= 0;
  51.         else
  52.             row_index <= row_index + 1;
  53.     end
  54. end
  55. assign add_row_index = end_row_cnt;
  56. assign end_row_index = add_row_index && row_index==x-1;
  57. always  @(*)begin
  58.     if(state_c==ROW)
  59.         x = 4;
  60.     else
  61.         x = 1;
  62. end


  63. always  @(posedge clk or negedge rst_n)begin
  64.     if(rst_n==1'b0)begin
  65.         key_col_get <= 0;
  66.     end
  67.     else if(col2row_start) begin
  68.         if(key_col_ff1==4'b1110)
  69.             key_col_get <= 0;
  70.         els

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top