Subversion Repositories pentevo

Rev

Rev 4 | Rev 67 | Go to most recent revision | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed

  1. `include "../include/tune.v"
  2.  
  3. module slavespi(
  4.  
  5.         input fclk,
  6.         input rst_n,
  7.  
  8.         input spics_n,
  9.         output reg spidi,
  10.         input spido,
  11.         input spick,
  12.  
  13.  
  14.         input [15:0] a,
  15.         output reg [4:0] keyout,
  16.  
  17.  
  18.         output genrst,
  19.         output reg [1:0] rstrom
  20. );
  21.  
  22.  
  23.         reg [7:0] reset_reg;
  24.  
  25.         always @(posedge spick, negedge spics_n)
  26.         begin
  27.                 if( !spics_n )
  28.                         reset_reg[7:0] <= 8'd0;
  29.                 else // posedge spick
  30.                         reset_reg[7:0] <= { spido, reset_reg[7:1] };
  31.         end
  32.  
  33.         always @(negedge spick)
  34.         begin
  35.                 if( genrst ) rstrom <= reset_reg[5:4];
  36.         end
  37.  
  38.         assign genrst = reset_reg[1];
  39.  
  40.  
  41.  
  42.         reg [39:0] kym;  //
  43.         wire [4:0] keys [0:7]; // key matrix
  44.         reg [4:0] keyreg [0:7];
  45.  
  46.         reg ksync1,ksync2,ksync3;
  47.  
  48.  
  49.         always @(posedge spick) if( ~spics_n )
  50.         begin
  51.                 kym[39:0] <= { spido, kym[39:1] };
  52.         end
  53.  
  54.         assign keys[0][4:0] = { kym[00],kym[08],kym[16],kym[24],kym[32] };
  55.         assign keys[1][4:0] = { kym[01],kym[09],kym[17],kym[25],kym[33] };
  56.         assign keys[2][4:0] = { kym[02],kym[10],kym[18],kym[26],kym[34] };
  57.         assign keys[3][4:0] = { kym[03],kym[11],kym[19],kym[27],kym[35] };
  58.         assign keys[4][4:0] = { kym[04],kym[12],kym[20],kym[28],kym[36] };
  59.         assign keys[5][4:0] = { kym[05],kym[13],kym[21],kym[29],kym[37] };
  60.         assign keys[6][4:0] = { kym[06],kym[14],kym[22],kym[30],kym[38] };
  61.         assign keys[7][4:0] = { kym[07],kym[15],kym[23],kym[31],kym[39] };
  62.  
  63.         always @(posedge fclk)
  64.         begin
  65.                 ksync1 <= spics_n;
  66.                 ksync2 <= ksync1;
  67.                 ksync3 <= ksync2;
  68.  
  69.                 if( ksync2 && (~ksync3) )
  70.                 begin
  71.                         keyreg[0] <= keys[0];
  72.                         keyreg[1] <= keys[1];
  73.                         keyreg[2] <= keys[2];
  74.                         keyreg[3] <= keys[3];
  75.                         keyreg[4] <= keys[4];
  76.                         keyreg[5] <= keys[5];
  77.                         keyreg[6] <= keys[6];
  78.                         keyreg[7] <= keys[7];
  79.                 end
  80.         end
  81.  
  82.  
  83.  
  84.         always @*
  85.         begin
  86.                 keyout = 5'b11111;
  87.  
  88.                 if( ~a[8] )
  89.                         keyout = keyout & (~keyreg[0]);
  90.  
  91.                 if( ~a[9] )
  92.                         keyout = keyout & (~keyreg[1]);
  93.  
  94.                 if( ~a[10] )
  95.                         keyout = keyout & (~keyreg[2]);
  96.  
  97.                 if( ~a[11] )
  98.                         keyout = keyout & (~keyreg[3]);
  99.  
  100.                 if( ~a[12] )
  101.                         keyout = keyout & (~keyreg[4]);
  102.  
  103.                 if( ~a[13] )
  104.                         keyout = keyout & (~keyreg[5]);
  105.  
  106.                 if( ~a[14] )
  107.                         keyout = keyout & (~keyreg[6]);
  108.  
  109.                 if( ~a[15] )
  110.                         keyout = keyout & (~keyreg[7]);
  111.         end
  112.  
  113.  
  114.  
  115.  
  116. endmodule
  117.  
  118.