Details | Last modification | View Log | RSS feed
Rev | Author | Line No. | Line |
---|---|---|---|
1029 | chrv | 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 |