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

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.26/] [fpga/] [src/] [ser/] [ser.v] - Blame information for rev 27

Go to most recent revision | Details | Compare with Previous | View Log

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

powered by: WebSVN 2.1.0

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