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

Subversion Repositories altor32

[/] [altor32/] [trunk/] [rtl/] [soc/] [soc_pif8.v] - Blame information for rev 32

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 32 ultra_embe
//-----------------------------------------------------------------
2
//                           AltOR32 
3
//                Alternative Lightweight OpenRisc 
4
//                            V2.0
5
//                     Ultra-Embedded.com
6
//                   Copyright 2011 - 2013
7
//
8
//               Email: admin@ultra-embedded.com
9
//
10
//                       License: LGPL
11
//-----------------------------------------------------------------
12
//
13
// Copyright (C) 2011 - 2013 Ultra-Embedded.com
14
//
15
// This source file may be used and distributed without         
16
// restriction provided that this copyright statement is not    
17
// removed from the file and that any derivative work contains  
18
// the original copyright notice and the associated disclaimer. 
19
//
20
// This source file is free software; you can redistribute it   
21
// and/or modify it under the terms of the GNU Lesser General   
22
// Public License as published by the Free Software Foundation; 
23
// either version 2.1 of the License, or (at your option) any   
24
// later version.
25
//
26
// This source is distributed in the hope that it will be       
27
// useful, but WITHOUT ANY WARRANTY; without even the implied   
28
// warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR      
29
// PURPOSE.  See the GNU Lesser General Public License for more 
30
// details.
31
//
32
// You should have received a copy of the GNU Lesser General    
33
// Public License along with this source; if not, write to the 
34
// Free Software Foundation, Inc., 59 Temple Place, Suite 330, 
35
// Boston, MA  02111-1307  USA
36
//-----------------------------------------------------------------
37 27 ultra_embe
 
38
//-----------------------------------------------------------------
39
// Module:
40
//-----------------------------------------------------------------
41
module soc_pif8
42
(
43
    // General - Clocking & Reset
44 32 ultra_embe
    input               clk_i,
45
    input               rst_i,
46 27 ultra_embe
 
47
    // Peripherals
48 32 ultra_embe
    output [7:0]        periph0_addr_o,
49
    output [31:0]       periph0_data_o,
50
    input [31:0]        periph0_data_i,
51
    output reg          periph0_we_o,
52
    output reg          periph0_stb_o,
53 27 ultra_embe
 
54 32 ultra_embe
    output [7:0]        periph1_addr_o,
55
    output [31:0]       periph1_data_o,
56
    input [31:0]        periph1_data_i,
57
    output reg          periph1_we_o,
58
    output reg          periph1_stb_o,
59 27 ultra_embe
 
60 32 ultra_embe
    output [7:0]        periph2_addr_o,
61
    output [31:0]       periph2_data_o,
62
    input [31:0]        periph2_data_i,
63
    output reg          periph2_we_o,
64
    output reg          periph2_stb_o,
65 27 ultra_embe
 
66 32 ultra_embe
    output [7:0]        periph3_addr_o,
67
    output [31:0]       periph3_data_o,
68
    input [31:0]        periph3_data_i,
69
    output reg          periph3_we_o,
70
    output reg          periph3_stb_o,
71 27 ultra_embe
 
72 32 ultra_embe
    output [7:0]        periph4_addr_o,
73
    output [31:0]       periph4_data_o,
74
    input [31:0]        periph4_data_i,
75
    output reg          periph4_we_o,
76
    output reg          periph4_stb_o,
77 27 ultra_embe
 
78 32 ultra_embe
    output [7:0]        periph5_addr_o,
79
    output [31:0]       periph5_data_o,
80
    input [31:0]        periph5_data_i,
81
    output reg          periph5_we_o,
82
    output reg          periph5_stb_o,
83 27 ultra_embe
 
84 32 ultra_embe
    output [7:0]        periph6_addr_o,
85
    output [31:0]       periph6_data_o,
86
    input [31:0]        periph6_data_i,
87
    output reg          periph6_we_o,
88
    output reg          periph6_stb_o,
89 27 ultra_embe
 
90 32 ultra_embe
    output [7:0]        periph7_addr_o,
91
    output [31:0]       periph7_data_o,
92
    input [31:0]        periph7_data_i,
93
    output reg          periph7_we_o,
94
    output reg          periph7_stb_o,
95 27 ultra_embe
 
96 32 ultra_embe
    // I/O bus
97
    input [31:0]        io_addr_i,
98
    input [31:0]        io_data_i,
99
    output reg [31:0]   io_data_o,
100
    input               io_we_i,
101
    input               io_stb_i,
102
    output reg          io_ack_o
103
);
104
 
105 27 ultra_embe
//-----------------------------------------------------------------
106
// Memory Map
107
//-----------------------------------------------------------------
108 32 ultra_embe
 
109
// Route data / address to all peripherals
110
assign              periph0_addr_o = io_addr_i[7:0];
111
assign              periph0_data_o = io_data_i;
112
assign              periph1_addr_o = io_addr_i[7:0];
113
assign              periph1_data_o = io_data_i;
114
assign              periph2_addr_o = io_addr_i[7:0];
115
assign              periph2_data_o = io_data_i;
116
assign              periph3_addr_o = io_addr_i[7:0];
117
assign              periph3_data_o = io_data_i;
118
assign              periph4_addr_o = io_addr_i[7:0];
119
assign              periph4_data_o = io_data_i;
120
assign              periph5_addr_o = io_addr_i[7:0];
121
assign              periph5_data_o = io_data_i;
122
assign              periph6_addr_o = io_addr_i[7:0];
123
assign              periph6_data_o = io_data_i;
124
assign              periph7_addr_o = io_addr_i[7:0];
125
assign              periph7_data_o = io_data_i;
126
 
