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

Subversion Repositories altor32

[/] [altor32/] [trunk/] [rtl/] [soc/] [dmem_mux3.v] - Blame information for rev 27

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

Line No. Rev Author Line
1 27 ultra_embe
 
2
//-----------------------------------------------------------------
3
// Module:
4
//-----------------------------------------------------------------
5
module dmem_mux3
6
(
7
    // Outputs
8
    out0_addr_o,
9
    out0_data_o,
10
    out0_data_i,
11
    out0_wr_o,
12
    out0_rd_o,
13
    out0_burst_o,
14
    out0_ack_i,
15
    out0_accept_i,
16
    out1_addr_o,
17
    out1_data_o,
18
    out1_data_i,
19
    out1_wr_o,
20
    out1_rd_o,
21
    out1_burst_o,
22
    out1_ack_i,
23
    out1_accept_i,
24
    out2_addr_o,
25
    out2_data_o,
26
    out2_data_i,
27
    out2_wr_o,
28
    out2_rd_o,
29
    out2_burst_o,
30
    out2_ack_i,
31
    out2_accept_i,
32
 
33
    // Input
34
    mem_addr_i,
35
    mem_data_i,
36
    mem_data_o,
37
    mem_burst_i,
38
    mem_wr_i,
39
    mem_rd_i,
40
    mem_ack_o,
41
    mem_accept_o
42
);
43
 
44
//-----------------------------------------------------------------
45
// Params
46
//-----------------------------------------------------------------
47
parameter           ADDR_MUX_START      = 28;
48
 
49
//-----------------------------------------------------------------
50
// I/O
51
//-----------------------------------------------------------------
52
input [31:0]        mem_addr_i /*verilator public*/;
53
input [31:0]        mem_data_i /*verilator public*/;
54
output [31:0]       mem_data_o /*verilator public*/;
55
input [3:0]         mem_wr_i /*verilator public*/;
56
input               mem_rd_i /*verilator public*/;
57
input               mem_burst_i /*verilator public*/;
58
output              mem_ack_o /*verilator public*/;
59
output              mem_accept_o /*verilator public*/;
60
output [31:0]       out0_addr_o /*verilator public*/;
61
output [31:0]       out0_data_o /*verilator public*/;
62
input [31:0]        out0_data_i /*verilator public*/;
63
output [3:0]        out0_wr_o /*verilator public*/;
64
output              out0_rd_o /*verilator public*/;
65
output              out0_burst_o /*verilator public*/;
66
input               out0_ack_i /*verilator public*/;
67
input               out0_accept_i /*verilator public*/;
68
output [31:0]       out1_addr_o /*verilator public*/;
69
output [31:0]       out1_data_o /*verilator public*/;
70
input [31:0]        out1_data_i /*verilator public*/;
71
output [3:0]        out1_wr_o /*verilator public*/;
72
output              out1_rd_o /*verilator public*/;
73
output              out1_burst_o /*verilator public*/;
74
input               out1_ack_i /*verilator public*/;
75
input               out1_accept_i /*verilator public*/;
76
output [31:0]       out2_addr_o /*verilator public*/;
77
output [31:0]       out2_data_o /*verilator public*/;
78
input [31:0]        out2_data_i /*verilator public*/;
79
output [3:0]        out2_wr_o /*verilator public*/;
80
output              out2_rd_o /*verilator public*/;
81
output              out2_burst_o /*verilator public*/;
82
input               out2_ack_i /*verilator public*/;
83
input               out2_accept_i /*verilator public*/;
84
 
85
//-----------------------------------------------------------------
86
// Registers
87
//-----------------------------------------------------------------
88
 
89
// Output Signals
90
reg                 mem_ack_o;
91
reg                 mem_accept_o;
92
reg [31:0]          mem_data_o;
93
 
94
reg [31:0]          out0_addr_o;
95
reg [31:0]          out0_data_o;
96
reg [3:0]           out0_wr_o;
97
reg                 out0_rd_o;
98
reg                 out0_burst_o;
99
reg [31:0]          out1_addr_o;
100
reg [31:0]          out1_data_o;
101
reg [3:0]           out1_wr_o;
102
reg                 out1_rd_o;
103
reg                 out1_burst_o;
104
reg [31:0]          out2_addr_o;
105
reg [31:0]          out2_data_o;
106
reg [3:0]           out2_wr_o;
107
reg                 out2_rd_o;
108
reg                 out2_burst_o;
109
 
110
//-----------------------------------------------------------------
111
// Memory Map
112
//-----------------------------------------------------------------
113
always @ (mem_addr_i or mem_wr_i or mem_rd_i or mem_data_i or mem_burst_i)
114
begin
115
 
116
   out0_addr_o      = 32'h00000000;
117
   out0_wr_o        = 4'b0000;
118
   out0_rd_o        = 1'b0;
119
   out0_data_o      = 32'h00000000;
120
   out0_burst_o     = 1'b0;
121
   out1_addr_o      = 32'h00000000;
122
   out1_wr_o        = 4'b0000;
123
   out1_rd_o        = 1'b0;
124
   out1_data_o      = 32'h00000000;
125
   out1_burst_o     = 1'b0;
126
   out2_addr_o      = 32'h00000000;
127
   out2_wr_o        = 4'b0000;
128
   out2_rd_o        = 1'b0;
129
   out2_data_o      = 32'h00000000;
130
   out2_burst_o     = 1'b0;
131
 
132
   case (mem_addr_i[ADDR_MUX_START+2-1:ADDR_MUX_START])
133
 
134
   2'd0:
135
   begin
136
       out0_addr_o      = mem_addr_i;
137
       out0_wr_o        = mem_wr_i;
138
       out0_rd_o        = mem_rd_i;
139
       out0_data_o      = mem_data_i;
140
       out0_burst_o     = mem_burst_i;
141
   end
142
   2'd1:
143
   begin
144
       out1_addr_o      = mem_addr_i;
145
       out1_wr_o        = mem_wr_i;
146
       out1_rd_o        = mem_rd_i;
147
       out1_data_o      = mem_data_i;
148
       out1_burst_o     = mem_burst_i;
149
   end
150
   2'd2:
151
   begin
152
       out2_addr_o      = mem_addr_i;
153
       out2_wr_o        = mem_wr_i;
154
       out2_rd_o        = mem_rd_i;
155
       out2_data_o      = mem_data_i;
156
       out2_burst_o     = mem_burst_i;
157
   end
158
 
159
   default :
160
      ;
161
   endcase
162
end
163
 
164
//-----------------------------------------------------------------
165
// Read Port
166
//-----------------------------------------------------------------
167
always @ *
168
begin
169
   case (mem_addr_i[ADDR_MUX_START+2-1:ADDR_MUX_START])
170
 
171
    2'd0:
172
    begin
173
       mem_data_o   = out0_data_i;
174
       mem_accept_o = out0_accept_i;
175
       mem_ack_o    = out0_ack_i;
176
    end
177
    2'd1:
178
    begin
179
       mem_data_o   = out1_data_i;
180
       mem_accept_o = out1_accept_i;
181
       mem_ack_o    = out1_ack_i;
182
    end
183
    2'd2:
184
    begin
185
       mem_data_o   = out2_data_i;
186
       mem_accept_o = out2_accept_i;
187
       mem_ack_o    = out2_ack_i;
188
    end
189
 
190
   default :
191
   begin
192
       mem_data_o   = 32'h00000000;
193
       mem_accept_o = 1'b0;
194
       mem_ack_o    = 1'b0;
195
   end
196
   endcase
197
end
198
 
199
endmodule

powered by: WebSVN 2.1.0

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