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

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.25/] [fpga/] [src/] [dsk/] [atabuf.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 ata_buffer (clk,
2
                   bus_write, bus_addr, bus_din, bus_dout,
3
                   ata_write, ata_addr, ata_din, ata_dout);
4
    input clk;
5
    // bus interface
6
    input bus_write;
7
    input [11:2] bus_addr;
8
    input [31:0] bus_din;
9
    output [31:0] bus_dout;
10
    // ata interface
11
    input ata_write;
12
    input [11:1] ata_addr;
13
    input [15:0] ata_din;
14
    output [15:0] ata_dout;
15
 
16
  wire [9:0] internal_bus_addr;
17
  wire [9:0] internal_ata_addr;
18
  wire [15:0] lo_din_bus;
19
  wire [15:0] hi_din_bus;
20
  wire [15:0] lo_din_ata;
21
  wire [15:0] hi_din_ata;
22
  wire [15:0] lo_dout_bus;
23
  wire [15:0] hi_dout_bus;
24
  wire [15:0] lo_dout_ata;
25
  wire [15:0] hi_dout_ata;
26
  wire lo_write_bus;
27
  wire hi_write_bus;
28
  wire lo_write_ata;
29
  wire hi_write_ata;
30
  reg ata_out_muxctrl;
31
 
32
  assign internal_bus_addr[9:0] = bus_addr[11:2];
33
  assign internal_ata_addr[9:0] = ata_addr[11:2];
34
 
35
  assign lo_din_bus = bus_din[15:0];
36
  assign hi_din_bus = bus_din[31:16];
37
  assign lo_din_ata = ata_din;
38
  assign hi_din_ata = ata_din;
39
 
40
  // pipeline register for ata output mux control
41
  always @(posedge clk) begin
42
    ata_out_muxctrl <= ata_addr[1];
43
  end
44
 
45
  assign bus_dout = { hi_dout_bus, lo_dout_bus };
46
  assign ata_dout = ata_out_muxctrl ? lo_dout_ata : hi_dout_ata;
47
 
48
  assign lo_write_bus = bus_write;
49
  assign hi_write_bus = bus_write;
50
  assign lo_write_ata = ata_write & ata_addr[1];
51
  assign hi_write_ata = ata_write & ~ata_addr[1];
52
 
53
  RAMB16_S18_S18 lo_buffer (
54
    .DOA(lo_dout_bus),
55
    .DOB(lo_dout_ata),
56
    .ADDRA(internal_bus_addr),
57
    .ADDRB(internal_ata_addr),
58
    .CLKA(clk),
59
    .CLKB(clk),
60
    .DIA(lo_din_bus),
61
    .DIB(lo_din_ata),
62
    .DIPA(2'b00),
63
    .DIPB(2'b00),
64
    .ENA(1'b1),
65
    .ENB(1'b1),
66
    .SSRA(1'b0),
67
    .SSRB(1'b0),
68
    .WEA(lo_write_bus),
69
    .WEB(lo_write_ata)
70
  );
71
 
72
  RAMB16_S18_S18 hi_buffer (
73
    .DOA(hi_dout_bus),
74
    .DOB(hi_dout_ata),
75
    .ADDRA(internal_bus_addr),
76
    .ADDRB(internal_ata_addr),
77
    .CLKA(clk),
78
    .CLKB(clk),
79
    .DIA(hi_din_bus),
80
    .DIB(hi_din_ata),
81
    .DIPA(2'b00),
82
    .DIPB(2'b00),
83
    .ENA(1'b1),
84
    .ENB(1'b1),
85
    .SSRA(1'b0),
86
    .SSRB(1'b0),
87
    .WEA(hi_write_bus),
88
    .WEB(hi_write_ata)
89
  );
90
 
91
endmodule

powered by: WebSVN 2.1.0

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