From 191eaea25cf569ad9c5fb12b8755ae6400750e58 Mon Sep 17 00:00:00 2001 From: Kimplul Date: Sun, 30 Apr 2023 16:03:55 +0300 Subject: initial --- tests/simple_mem/bus.c | 29 ++++++++++++++++++++ tests/simple_mem/many.c | 28 +++++++++++++++++++ tests/simple_mem/no_bus.c | 24 +++++++++++++++++ tests/simple_mem/source.mk | 17 ++++++++++++ tests/simple_mem/traffic_gen.c | 61 ++++++++++++++++++++++++++++++++++++++++++ tests/simple_mem/traffic_gen.h | 9 +++++++ tests/source.mk | 1 + 7 files changed, 169 insertions(+) create mode 100644 tests/simple_mem/bus.c create mode 100644 tests/simple_mem/many.c create mode 100644 tests/simple_mem/no_bus.c create mode 100644 tests/simple_mem/source.mk create mode 100644 tests/simple_mem/traffic_gen.c create mode 100644 tests/simple_mem/traffic_gen.h create mode 100644 tests/source.mk (limited to 'tests') diff --git a/tests/simple_mem/bus.c b/tests/simple_mem/bus.c new file mode 100644 index 0000000..fa2ffad --- /dev/null +++ b/tests/simple_mem/bus.c @@ -0,0 +1,29 @@ +#include + +#include +#include +#include +#include + +#include "traffic_gen.h" + +int main() +{ + const size_t size = 100000; + const uintptr_t addr = 100000; + struct component *simple_mem = create_simple_mem(size); + struct component *simple_bus = create_simple_bus(); + simple_bus_add(simple_bus, simple_mem, addr, size); + + struct component *traffic_gen = create_traffic_gen(simple_mem, addr, size); + + struct clock_domain *clk = create_clock_domain(NS(1)); + clock_domain_add(clk, traffic_gen); + + struct gran_root *root = create_root(); + root_add_clock(root, clk); + + assert(root_run(root) == OK); + + destroy_root(root); +} diff --git a/tests/simple_mem/many.c b/tests/simple_mem/many.c new file mode 100644 index 0000000..6754ebb --- /dev/null +++ b/tests/simple_mem/many.c @@ -0,0 +1,28 @@ +#include + +#include +#include +#include + +#include "traffic_gen.h" + +int main() +{ + const size_t size = 100000; + struct component *simple_mem1 = create_simple_mem(size); + struct component *simple_mem2 = create_simple_mem(size); + + struct component *traffic_gen1 = create_traffic_gen(simple_mem1, 0, size); + struct component *traffic_gen2 = create_traffic_gen(simple_mem2, 0, size); + + struct clock_domain *clk = create_clock_domain(NS(1)); + clock_domain_add(clk, traffic_gen1); + clock_domain_add(clk, traffic_gen2); + + struct gran_root *root = create_root(); + root_add_clock(root, clk); + + assert(root_run(root) == OK); + + destroy_root(root); +} diff --git a/tests/simple_mem/no_bus.c b/tests/simple_mem/no_bus.c new file mode 100644 index 0000000..df7888e --- /dev/null +++ b/tests/simple_mem/no_bus.c @@ -0,0 +1,24 @@ +#include + +#include +#include +#include + +#include "traffic_gen.h" + +int main() +{ + const size_t size = 100000; + struct component *simple_mem = create_simple_mem(size); + struct component *traffic_gen = create_traffic_gen(simple_mem, 0, size); + + struct clock_domain *clk = create_clock_domain(NS(1)); + clock_domain_add(clk, traffic_gen); + + struct gran_root *root = create_root(); + root_add_clock(root, clk); + + assert(root_run(root) == OK); + + destroy_root(root); +} diff --git a/tests/simple_mem/source.mk b/tests/simple_mem/source.mk new file mode 100644 index 0000000..1c19967 --- /dev/null +++ b/tests/simple_mem/source.mk @@ -0,0 +1,17 @@ +TEST_OBJS != ./scripts/gen-deps --sources "tests/simple_mem/traffic_gen.c" +NO_BUS_TEST_OBJ != ./scripts/gen-deps --sources "tests/simple_mem/no_bus.c" +BUS_TEST_OBJ != ./scripts/gen-deps --sources "tests/simple_mem/bus.c" +MANY_TEST_OBJ != ./scripts/gen-deps --sources "tests/simple_mem/many.c" + +TEST_PROGS += build/tests/simple_mem/no_bus \ + build/tests/simple_mem/bus \ + build/tests/simple_mem/many + +build/tests/simple_mem/no_bus: $(NO_BUS_TEST_OBJ) $(TEST_OBJS) $(OBJS) + $(COMPILE) $(NO_BUS_TEST_OBJ) $(TEST_OBJS) $(OBJS) -o $@ + +build/tests/simple_mem/bus: $(BUS_TEST_OBJ) $(TEST_OBJS) $(OBJS) + $(COMPILE) $(BUS_TEST_OBJ) $(TEST_OBJS) $(OBJS) -o $@ + +build/tests/simple_mem/many: $(MANY_TEST_OBJ) $(TEST_OBJS) $(OBJS) + $(COMPILE) $(MANY_TEST_OBJ) $(TEST_OBJS) $(OBJS) -o $@ diff --git a/tests/simple_mem/traffic_gen.c b/tests/simple_mem/traffic_gen.c new file mode 100644 index 0000000..4d14d12 --- /dev/null +++ b/tests/simple_mem/traffic_gen.c @@ -0,0 +1,61 @@ +#include +#include + +#include + +#include "traffic_gen.h" + +struct traffic_gen { + struct component component; + struct component *stress; + uintptr_t addr; + uintptr_t end; + + size_t counter; +}; + +static stat traffic_gen_clock(struct traffic_gen *tg) +{ + if (tg->addr == tg->end) + return DONE; + + uint8_t c = 0; + switch (tg->counter) { + case 0: + assert(write_u8(tg->stress, tg->addr, 13) == OK); + tg->counter = 1; + break; + + case 1: + c = 0; + assert(read_u8(tg->stress, tg->addr, &c) == OK); + assert(c == 13); + tg->counter = 0; + tg->addr++; + break; + } + + return OK; +} + +void traffic_gen_destroy(struct traffic_gen *tg) +{ + destroy(tg->stress); + free(tg); +} + +struct component *create_traffic_gen(struct component *stress, uintptr_t start, size_t size) +{ + struct traffic_gen *new = calloc(1, sizeof(struct traffic_gen)); + if (!new) + return NULL; + + new->stress = stress; + new->addr = start; + new->end = start + size; + new->counter = 0; + + new->component.clock = (clock_callback)traffic_gen_clock; + new->component.destroy = (destroy_callback)traffic_gen_destroy; + return (struct component *)new; +} diff --git a/tests/simple_mem/traffic_gen.h b/tests/simple_mem/traffic_gen.h new file mode 100644 index 0000000..9875bae --- /dev/null +++ b/tests/simple_mem/traffic_gen.h @@ -0,0 +1,9 @@ +#ifndef EXSIM_TRAFFIC_GEN_H +#define EXSIM_TRAFFIC_GEN_H + +#include +#include + +struct component *create_traffic_gen(struct component *, uintptr_t, size_t); + +#endif /* EXSIM_TRAFFIC_GEN_H */ diff --git a/tests/source.mk b/tests/source.mk new file mode 100644 index 0000000..51e33c2 --- /dev/null +++ b/tests/source.mk @@ -0,0 +1 @@ +include tests/*/source.mk -- cgit v1.3