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

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.24/] [fpga/] [src/] [ser/] [ser.v] - Blame information for rev 211

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 117 hellwig
//
2
// ser.v -- serial line interface
3
//
4
 
5
 
6 27 hellwig
module ser(clk, reset,
7
           en, wr, addr,
8
           data_in, data_out,
9
           wt, irq_r, irq_t,
10
           rxd, txd);
11 117 hellwig
    // internal interface
12 27 hellwig
    input clk;
13
    input reset;
14
    input en;
15
    input wr;
16
    input [3:2] addr;
17
    input [7:0] data_in;
18
    output reg [7:0] data_out;
19
    output wt;
20
    output irq_r;
21
    output irq_t;
22 117 hellwig
    // external interface
23 27 hellwig
    input rxd;
24
    output txd;
25
 
26
  wire wr_rcv_ctrl;
27
  wire rd_rcv_data;
28
  wire wr_xmt_ctrl;
29
  wire wr_xmt_data;
30
 
31
  wire rcv_ready;
32
  reg rcv_ien;
33
  wire [7:0] rcv_data;
34
  wire xmt_ready;
35
  reg xmt_ien;
36
 
37
  assign wr_rcv_ctrl = (en == 1 && wr == 1 && addr == 2'b00) ? 1 : 0;
38
  assign rd_rcv_data = (en == 1 && wr == 0 && addr == 2'b01) ? 1 : 0;
39
  assign wr_xmt_ctrl = (en == 1 && wr == 1 && addr == 2'b10) ? 1 : 0;
40
  assign wr_xmt_data = (en == 1 && wr == 1 && addr == 2'b11) ? 1 : 0;
41
 
42
  rcvbuf rcvbuf1(clk, reset, rd_rcv_data, rcv_ready, rcv_data, rxd);
43
  xmtbuf xmtbuf1(clk, reset, wr_xmt_data, xmt_ready, data_in, txd);
44
 
45
  always @(posedge clk) begin
46
    if (reset == 1) begin
47
      rcv_ien <= 0;
48
      xmt_ien <= 0;
49
    end else begin
50
      if (wr_rcv_ctrl) begin
51
        rcv_ien <= data_in[1];
52
      end
53
      if (wr_xmt_ctrl) begin
54
        xmt_ien <= data_in[1];
55
      end
56
    end
57
  end
58
 
59
  always @(*) begin
60
    case (addr[3:2])
61
      2'b00:
62
        // rcv ctrl
63
        data_out = { 6'b000000, rcv_ien, rcv_ready };
64
      2'b01:
65
        // rcv data
66
        data_out = rcv_data;
67
      2'b10:
68
        // xmt ctrl
69
        data_out = { 6'b000000, xmt_ien, xmt_ready };
70
      2'b11:
71
        // xmt data (cannot be read)
72
        data_out = 8'hxx;
73
      default:
74
        data_out = 8'hxx;
75
    endcase
76
  end
77
 
78
  assign wt = 1'b0;
79
  assign irq_r = rcv_ien & rcv_ready;
80
  assign irq_t = xmt_ien & xmt_ready;
81
 
82
endmodule

powered by: WebSVN 2.1.0

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