summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Makefile6
-rw-r--r--tb/sim/fibonacci.c13
-rw-r--r--tb/sim/fibonacci.py15
3 files changed, 31 insertions, 3 deletions
diff --git a/Makefile b/Makefile
index 0a55b3d..abdd99e 100644
--- a/Makefile
+++ b/Makefile
@@ -30,8 +30,8 @@ $(VCD_DIR)/%:
sim: $(patsubst $(SIM_DIR)/%.py,sim/%,$(filter-out $(SIM_DIR)/sim.py,$(wildcard $(SIM_DIR)/*.py)))
-sim/%: $(SIM_DIR)/sim.py $(SIM_DIR)/%.py $(OBJ_DIR)/$(TOP)/V$(TOP) $(SIM_OBJ_DIR)/%.bin
- $^
+sim/%: $(SIM_DIR)/sim.py $(SIM_DIR)/%.py exe/$(TOP) $(SIM_OBJ_DIR)/%.bin
+ $< $(SIM_DIR)/$*.py $(OBJ_DIR)/$(TOP)/V$(TOP) $(SIM_OBJ_DIR)/$*.bin
$(SIM_OBJ_DIR)/%.bin: $(SIM_OBJ_DIR)/%
$(CROSS_OBJCOPY) -O binary --only-section=._img $< $@
@@ -52,7 +52,7 @@ exe: exe/$(TOP)
exe/%: $(OBJ_DIR)/%/V%.mk
$(MAKE) -C $(OBJ_DIR)/$* -f V$*.mk
-.PRECIOUS: $(SIM_OBJ_DIR)/%
+.PRECIOUS: $(SIM_OBJ_DIR)/% $(SIM_OBJ_DIR)/%.o $(SIM_OBJ_DIR)/%.bin
.SECONDEXPANSION:
$(OBJ_DIR)/%.mk: \
diff --git a/tb/sim/fibonacci.c b/tb/sim/fibonacci.c
new file mode 100644
index 0000000..f02398a
--- /dev/null
+++ b/tb/sim/fibonacci.c
@@ -0,0 +1,13 @@
+void reset()
+{
+ int a = 1, b = 1, *p = (int*)0x00010000;
+
+ for(int i = 0; i < 20; ++i)
+ {
+ int c = a + b;
+
+ *p++ = a;
+ a = b;
+ b = c;
+ }
+}
diff --git a/tb/sim/fibonacci.py b/tb/sim/fibonacci.py
new file mode 100644
index 0000000..48a17d8
--- /dev/null
+++ b/tb/sim/fibonacci.py
@@ -0,0 +1,15 @@
+BASE = 0x0001_0000
+COUNT = 20
+
+mem_dumps = [range(BASE, BASE + 4 * COUNT)]
+
+def final():
+ words = []
+ a, b = 1, 1
+
+ for _ in range(COUNT):
+ words.append(a)
+ c = a + b
+ a, b = b, c
+
+ assert_mem(BASE, words)