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

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [rtos/] [freertos-6.1.1/] [Demo/] [uIP_Demo_Rowley_ARM7/] [uip/] [cs8900a.c] - Blame information for rev 583

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 583 jeremybenn
// cs8900a.c: device driver for the CS8900a chip in 8-bit mode.
2
 
3
#include <LPC210x.h>
4
 
5
#include "cs8900a.h"
6
#include "uip.h"
7
#include "uip_arp.h"
8
 
9
#define IOR                  (1<<12)          // CS8900's ISA-bus interface pins
10
#define IOW                  (1<<13)
11
 
12
// definitions for Crystal CS8900 ethernet-controller
13
// based on linux-header by Russel Nelson
14
 
15
#define PP_ChipID            0x0000          // offset 0h -> Corp-ID
16
 
17
                                                                                         // offset 2h -> Model/Product Number
18
#define LED_RED (1<<8)
19
#define LED_GREEN (1<<10)
20
#define LED_YELLOW (1<<11)
21
 
22
#define PP_ISAIOB            0x0020          // IO base address
23
#define PP_CS8900_ISAINT     0x0022          // ISA interrupt select
24
#define PP_CS8900_ISADMA     0x0024          // ISA Rec DMA channel
25
#define PP_ISASOF            0x0026          // ISA DMA offset
26
#define PP_DmaFrameCnt       0x0028          // ISA DMA Frame count
27
#define PP_DmaByteCnt        0x002A          // ISA DMA Byte count
28
#define PP_CS8900_ISAMemB    0x002C          // Memory base
29
#define PP_ISABootBase       0x0030          // Boot Prom base
30
#define PP_ISABootMask       0x0034          // Boot Prom Mask
31
 
32
// EEPROM data and command registers
33
#define PP_EECMD             0x0040          // NVR Interface Command register
34
#define PP_EEData            0x0042          // NVR Interface Data Register
35
 
36
// Configuration and control registers
37
#define PP_RxCFG             0x0102          // Rx Bus config
38
#define PP_RxCTL             0x0104          // Receive Control Register
39
#define PP_TxCFG             0x0106          // Transmit Config Register
40
#define PP_TxCMD             0x0108          // Transmit Command Register
41
#define PP_BufCFG            0x010A          // Bus configuration Register
42
#define PP_LineCTL           0x0112          // Line Config Register
43
#define PP_SelfCTL           0x0114          // Self Command Register
44
#define PP_BusCTL            0x0116          // ISA bus control Register
45
#define PP_TestCTL           0x0118          // Test Register
46
 
47
// Status and Event Registers
48
#define PP_ISQ               0x0120          // Interrupt Status
49
#define PP_RxEvent           0x0124          // Rx Event Register
50
#define PP_TxEvent           0x0128          // Tx Event Register
51
#define PP_BufEvent          0x012C          // Bus Event Register
52
#define PP_RxMiss            0x0130          // Receive Miss Count
53
#define PP_TxCol             0x0132          // Transmit Collision Count
54
#define PP_LineST            0x0134          // Line State Register
55
#define PP_SelfST            0x0136          // Self State register
56
#define PP_BusST             0x0138          // Bus Status
57
#define PP_TDR               0x013C          // Time Domain Reflectometry
58
 
59
// Initiate Transmit Registers
60
#define PP_TxCommand         0x0144          // Tx Command
61
#define PP_TxLength          0x0146          // Tx Length
62
 
63
// Adress Filter Registers
64
#define PP_LAF               0x0150          // Hash Table
65
#define PP_IA                0x0158          // Physical Address Register
66
 
67
// Frame Location
68
#define PP_RxStatus          0x0400          // Receive start of frame
69
#define PP_RxLength          0x0402          // Receive Length of frame
70
#define PP_RxFrame           0x0404          // Receive frame pointer
71
#define PP_TxFrame           0x0A00          // Transmit frame pointer
72
 
73
// Primary I/O Base Address. If no I/O base is supplied by the user, then this
74
// can be used as the default I/O base to access the PacketPage Area.
75
#define DEFAULTIOBASE        0x0300
76
 
