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

Subversion Repositories altor32

[/] [altor32/] [trunk/] [rtl/] [soc/] [soc.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 soc
6
(
7
    // General - Clocking & Reset
8
    clk_i,
9
    rst_i,
10
    ext_intr_i,
11
    intr_o,
12
 
13
 
14
 
15
 
16
 
17
 
18
 
19
 
20
 
21
    // Memory interface
22
    io_addr_i,
23
    io_data_i,
24
    io_data_o,
25
    io_wr_i,
26
    io_rd_i
27
);
28
 
29
//-----------------------------------------------------------------
30
// Params
31
//-----------------------------------------------------------------
32
parameter  [31:0]   CLK_KHZ              = 12288;
33
parameter  [31:0]   UART_BAUD            = 115200;
34
parameter  [31:0]   SPI_FLASH_CLK_KHZ    = (12288/2);
35
parameter           SD_CLK_KHZ           = 8000;
36
parameter  [31:0]   EXTERNAL_INTERRUPTS  = 1;
37
parameter           SYSTICK_INTR_MS      = 1;
38
parameter           ENABLE_SYSTICK_TIMER = "ENABLED";
39
parameter           ENABLE_HIGHRES_TIMER = "ENABLED";
40
 
41
//-----------------------------------------------------------------
42
// I/O
43
//-----------------------------------------------------------------
44
input                   clk_i /*verilator public*/;
45
input                   rst_i /*verilator public*/;
46
input [(EXTERNAL_INTERRUPTS - 1):0]  ext_intr_i /*verilator public*/;
47
output                  intr_o /*verilator public*/;
48
 
49
 
50
// Memory Port
51
input [31:0]            io_addr_i /*verilator public*/;
52
input [31:0]            io_data_i /*verilator public*/;
53
output [31:0]           io_data_o /*verilator public*/;
54
input [3:0]             io_wr_i /*verilator public*/;
55
input                   io_rd_i /*verilator public*/;
56
 
57
 
58
 
59
 
60
 
61
 
62
 
63
 
64
//-----------------------------------------------------------------
65
// Registers / Wires
66
//-----------------------------------------------------------------
67
 
68
 
69
 
70
 
71
 
72
 
73
 
74
 
75
wire [7:0]         timer_addr;
76
wire [31:0]        timer_data_o;
77
wire [31:0]        timer_data_i;
78
wire [3:0]         timer_wr;
79
wire               timer_rd;
80
wire               timer_intr_systick;
81
wire               timer_intr_hires;
82
 
83
wire [7:0]         intr_addr;
84
wire [31:0]        intr_data_o;
85
wire [31:0]        intr_data_i;
86
wire [3:0]         intr_wr;
87
wire               intr_rd;
88
 
89
//-----------------------------------------------------------------
90
// Peripheral Interconnect
91
//-----------------------------------------------------------------
92
soc_pif8
93
u2_soc
94
(
95
    // General - Clocking & Reset
96
    .clk_i(clk_i),
97
    .rst_i(rst_i),
98
 
99
    // I/O bus (from mem_mux)
100
    // 0x12000000 - 0x12FFFFFF
101
    .io_addr_i(io_addr_i),
102
    .io_data_i(io_data_i),
103
    .io_data_o(io_data_o),
104
    .io_wr_i(io_wr_i),
105
    .io_rd_i(io_rd_i),
106
 
107
    // Peripherals
108
    // Unused = 0x12000000 - 0x120000FF
109
    .periph0_addr_o(/*open*/),
110
    .periph0_data_o(/*open*/),
111
    .periph0_data_i(32'h00000000),
112
    .periph0_wr_o(/*open*/),
113
    .periph0_rd_o(/*open*/),
114
 
115
    // Timer = 0x12000100 - 0x120001FF
116
    .periph1_addr_o(timer_addr),
117
    .periph1_data_o(timer_data_o),
118
    .periph1_data_i(timer_data_i),
119
    .periph1_wr_o(timer_wr),
120
    .periph1_rd_o(timer_rd),
121
 
122
    // Interrupt Controller = 0x12000200 - 0x120002FF
123
    .periph2_addr_o(intr_addr),
124
    .periph2_data_o(intr_data_o),
125
    .periph2_data_i(intr_data_i),
126
    .periph2_wr_o(intr_wr),
127
    .periph2_rd_o(intr_rd),
128
 
129
    // Unused = 0x12000300 - 0x120003FF
130
    .periph3_addr_o(/*open*/),
131
    .periph3_data_o(/*open*/),
132
    .periph3_data_i(32'h00000000),
133
    .periph3_wr_o(/*open*/),
134
    .periph3_rd_o(/*open*/),
135
 
136
    // Unused = 0x12000400 - 0x120004FF
137
    .periph4_addr_o(/*open*/),
138
    .periph4_data_o(/*open*/),
139
    .periph4_data_i(32'h00000000),
140
    .periph4_wr_o(/*open*/),
141
    .periph4_rd_o(/*open*/),
142
 
143
    // Unused = 0x12000500 - 0x120005FF
144
    .periph5_addr_o(/*open*/),
145
    .periph5_data_o(/*open*/),
146
    .periph5_data_i(32'h00000000),
147
    .periph5_wr_o(/*open*/),
148
    .periph5_rd_o(/*open*/),
149
 
150
    // Unused = 0x12000600 - 0x120006FF
151
    .periph6_addr_o(/*open*/),
152
    .periph6_data_o(/*open*/),
153
    .periph6_data_i(32'h00000000),
154
    .periph6_wr_o(/*open*/),
155
    .periph6_rd_o(/*open*/),
156
 
157
    // Unused = 0x12000700 - 0x120007FF
158
    .periph7_addr_o(/*open*/),
159
    .periph7_data_o(/*open*/),
160
    .periph7_data_i(32'h00000000),
161
    .periph7_wr_o(/*open*/),
162
    .periph7_rd_o(/*open*/)
163
);
164
 
165
//-----------------------------------------------------------------
166
// Memory master arbiter
167
//-----------------------------------------------------------------
168
 
169
//-----------------------------------------------------------------
170
// UART
171
//-----------------------------------------------------------------
172
 
173
//-----------------------------------------------------------------
174
// GPIO
175
//-----------------------------------------------------------------
176
 
177
//-----------------------------------------------------------------
178
// SPI Flash Master
179
//-----------------------------------------------------------------
180
 
181
//-----------------------------------------------------------------
182
// DMA
183
//-----------------------------------------------------------------
184
 
185
//-----------------------------------------------------------------
186
// SD
187
//-----------------------------------------------------------------
188
 
189
//-----------------------------------------------------------------
190
// Generic Register
191
//-----------------------------------------------------------------
192
 
193
//-----------------------------------------------------------------
194
// Timer
195
//-----------------------------------------------------------------
196
timer_periph
197
#(
198
    .CLK_KHZ(CLK_KHZ),
199
    .SYSTICK_INTR_MS(SYSTICK_INTR_MS),
200
    .ENABLE_SYSTICK_TIMER(ENABLE_SYSTICK_TIMER),
201
    .ENABLE_HIGHRES_TIMER(ENABLE_HIGHRES_TIMER)
202
)
203
u5_timer
204
(
205
    .clk_i(clk_i),
206
    .rst_i(rst_i),
207
    .intr_systick_o(timer_intr_systick),
208
    .intr_hires_o(timer_intr_hires),
209
    .addr_i(timer_addr),
210
    .data_o(timer_data_i),
211
    .data_i(timer_data_o),
212
    .wr_i(timer_wr),
213
    .rd_i(timer_rd)
214
);
215
 
216
//-----------------------------------------------------------------
217
// Interrupt Controller
218
//-----------------------------------------------------------------
219
intr_periph
220
#(
221
    .EXTERNAL_INTERRUPTS(EXTERNAL_INTERRUPTS)
222
)
223
u6_intr
224
(
225
    .clk_i(clk_i),
226
    .rst_i(rst_i),
227
    .intr_o(intr_o),
228
 
229
    .intr0_i(1'b0),
230
 
231
    .intr1_i(timer_intr_systick),
232
    .intr2_i(timer_intr_hires),
233
    .intr3_i(1'b0),
234
 
235
    .intr4_i(1'b0),
236
 
237
    .intr5_i(1'b0),
238
 
239
    .intr6_i(1'b0),
240
 
241
    .intr7_i(1'b0),
242
    .intr_ext_i(ext_intr_i),
243
 
244
    .addr_i(intr_addr),
245
    .data_o(intr_data_i),
246
    .data_i(intr_data_o),
247
    .wr_i(intr_wr),
248
    .rd_i(intr_rd)
249
);
250
 
251
//-------------------------------------------------------------------
252
// Hooks for debug
253
//-------------------------------------------------------------------
254
`ifdef verilator
255
   function [0:0] get_uart_wr;
256
      // verilator public
257
      get_uart_wr = 1'b0;
258
   endfunction
259
 
260
   function [7:0] get_uart_data;
261
      // verilator public
262
      get_uart_data = 8'b0;
263
   endfunction
264
`endif
265
 
266
endmodule

powered by: WebSVN 2.1.0

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