OpenCores
URL https://opencores.org/ocsvn/eco32/eco32/trunk

Subversion Repositories eco32

[/] [eco32/] [trunk/] [fpga/] [mc/] [src/] [kbd/] [kbd.v] - Blame information for rev 290

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 116 hellwig
//
2 290 hellwig
// kbd.v -- PS/2 keyboard interface
3 116 hellwig
//
4
 
5
 
6 290 hellwig
`timescale 1ns/10ps
7
`default_nettype none
8
 
9
 
10
module kbd(clk, rst,
11
           stb, we, addr,
12 27 hellwig
           data_in, data_out,
13 290 hellwig
           ack, irq,
14 116 hellwig
           ps2_clk, ps2_data);
15
    // internal interface
16 27 hellwig
    input clk;
17 290 hellwig
    input rst;
18
    input stb;
19
    input we;
20 67 hellwig
    input addr;
21 27 hellwig
    input [7:0] data_in;
22
    output [7:0] data_out;
23 290 hellwig
    output ack;
24 27 hellwig
    output irq;
25 116 hellwig
    // external interface
26
    input ps2_clk;
27
    input ps2_data;
28 27 hellwig
 
29
  wire [7:0] keyboard_data;
30
  wire keyboard_rdy;
31
  reg [7:0] data;
32
  reg rdy;
33
  reg ien;
34 116 hellwig
  reg [7:2] other_bits;
35 27 hellwig
 
36 290 hellwig
  keyboard keyboard_1(
37 27 hellwig
    .ps2_clk(ps2_clk),
38
    .ps2_data(ps2_data),
39
    .clk(clk),
40 290 hellwig
    .rst(rst),
41 27 hellwig
    .keyboard_data(keyboard_data[7:0]),
42
    .keyboard_rdy(keyboard_rdy)
43
  );
44
 
45
  always @(posedge clk) begin
46 290 hellwig
    if (rst) begin
47 27 hellwig
      data <= 8'h00;
48
      rdy <= 0;
49
      ien <= 0;
50 116 hellwig
      other_bits <= 6'b000000;
51 27 hellwig
    end else begin
52
      if (keyboard_rdy == 1) begin
53
        data <= keyboard_data;
54
      end
55
      if (keyboard_rdy == 1 ||
56 290 hellwig
          (stb == 1 && we == 0 && addr == 1)) begin
57 27 hellwig
        rdy <= keyboard_rdy;
58
      end
59 290 hellwig
      if (stb == 1 && we == 1 && addr == 0) begin
60 27 hellwig
        rdy <= data_in[0];
61
        ien <= data_in[1];
62 116 hellwig
        other_bits <= data_in[7:2];
63 27 hellwig
      end
64
    end
65
  end
66
 
67
  assign data_out =
68 116 hellwig
    (addr == 0) ? { other_bits[7:2], ien, rdy } : data[7:0];
69 290 hellwig
  assign ack = stb;
70 27 hellwig
  assign irq = ien & rdy;
71
 
72
endmodule

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.