Subversion Repositories pentevo

Rev

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