77
// PP_RxCFG - Receive  Configuration and Interrupt Mask bit definition - Read/write
78
#define SKIP_1               0x0040
79
#define RX_STREAM_ENBL       0x0080
80
#define RX_OK_ENBL           0x0100
81
#define RX_DMA_ONLY          0x0200
82
#define AUTO_RX_DMA          0x0400
83
#define BUFFER_CRC           0x0800
84
#define RX_CRC_ERROR_ENBL    0x1000
85
#define RX_RUNT_ENBL         0x2000
86
#define RX_EXTRA_DATA_ENBL   0x4000
87
 
88
// PP_RxCTL - Receive Control bit definition - Read/write
89
#define RX_IA_HASH_ACCEPT    0x0040
90
#define RX_PROM_ACCEPT       0x0080
91
#define RX_OK_ACCEPT         0x0100
92
#define RX_MULTCAST_ACCEPT   0x0200
93
#define RX_IA_ACCEPT         0x0400
94
#define RX_BROADCAST_ACCEPT  0x0800
95
#define RX_BAD_CRC_ACCEPT    0x1000
96
#define RX_RUNT_ACCEPT       0x2000
97
#define RX_EXTRA_DATA_ACCEPT 0x4000
98
 
99
// PP_TxCFG - Transmit Configuration Interrupt Mask bit definition - Read/write
100
#define TX_LOST_CRS_ENBL     0x0040
101
#define TX_SQE_ERROR_ENBL    0x0080
102
#define TX_OK_ENBL           0x0100
103
#define TX_LATE_COL_ENBL     0x0200
104
#define TX_JBR_ENBL          0x0400
105
#define TX_ANY_COL_ENBL      0x0800
106
#define TX_16_COL_ENBL       0x8000
107
 
108
// PP_TxCMD - Transmit Command bit definition - Read-only and
109
// PP_TxCommand - Write-only
110
#define TX_START_5_BYTES     0x0000
111
#define TX_START_381_BYTES   0x0040
112
#define TX_START_1021_BYTES  0x0080
113
#define TX_START_ALL_BYTES   0x00C0
114
#define TX_FORCE             0x0100
115
#define TX_ONE_COL           0x0200
116
#define TX_NO_CRC            0x1000
117
#define TX_RUNT              0x2000
118
 
119
// PP_BufCFG - Buffer Configuration Interrupt Mask bit definition - Read/write
120
#define GENERATE_SW_INTERRUPT      0x0040
121
#define RX_DMA_ENBL                0x0080
122
#define READY_FOR_TX_ENBL          0x0100
123
#define TX_UNDERRUN_ENBL           0x0200
124
#define RX_MISS_ENBL               0x0400
125
#define RX_128_BYTE_ENBL           0x0800
126
#define TX_COL_COUNT_OVRFLOW_ENBL  0x1000
127
#define RX_MISS_COUNT_OVRFLOW_ENBL 0x2000
128
#define RX_DEST_MATCH_ENBL         0x8000
129
 
130
// PP_LineCTL - Line Control bit definition - Read/write
131
#define SERIAL_RX_ON         0x0040
132
#define SERIAL_TX_ON         0x0080
133
#define AUI_ONLY             0x0100
134
#define AUTO_AUI_10BASET     0x0200
135
#define MODIFIED_BACKOFF     0x0800
136
#define NO_AUTO_POLARITY     0x1000
137
#define TWO_PART_DEFDIS      0x2000
138
#define LOW_RX_SQUELCH       0x4000
139
 
140
// PP_SelfCTL - Software Self Control bit definition - Read/write
141
#define POWER_ON_RESET       0x0040
142
#define SW_STOP              0x0100
143
#define SLEEP_ON             0x0200
144
#define AUTO_WAKEUP          0x0400
145
#define HCB0_ENBL            0x1000
146
#define HCB1_ENBL            0x2000
147
#define HCB0                 0x4000
148
#define HCB1                 0x8000
149
 
150
// PP_BusCTL - ISA Bus Control bit definition - Read/write
151
#define RESET_RX_DMA         0x0040
152
#define MEMORY_ON            0x0400
153
#define DMA_BURST_MODE       0x0800
154
#define IO_CHANNEL_READY_ON  0x1000
155
#define RX_DMA_SIZE_64K      0x2000
156
#define ENABLE_IRQ           0x8000
157
 