127
// Select correct target
128
always @ *
129 27 ultra_embe
begin
130
 
131 32 ultra_embe
   periph0_we_o         = 1'b0;
132
   periph0_stb_o        = 1'b0;
133
   periph1_we_o         = 1'b0;
134
   periph1_stb_o        = 1'b0;
135
   periph2_we_o         = 1'b0;
136
   periph2_stb_o        = 1'b0;
137
   periph3_we_o         = 1'b0;
138
   periph3_stb_o        = 1'b0;
139
   periph4_we_o         = 1'b0;
140
   periph4_stb_o        = 1'b0;
141
   periph5_we_o         = 1'b0;
142
   periph5_stb_o        = 1'b0;
143
   periph6_we_o         = 1'b0;
144
   periph6_stb_o        = 1'b0;
145
   periph7_we_o         = 1'b0;
146
   periph7_stb_o        = 1'b0;
147 27 ultra_embe
 
148
   // Decode 4-bit peripheral select
149
   case (io_addr_i[11:8])
150
 
151
   // Peripheral 0
152
   4'd 0 :
153
   begin
154 32 ultra_embe
       periph0_we_o         = io_we_i;
155
       periph0_stb_o        = io_stb_i;
156 27 ultra_embe
   end
157
   // Peripheral 1
158
   4'd 1 :
159
   begin
160 32 ultra_embe
       periph1_we_o         = io_we_i;
161
       periph1_stb_o        = io_stb_i;
162 27 ultra_embe
   end
163
   // Peripheral 2
164
   4'd 2 :
165
   begin
166 32 ultra_embe
       periph2_we_o         = io_we_i;
167
       periph2_stb_o        = io_stb_i;
168 27 ultra_embe
   end
169
   // Peripheral 3
170
   4'd 3 :
171
   begin
172 32 ultra_embe
       periph3_we_o         = io_we_i;
173
       periph3_stb_o        = io_stb_i;
174 27 ultra_embe
   end
175
   // Peripheral 4
176
   4'd 4 :
177
   begin
178 32 ultra_embe
       periph4_we_o         = io_we_i;
179
       periph4_stb_o        = io_stb_i;
180 27 ultra_embe
   end
181
   // Peripheral 5
182
   4'd 5 :
183
   begin
184 32 ultra_embe
       periph5_we_o         = io_we_i;
185
       periph5_stb_o        = io_stb_i;
186 27 ultra_embe
   end
187
   // Peripheral 6
188
   4'd 6 :
189
   begin
190 32 ultra_embe
       periph6_we_o         = io_we_i;
191
       periph6_stb_o        = io_stb_i;
192 27 ultra_embe
   end
193
   // Peripheral 7
194
   4'd 7 :
195
   begin
196 32 ultra_embe
       periph7_we_o         = io_we_i;
197
       periph7_stb_o        = io_stb_i;
198 27 ultra_embe
   end
199
 
200
   default :
201
      ;
202
   endcase
203
end
204
 
205
//-----------------------------------------------------------------
206
// Read Port
207
//-----------------------------------------------------------------
208 32 ultra_embe
always @ (posedge clk_i or posedge rst_i)
209 27 ultra_embe
begin
210 32 ultra_embe
   if (rst_i == 1'b1)
211 27 ultra_embe
   begin
212 32 ultra_embe
       io_data_o <= 32'b0;
213
       io_ack_o  <= 1'b0;
214 27 ultra_embe
   end
215 32 ultra_embe
   else
216 27 ultra_embe
   begin
217 32 ultra_embe
       if (io_stb_i)
218
       begin
219
           // Decode 4-bit peripheral select
220
           case (io_addr_i[11:8])
221
           // Peripheral 0
222
           4'd 0 : io_data_o  <= periph0_data_i;
223
           // Peripheral 1
224
           4'd 1 : io_data_o  <= periph1_data_i;
225
           // Peripheral 2
226
           4'd 2 : io_data_o  <= periph2_data_i;
227
           // Peripheral 3
228
           4'd 3 : io_data_o  <= periph3_data_i;
229
           // Peripheral 4
230
           4'd 4 : io_data_o  <= periph4_data_i;
231
           // Peripheral 5
232
           4'd 5 : io_data_o  <= periph5_data_i;
233
           // Peripheral 6
234
           4'd 6 : io_data_o  <= periph6_data_i;
235
           // Peripheral 7
236
           4'd 7 : io_data_o  <= periph7_data_i;
237 27 ultra_embe
 
238 32 ultra_embe
           default :  io_data_o  <= 32'h00000000;
239
           endcase
240
       end
241
 
242
       io_ack_o  <= io_stb_i;
243 27 ultra_embe
   end
244
end
245
 
246
endmodule

powered by: WebSVN 2.1.0

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