Subversion Repositories pentevo

Rev

Blame | 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. module zkbdmus(
  6.  
  7.         input  wire        fclk,
  8.         input  wire        rst_n,
  9.  
  10.  
  11.         input  wire [39:0] kbd_in,  // key bits
  12.         input  wire        kbd_stb, // and strobe
  13.  
  14.         input  wire [ 7:0] mus_in,
  15.         input  wire        mus_xstb,
  16.         input  wire        mus_ystb,
  17.         input  wire        mus_btnstb,
  18.         input  wire        kj_stb,
  19.  
  20.  
  21.         input  wire [7:0] zah,
  22.  
  23.         output wire [ 4:0] kbd_data,
  24.         output wire [ 7:0] mus_data,
  25.         output reg  [ 4:0] kj_data
  26. );
  27.  
  28.         reg [39:0] kbd;
  29.         reg [ 7:0] musx,musy,musbtn;
  30.  
  31.         wire [4:0] keys [0:7]; // key matrix
  32.  
  33.         reg [4:0] kout; // wire AND
  34.  
  35.  
  36.  
  37.         // store data from slavespi
  38.         //
  39.     always @(posedge fclk)
  40.     begin
  41.                 if( kbd_stb )
  42.                         kbd <= kbd_in;
  43.  
  44.                 if( mus_xstb )
  45.                         musx <= mus_in;
  46.  
  47.                 if( mus_ystb )
  48.                         musy <= mus_in;
  49.  
  50.                 if( mus_btnstb )
  51.                         musbtn <= mus_in;
  52.  
  53.                 if( kj_stb )
  54.                         kj_data <= mus_in[4:0];
  55.     end
  56.  
  57.  
  58.         // make keys
  59.         //
  60.         assign keys[0][4:0] = { kbd[00],kbd[08],kbd[16],kbd[24],kbd[32] };
  61.         assign keys[1][4:0] = { kbd[01],kbd[09],kbd[17],kbd[25],kbd[33] };
  62.         assign keys[2][4:0] = { kbd[02],kbd[10],kbd[18],kbd[26],kbd[34] };
  63.         assign keys[3][4:0] = { kbd[03],kbd[11],kbd[19],kbd[27],kbd[35] };
  64.         assign keys[4][4:0] = { kbd[04],kbd[12],kbd[20],kbd[28],kbd[36] };
  65.         assign keys[5][4:0] = { kbd[05],kbd[13],kbd[21],kbd[29],kbd[37] };
  66.         assign keys[6][4:0] = { kbd[06],kbd[14],kbd[22],kbd[30],kbd[38] };
  67.         assign keys[7][4:0] = { kbd[07],kbd[15],kbd[23],kbd[31],kbd[39] };
  68.         //
  69.         always @*
  70.         begin
  71.                 kout = 5'b11111;
  72.  
  73.                 kout = kout & ({5{zah[0]}} | (~keys[0]));
  74.                 kout = kout & ({5{zah[1]}} | (~keys[1]));
  75.                 kout = kout & ({5{zah[2]}} | (~keys[2]));
  76.                 kout = kout & ({5{zah[3]}} | (~keys[3]));
  77.                 kout = kout & ({5{zah[4]}} | (~keys[4]));
  78.                 kout = kout & ({5{zah[5]}} | (~keys[5]));
  79.                 kout = kout & ({5{zah[6]}} | (~keys[6]));
  80.                 kout = kout & ({5{zah[7]}} | (~keys[7]));
  81.         end
  82.         //
  83.         assign kbd_data = kout;
  84.  
  85.         // make mouse
  86.         // FADF - buttons, FBDF - x, FFDF - y
  87.         //
  88.         assign mus_data = zah[0] ? ( zah[2] ? musy : musx ) : musbtn;
  89.  
  90.  
  91.  
  92. endmodule
  93.  
  94.