158
// PP_TestCTL - Test Control bit definition - Read/write
159
#define LINK_OFF             0x0080
160
#define ENDEC_LOOPBACK       0x0200
161
#define AUI_LOOPBACK         0x0400
162
#define BACKOFF_OFF          0x0800
163
#define FDX_8900             0x4000
164
 
165
// PP_RxEvent - Receive Event Bit definition - Read-only
166
#define RX_IA_HASHED         0x0040
167
#define RX_DRIBBLE           0x0080
168
#define RX_OK                0x0100
169
#define RX_HASHED            0x0200
170
#define RX_IA                0x0400
171
#define RX_BROADCAST         0x0800
172
#define RX_CRC_ERROR         0x1000
173
#define RX_RUNT              0x2000
174
#define RX_EXTRA_DATA        0x4000
175
#define HASH_INDEX_MASK      0xFC00          // Hash-Table Index Mask (6 Bit)
176
 
177
// PP_TxEvent - Transmit Event Bit definition - Read-only
178
#define TX_LOST_CRS          0x0040
179
#define TX_SQE_ERROR         0x0080
180
#define TX_OK                0x0100
181
#define TX_LATE_COL          0x0200
182
#define TX_JBR               0x0400
183
#define TX_16_COL            0x8000
184
#define TX_COL_COUNT_MASK    0x7800
185
 
186
// PP_BufEvent - Buffer Event Bit definition - Read-only
187
#define SW_INTERRUPT         0x0040
188
#define RX_DMA               0x0080
189
#define READY_FOR_TX         0x0100
190
#define TX_UNDERRUN          0x0200
191
#define RX_MISS              0x0400
192
#define RX_128_BYTE          0x0800
193
#define TX_COL_OVRFLW        0x1000
194
#define RX_MISS_OVRFLW       0x2000
195
#define RX_DEST_MATCH        0x8000
196
 
197
// PP_LineST - Ethernet Line Status bit definition - Read-only
198
#define LINK_OK              0x0080
199
#define AUI_ON               0x0100
200
#define TENBASET_ON          0x0200
201
#define POLARITY_OK          0x1000
202
#define CRS_OK               0x4000
203
 
204
// PP_SelfST - Chip Software Status bit definition
205
#define ACTIVE_33V           0x0040
206
#define INIT_DONE            0x0080
207
#define SI_BUSY              0x0100
208
#define EEPROM_PRESENT       0x0200
209
#define EEPROM_OK            0x0400
210
#define EL_PRESENT           0x0800
211
#define EE_SIZE_64           0x1000
212
 
213
// PP_BusST - ISA Bus Status bit definition
214
#define TX_BID_ERROR         0x0080
215
#define READY_FOR_TX_NOW     0x0100
216
 
217
// The following block defines the ISQ event types
218
#define ISQ_RX_EVENT         0x0004
219
#define ISQ_TX_EVENT         0x0008
220
#define ISQ_BUFFER_EVENT     0x000C
221
#define ISQ_RX_MISS_EVENT    0x0010
222
#define ISQ_TX_COL_EVENT     0x0012
223
 
224
#define ISQ_EVENT_MASK       0x003F          // ISQ mask to find out type of event
225
 
226
// Ports for I/O-Mode
227
#define RX_FRAME_PORT        0x0000
228
#define TX_FRAME_PORT        0x0000
229
#define TX_CMD_PORT          0x0004
230
#define TX_LEN_PORT          0x0006
231
#define ISQ_PORT             0x0008
232
#define ADD_PORT             0x000A
233
#define DATA_PORT            0x000C
234
 
235
#define AUTOINCREMENT        0x8000          // Bit mask to set Bit-15 for autoincrement
236
 
237
// EEProm Commands
238
#define EEPROM_WRITE_EN      0x00F0
239
#define EEPROM_WRITE_DIS     0x0000
240
#define EEPROM_WRITE_CMD     0x0100
241
#define EEPROM_READ_CMD      0x0200
242
 
243
// Receive Header of each packet in receive area of memory for DMA-Mode
244
#define RBUF_EVENT_LOW       0x0000          // Low byte of RxEvent
245
#define RBUF_EVENT_HIGH      0x0001          // High byte of RxEvent
246
#define RBUF_LEN_LOW         0x0002          // Length of received data - low byte
247
#define RBUF_LEN_HI          0x0003          // Length of received data - high byte
248
#define RBUF_HEAD_LEN        0x0004          // Length of this header
249
 
