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

Subversion Repositories eco32

[/] [eco32/] [tags/] [eco32-0.23/] [fpga/] [src/] [dsk/] [atabuf.v] - Blame information for rev 185

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

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

powered by: WebSVN 2.1.0

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