Subversion Repositories pentevo

Rev

Rev 200 | Blame | Compare with Previous | Last modification | View Log | Download | RSS feed | ?url?

  1. // (c) 2010 NedoPC
  2. //
  3. // MUXes mouse and kbd data in two single databusses for zports
  4.  
  5. `include "../include/tune.v"
  6.  
  7. module zkbdmus(
  8.  
  9.         input  wire        fclk,
  10.         input  wire        rst_n,
  11.  
  12.  
  13.         input  wire [39:0] kbd_in,  // key bits
  14.         input  wire        kbd_stb, // and strobe
  15.  
  16.         input  wire [ 7:0] mus_in,
  17.         input  wire        mus_xstb,
  18.         input  wire        mus_ystb,
  19.         input  wire        mus_btnstb,
  20.         input  wire        kj_stb,
  21.  
  22.  
  23.         input  wire [7:0] zah,
  24.  
  25.         output wire [ 4:0] kbd_data,
  26.         output wire [ 7:0] mus_data,
  27.         output reg  [ 4:0] kj_data
  28. );
  29.  
  30.         reg [39:0] kbd;
  31.         reg [ 7:0] musx,musy,musbtn;
  32.  
  33.         wire [4:0] keys [0:7]; // key matrix
  34.  
  35.         reg [4:0] kout; // wire AND
  36.  
  37.  
  38. `ifdef SIMULATE
  39.         initial
  40.         begin
  41. //              force kbd_data = 5'b11111;
  42.                 force mus_data = 8'hFF;
  43.                 force kj_data  = 5'b00000;
  44.  
  45.                 kbd = 40'd0;
  46.         end
  47. `endif
  48.  
  49.  
  50.         // store data from slavespi
  51.         //
  52.     always @(posedge fclk)
  53.     begin
  54.                 if( kbd_stb )
  55.                         kbd <= kbd_in;
  56.  
  57.                 if( mus_xstb )
  58.                         musx <= mus_in;
  59.  
  60.                 if( mus_ystb )
  61.                         musy <= mus_in;
  62.  
  63.                 if( mus_btnstb )
  64.                         musbtn <= mus_in;
  65.  
  66.                 if( kj_stb )
  67.                         kj_data <= mus_in[4:0];
  68.     end
  69.  
  70.  
  71.         // make keys
  72.         //
  73.         assign keys[0]={kbd[00],kbd[08],kbd[16],kbd[24],kbd[32]};// v  c  x  z  CS
  74.         assign keys[1]={kbd[01],kbd[09],kbd[17],kbd[25],kbd[33]};// g  f  d  s  a
  75.         assign keys[2]={kbd[02],kbd[10],kbd[18],kbd[26],kbd[34]};// t  r  e  w  q
  76.         assign keys[3]={kbd[03],kbd[11],kbd[19],kbd[27],kbd[35]};// 5  4  3  2  1
  77.         assign keys[4]={kbd[04],kbd[12],kbd[20],kbd[28],kbd[36]};// 6  7  8  9  0
  78.         assign keys[5]={kbd[05],kbd[13],kbd[21],kbd[29],kbd[37]};// y  u  i  o  p
  79.         assign keys[6]={kbd[06],kbd[14],kbd[22],kbd[30],kbd[38]};// h  j  k  l  EN
  80.         assign keys[7]={kbd[07],kbd[15],kbd[23],kbd[31],kbd[39]};// b  n  m  SS SP
  81.         //
  82.         always @*
  83.         begin
  84.                 kout = 5'b11111;
  85.  
  86.                 kout = kout & ({5{zah[0]}} | (~keys[0]));
  87.                 kout = kout & ({5{zah[1]}} | (~keys[1]));
  88.                 kout = kout & ({5{zah[2]}} | (~keys[2]));
  89.                 kout = kout & ({5{zah[3]}} | (~keys[3]));
  90.                 kout = kout & ({5{zah[4]}} | (~keys[4]));
  91.                 kout = kout & ({5{zah[5]}} | (~keys[5]));
  92.                 kout = kout & ({5{zah[6]}} | (~keys[6]));
  93.                 kout = kout & ({5{zah[7]}} | (~keys[7]));
  94.         end
  95.         //
  96.         assign kbd_data = kout;
  97.  
  98.         // make mouse
  99.         // FADF - buttons, FBDF - x, FFDF - y
  100.         //
  101.         assign mus_data = zah[0] ? ( zah[2] ? musy : musx ) : musbtn;
  102.  
  103.  
  104.  
  105. endmodule
  106.  
  107.