250
// typedefs
251
typedef struct {                             // struct to store CS8900's
252
  unsigned int Addr;                         // init-sequence
253
  unsigned int Data;
254
} TInitSeq;
255
 
256
unsigned short ticks;
257
 
258
static void skip_frame(void);
259
 
260
const TInitSeq InitSeq[] =
261
{
262
  PP_IA,       UIP_ETHADDR0 + (UIP_ETHADDR1 << 8),     // set our MAC as Individual Address
263
  PP_IA + 2,   UIP_ETHADDR2 + (UIP_ETHADDR3 << 8),
264
  PP_IA + 4,   UIP_ETHADDR4 + (UIP_ETHADDR5 << 8),
265
  PP_LineCTL,  SERIAL_RX_ON | SERIAL_TX_ON,           // configure the Physical Interface
266
  PP_RxCTL,    RX_OK_ACCEPT | RX_IA_ACCEPT | RX_BROADCAST_ACCEPT
267
};
268
 
269
// Writes a word in little-endian byte order to a specified port-address
270
void
271
cs8900a_write(unsigned addr, unsigned int data)
272
{
273
  GPIO_IODIR |= 0xff << 16;                           // Data port to output
274
 
275
  GPIO_IOCLR = 0xf << 4;                              // Put address on bus
276
  GPIO_IOSET = addr << 4;
277
 
278
  GPIO_IOCLR = 0xff << 16;                            // Write low order byte to data bus
279
  GPIO_IOSET = data << 16;
280
 
281
  asm volatile ( "NOP" );
282
  GPIO_IOCLR = IOW;                                   // Toggle IOW-signal
283
  asm volatile ( "NOP" );
284
  GPIO_IOSET = IOW;
285
  asm volatile ( "NOP" );
286
 
287
  GPIO_IOCLR = 0xf << 4;
288
  GPIO_IOSET = ((addr | 1) << 4);                     // And put next address on bus
289
 
290
  GPIO_IOCLR = 0xff << 16;                            // Write high order byte to data bus
291
  GPIO_IOSET = data >> 8 << 16;
292
 
293
  asm volatile ( "NOP" );
294
  GPIO_IOCLR = IOW;                                   // Toggle IOW-signal
295
  asm volatile ( "NOP" );
296
  GPIO_IOSET = IOW;
297
  asm volatile ( "NOP" );
298
}
299
 
300
// Reads a word in little-endian byte order from a specified port-address
301
unsigned
302
cs8900a_read(unsigned addr)
303
{
304
  unsigned int value;
305
 
306
  GPIO_IODIR &= ~(0xff << 16);                        // Data port to input
307
 
308
  GPIO_IOCLR = 0xf << 4;                              // Put address on bus
309
  GPIO_IOSET = addr << 4;
310
 
311
  asm volatile ( "NOP" );
312
  GPIO_IOCLR = IOR;                                   // IOR-signal low
313
  asm volatile ( "NOP" );
314
  value = (GPIO_IOPIN >> 16) & 0xff;                  // get low order byte from data bus
315
  GPIO_IOSET = IOR;
316
 
317
  GPIO_IOSET = 1 << 4;                                // IOR high and put next address on bus
318
 
319
  asm volatile ( "NOP" );
320
  GPIO_IOCLR = IOR;                                   // IOR-signal low
321
  asm volatile ( "NOP" );
322
  value |= ((GPIO_IOPIN >> 8) & 0xff00);              // get high order byte from data bus
323
  GPIO_IOSET = IOR;                                   // IOR-signal low
324
 
325
  return value;
326
}
327
 
