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

Subversion Repositories ftdi_wb_bridge

[/] [ftdi_wb_bridge/] [trunk/] [sw/] [sdram_test.c] - Blame information for rev 2

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 2 ultra_embe
#include <stdio.h>
2
#include <sys/time.h> 
3
 
4
#include "ftdi_hw.h"
5
 
6
//-----------------------------------------------------------------
7
// Defines:
8
//-----------------------------------------------------------------
9
#define DEFAULT_FTDI_IFACE  1
10
#define BLOCK_SIZE  2048
11
 
12
#define MEM_SIZE    ((32 * 1024) / 4)
13
 
14
static uint32_t mem[MEM_SIZE];
15
 
16
//-----------------------------------------------------------------
17
// main
18
//-----------------------------------------------------------------
19
int main(void)
20
{
21
    uint32_t buffer[BLOCK_SIZE/4];
22
    uint32_t req;
23
    uint32_t resp;
24
    uint32_t addr;
25
    uint8_t gpio;
26
    struct timeval t1, t2;
27
    double elapsedTime;
28
    int res;
29
    int i;
30
 
31
    if (ftdi_hw_init(DEFAULT_FTDI_IFACE) != 0)
32
    {
33
        fprintf(stderr, "ERROR: Could not open FTDI interface, try SUDOing\n");
34
        return 0;
35
    }
36
 
37
    addr = 0x00000000;
38
    req = 0x12345678;
39
    ftdi_hw_mem_write_word(addr, req);
40
    ftdi_hw_mem_read_word(addr, &resp);
41
 
42
    if (req != resp)
43
    {
44
        printf("ERR0: %x != %x\n", req, resp);
45
    }
46
 
47
    addr = 0x00000004;
48
    req = 0xcafebabe;
49
    ftdi_hw_mem_write_word(addr, req);
50
    ftdi_hw_mem_read_word(addr, &resp);
51
 
52
    if (req != resp)
53
    {
54
        printf("ERR1: %x != %x\n", req, resp);
55
    }
56
 
57
    addr = 0x00000000;
58
    req = 0x12345678;
59
    ftdi_hw_mem_read_word(addr, &resp);
60
 
61
    if (req != resp)
62
    {
63
        printf("ERR2: %x != %x\n", req, resp);
64
    }
65
 
66
    for (i=0;i<MEM_SIZE;i++)
67
        mem[i] = 0;
68
 
69
    printf("Erasing memory\n");
70
    ftdi_hw_mem_write(0, (uint8_t*)mem, MEM_SIZE);
71
    printf("Erasing memory - done\n");
72
 
73
    // Start timer
74
    gettimeofday(&t1, NULL);
75
 
76
    int sent = 0;
77
    while (1)
78
    {
79
        // SINGLE
80
        if (rand() & 1)
81
        {
82
            addr = rand() & ((MEM_SIZE * 4) - 1);
83
            addr &= ~3;
84
 
85
            req = rand();
86
 
87
            ftdi_hw_mem_write(addr, (uint8_t*)&req, 4);
88
            ftdi_hw_mem_read(addr, (uint8_t*)&resp, 4);
89
            sent += 4;
90
 
91
            if (req != resp)
92
            {
93
                printf("ERR (RB): %x - %x != %x\n", addr, req, resp);
94
            }
95
 
96
            mem[addr/4] = req;
97
 
98
            addr = rand() & (MEM_SIZE - 1);
99
            addr &= ~3;
100
 
101
            ftdi_hw_mem_read(addr, (uint8_t*)&resp, 4);
102
            sent += (4 * 3);
103
 
104
            if (mem[addr/4] != resp)
105
            {
106
                printf("ERR (MEM): %x - %x != %x\n", addr, mem[addr/4], resp);
107
            }
108
        }
109
        // BLOCK
110
        else
111
        {
112
            addr = rand() & ((MEM_SIZE * 4) - 1);
113
            addr &= ~3;
114
 
115
            // Stop block from overflowing RAM
116
            if (addr > ((MEM_SIZE * 4) - BLOCK_SIZE))
117
                addr = ((MEM_SIZE * 4) - BLOCK_SIZE);
118
 
119
            for (i=0;i<BLOCK_SIZE / 4;i++)
120
            {
121
                buffer[i] = rand();
122
                mem[(addr/4)+i] = buffer[i];
123
            }
124
 
125
            // Write block
126
            ftdi_hw_mem_write(addr, (uint8_t*)&buffer, BLOCK_SIZE);
127
            sent += BLOCK_SIZE;
128
        }
129
 
130
        // Stop timer
131
        gettimeofday(&t2, NULL);
132
 
133
        elapsedTime = (t2.tv_sec - t1.tv_sec) * 1000.0;      // sec to ms
134
        elapsedTime += (t2.tv_usec - t1.tv_usec) / 1000.0;   // us to ms   
135
 
136
        if (((int)elapsedTime) >= 1000)
137
        {
138
            printf("%dKB/s\n", sent / 1024);
139
 
140
            gettimeofday(&t1, NULL);
141
            sent = 0;
142
        }
143
    }
144
 
145
    ftdi_hw_close();
146
    return 0;
147
}

powered by: WebSVN 2.1.0

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