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

Subversion Repositories or1k

[/] [or1k/] [tags/] [nog_patch_47/] [or1ksim/] [peripheral/] [test.c] - Diff between revs 1359 and 1361

Go to most recent revision | Show entire file | Details | Blame | View Log

Rev 1359 Rev 1361
Line 10... Line 10...
#include "arch.h"
#include "arch.h"
#include "sim-config.h"
#include "sim-config.h"
#include "abstract.h"
#include "abstract.h"
#include "except.h"
#include "except.h"
 
 
 
struct test_config {
uint32_t array[128];
uint32_t array[128];
 
  oraddr_t baseaddr;
 
};
 
 
/* Test write */
/* Test write */
void test_write32 (oraddr_t addr, uint32_t value, void *dat)
void test_write32 (oraddr_t addr, uint32_t value, void *dat)
{
{
 
  struct test_config *test = dat;
 
 
  if (addr & 0x00000080)
  if (addr & 0x00000080)
    array[addr & 0x7f] = value;
    test->array[addr & 0x7f] = value;
  else
  else
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
}
}
 
 
/* Test read */
/* Test read */
uint32_t test_read32 (oraddr_t addr, void *dat)
uint32_t test_read32 (oraddr_t addr, void *dat)
{
{
 
  struct test_config *test = dat;
 
 
  if (addr & 0x00000080)
  if (addr & 0x00000080)
    return ~array[addr & 0x7f];
    return ~test->array[addr & 0x7f];
  else
  else
    except_handle(EXCEPT_BUSERR, cur_vadd);
    except_handle(EXCEPT_BUSERR, cur_vadd);
    return 0x00000000;
    return 0x00000000;
}
}
 
 
void test_reset ()
void test_reset (void *dat)
{
{
 
  struct test_config *test = dat;
  int i;
  int i;
 
 
  for (i = 0; i < 128; i++)
  for (i = 0; i < 128; i++)
    array[i] = 0x00000000;
    test->array[i] = 0x00000000;
 
 
  if (config.test.enabled) {
 
    if (config.test.baseaddr)
 
      register_memoryarea(config.test.baseaddr, 256, 4, 0, test_read32, test_write32, NULL);
 
  }
 
}
}
 
 
/*---------------------------------------------------[ Test configuration ]---*/
/*---------------------------------------------------[ Test configuration ]---*/
void test_enabled(union param_val val, void *dat)
void test_baseaddr(union param_val val, void *dat)
{
{
  config.test.enabled = val.int_val;
  struct test_config *test = dat;
 
  test->baseaddr = val.addr_val;
}
}
 
 
void test_baseaddr(union param_val val, void *dat)
void *test_sec_start(void)
 
{
 
  struct test_config *test = malloc(sizeof(struct test_config));
 
 
 
  if(!test) {
 
    fprintf(stderr, "Peripheral Test: Run out of memory\n");
 
    exit(-1);
 
  }
 
 
 
  test->baseaddr = 0;
 
 
 
  return test;
 
}
 
 
 
void test_sec_end(void *dat)
{
{
  config.test.baseaddr = val.addr_val;
  struct test_config *test = dat;
 
  if(test->baseaddr)
 
    register_memoryarea(test->baseaddr, 256, 4, 0, test_read32, test_write32, NULL);
 
  reg_sim_reset(test_reset, dat);
}
}
 
 
void reg_test_sec(void)
void reg_test_sec(void)
{
{
  struct config_section *sec = reg_config_sec("test", NULL, NULL);
  struct config_section *sec = reg_config_sec("test", test_sec_start,
 
                                              test_sec_end);
 
 
  reg_config_param(sec, "enabled", paramt_int, test_enabled);
 
  reg_config_param(sec, "baseaddr", paramt_addr, test_baseaddr);
  reg_config_param(sec, "baseaddr", paramt_addr, test_baseaddr);
}
}
 
 
 No newline at end of file
 No newline at end of file

powered by: WebSVN 2.1.0

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