328
// Reads a word in little-endian byte order from a specified port-address
329
unsigned
330
cs8900a_read_addr_high_first(unsigned addr)
331
{
332
  unsigned int value;
333
 
334
  GPIO_IODIR &= ~(0xff << 16);                        // Data port to input
335
 
336
  GPIO_IOCLR = 0xf << 4;                              // Put address on bus
337
  GPIO_IOSET = (addr+1) << 4;
338
 
339
  asm volatile ( "NOP" );
340
  GPIO_IOCLR = IOR;                                   // IOR-signal low
341
  asm volatile ( "NOP" );
342
  value = ((GPIO_IOPIN >> 8) & 0xff00);               // get high order byte from data bus
343
  GPIO_IOSET = IOR;                                   // IOR-signal high
344
 
345
  GPIO_IOCLR = 1 << 4;                                // Put low address on bus
346
 
347
  asm volatile ( "NOP" );
348
  GPIO_IOCLR = IOR;                                   // IOR-signal low
349
  asm volatile ( "NOP" );
350
  value |= (GPIO_IOPIN >> 16) & 0xff;                 // get low order byte from data bus
351
  GPIO_IOSET = IOR;
352
 
353
  return value;
354
}
355
 
356
void
357
cs8900a_init(void)
358
{
359
  int i;
360
 
361
  // Reset outputs, control lines high
362
  GPIO_IOSET = IOR | IOW;
363
 
364
  // No LEDs on.
365
  GPIO_IOSET = LED_RED | LED_YELLOW | LED_GREEN;
366
 
367
  // Port 3 as output (all pins but RS232)
368
  GPIO_IODIR = ~0U; // everything to output.
369
 
370
  // Reset outputs
371
  GPIO_IOCLR = 0xff << 16;  // clear data outputs
372
 
373
  // Reset the CS8900A
374
  cs8900a_write(ADD_PORT, PP_SelfCTL);
375
  cs8900a_write(DATA_PORT, POWER_ON_RESET);
376
 
377
  // Wait until chip-reset is done
378
  cs8900a_write(ADD_PORT, PP_SelfST);
379
  while ((cs8900a_read(DATA_PORT) & INIT_DONE) == 0)
380
    ;
381
 
382
  // Configure the CS8900A
383
  for (i = 0; i < sizeof InitSeq / sizeof (TInitSeq); ++i)
384
    {
385
      cs8900a_write(ADD_PORT, InitSeq[i].Addr);
386
      cs8900a_write(DATA_PORT, InitSeq[i].Data);
387
    }
388
}
389
 
390
void
391
cs8900a_send(void)
392
{
393
  unsigned u;
394
 
395
  GPIO_IOCLR = LED_RED;  // Light RED LED when frame starting
396
 
397
  // Transmit command
398
  cs8900a_write(TX_CMD_PORT, TX_START_ALL_BYTES);
399
  cs8900a_write(TX_LEN_PORT, uip_len);
400
 
401
  // Maximum number of retries
402
  u = 8;
403
  for (;;)
404
    {
405
      // Check for avaliable buffer space
406
      cs8900a_write(ADD_PORT, PP_BusST);
407
      if (cs8900a_read(DATA_PORT) & READY_FOR_TX_NOW)
408
        break;
409
      if (u -- == 0)
410
        {
411
          GPIO_IOSET = LED_RED;  // Extinguish RED LED on end of frame
412
          return;
413
        }
414
 
415
      // No space avaliable, skip a received frame and try again
416
      skip_frame();
417
    }
418
 
419
  GPIO_IODIR |= 0xff << 16;                           // Data port to output
420
 
421
  // Send 40+14=54 bytes of header
422
  for (u = 0; u < 54; u += 2)
423
    {
424
      GPIO_IOCLR = 0xf << 4;                              // Put address on bus
425
      GPIO_IOSET = TX_FRAME_PORT << 4;
426
 
427
      GPIO_IOCLR = 0xff << 16;                            // Write low order byte to data bus
428
      GPIO_IOSET = uip_buf[u] << 16;                      // write low order byte to data bus
429
 
430
      asm volatile ( "NOP" );
431
      GPIO_IOCLR = IOW;                                   // Toggle IOW-signal
432
      asm volatile ( "NOP" );
433
      GPIO_IOSET = IOW;
434
 
435
      GPIO_IOCLR = 0xf << 4;                              // Put address on bus
436
      GPIO_IOSET = (TX_FRAME_PORT | 1) << 4;              // and put next address on bus
437
 
438
      GPIO_IOCLR = 0xff << 16;                            // Write low order byte to data bus
439
      GPIO_IOSET = uip_buf[u+1] << 16;                    // write low order byte to data bus
440
 
441
      asm volatile ( "NOP" );
442
          GPIO_IOCLR = IOW;                                   // Toggle IOW-signal
443
      asm volatile ( "NOP" );
444
      GPIO_IOSET = IOW;
445
    }
446
 
447
  if (uip_len <= 54)
448
    {
449
      GPIO_IOSET = LED_RED;  // Extinguish RED LED on end of frame
450
      return;
451
    }
452
 
453
  // Send remainder of packet, the application data
454
  uip_len -= 54;
455
  for (u = 0; u < uip_len; u += 2)
456
    {
457
 
458
      GPIO_IOCLR = 0xf << 4;                          // Put address on bus
459
      GPIO_IOSET = TX_FRAME_PORT << 4;
460
 
461
      GPIO_IOCLR = 0xff << 16;                        // Write low order byte to data bus
462
      GPIO_IOSET = uip_appdata[u] << 16;              // write low order byte to data bus
463
 
464
      asm volatile ( "NOP" );
465
          GPIO_IOCLR = IOW;                               // Toggle IOW-signal
466
      asm volatile ( "NOP" );
467
      GPIO_IOSET = IOW;
468
 
469
      GPIO_IOCLR = 0xf << 4;                          // Put address on bus
470
      GPIO_IOSET = (TX_FRAME_PORT | 1) << 4;          // and put next address on bus
471
 
472
      GPIO_IOCLR = 0xff << 16;                        // Write low order byte to data bus
473
      GPIO_IOSET = uip_appdata[u+1] << 16;            // write low order byte to data bus
474
 
475
      asm volatile ( "NOP" );
476
          GPIO_IOCLR = IOW;                               // Toggle IOW-signal
477
      asm volatile ( "NOP" );
478
      GPIO_IOSET = IOW;
479
    }
480
 
481
  GPIO_IOSET = LED_RED;  // Extinguish RED LED on end of frame
482
}
483
 
484
static void
485
skip_frame(void)
486
{
487
  // No space avaliable, skip a received frame and try again
488
  cs8900a_write(ADD_PORT, PP_RxCFG);
489
  cs8900a_write(DATA_PORT, cs8900a_read(DATA_PORT) | SKIP_1);
490
}
491
 
492
u8_t
493
cs8900a_poll(void)
494
{
495
  u16_t len, u;
496
 
497
  // Check receiver event register to see if there are any valid frames avaliable
498
  cs8900a_write(ADD_PORT, PP_RxEvent);
499
  if ((cs8900a_read(DATA_PORT) & 0xd00) == 0)
500
    return 0;
501
 
502
  GPIO_IOCLR = LED_GREEN;  // Light GREED LED when frame coming in.
503
 
504
  // Read receiver status and discard it.
505
  cs8900a_read_addr_high_first(RX_FRAME_PORT);
506
 
507
  // Read frame length
508
  len = cs8900a_read_addr_high_first(RX_FRAME_PORT);
509
 
510
  // If the frame is too big to handle, throw it away
511
  if (len > UIP_BUFSIZE)
512
    {
513
      skip_frame();
514
      return 0;
515
    }
516
 
517
  // Data port to input
518
  GPIO_IODIR &= ~(0xff << 16);
519
 
520
  GPIO_IOCLR = 0xf << 4;                          // put address on bus
521
  GPIO_IOSET = RX_FRAME_PORT << 4;
522
 
523
  // Read bytes into uip_buf
524
  u = 0;
525
  while (u < len)
526
    {
527
      GPIO_IOCLR = 1 << 4;                            // put address on bus
528
 
529
      GPIO_IOCLR = IOR;                               // IOR-signal low
530
      uip_buf[u] = GPIO_IOPIN >> 16;                // get high order byte from data bus
531
      asm volatile ( "NOP" );
532
      GPIO_IOSET = IOR;                               // IOR-signal high
533
 
534
      GPIO_IOSET = 1 << 4;                            // put address on bus
535
 
536
      GPIO_IOCLR = IOR;                               // IOR-signal low
537
      asm volatile ( "NOP" );
538
      uip_buf[u+1] = GPIO_IOPIN >> 16;                  // get high order byte from data bus
539
      GPIO_IOSET = IOR;                               // IOR-signal high
540
      u += 2;
541
    }
542
 
543
  GPIO_IOSET = LED_GREEN;  // Extinguish GREED LED when frame finished.
544
  return len;
545
}
546
 

powered by: WebSVN 2.1.0

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