aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorWojciech Kosior <kwojtus@protonmail.com>2020-09-02 11:35:12 +0200
committerWojciech Kosior <kwojtus@protonmail.com>2020-09-02 11:35:12 +0200
commitf0880f17022ddb755b24b1a34b14fbf5a3491e78 (patch)
tree3801af866ac889c6ba03bc1ec5f70a16666435d3
parented6090899a095bab4e422fc0776ee6ccb97ffd44 (diff)
downloadAGH-engineering-thesis-f0880f17022ddb755b24b1a34b14fbf5a3491e78.tar.gz
AGH-engineering-thesis-f0880f17022ddb755b24b1a34b14fbf5a3491e78.zip
add bench for cond_jump instruction
-rw-r--r--Makefile3
-rwxr-xr-xtests/stack_machine_cond_jump/instructions.s.tcl45
l---------tests/stack_machine_cond_jump/test.v1
-rw-r--r--tests/stack_machine_cond_jump/words_to_verify.mem9
-rw-r--r--tests/stack_machine_store/test.v6
5 files changed, 60 insertions, 4 deletions
diff --git a/Makefile b/Makefile
index d2f954d..b6d4841 100644
--- a/Makefile
+++ b/Makefile
@@ -20,7 +20,8 @@ STACK_MACHINE_TESTS := \
mul \
jump \
tee \
- swap
+ swap \
+ cond_jump
# Add other tests here if You need
TESTS := \
diff --git a/tests/stack_machine_cond_jump/instructions.s.tcl b/tests/stack_machine_cond_jump/instructions.s.tcl
new file mode 100755
index 0000000..467a719
--- /dev/null
+++ b/tests/stack_machine_cond_jump/instructions.s.tcl
@@ -0,0 +1,45 @@
+#!/usr/bin/env tclsh
+
+source tclasm.tcl
+
+## also look at stack_machine_jump test
+
+## we're going to write numbers from 0 to 7 to addresses h400 - h41C
+
+# this will translate to 3 16-bit instructions
+set_sp h7FFFC
+
+## set up the counter
+# each of those 2 will translate to 1 16-bit instruction
+const 0
+stack down
+
+## this is the point we later jump to, address 10
+
+tee
+## compute address: counter * 4 + h400
+stack down
+const 4
+mul
+const h400
+add
+stack up
+## load computed address to im
+exchange_im
+## save value of counter at address pointed by im
+swap
+store
+swap
+## increase counter by 1
+const 1
+add
+## compare value of counter to 8
+tee
+stack down
+const 8
+sub
+stack up
+## loop if counter != 8
+cond_jump 10
+
+halt
diff --git a/tests/stack_machine_cond_jump/test.v b/tests/stack_machine_cond_jump/test.v
new file mode 120000
index 0000000..f5b6a59
--- /dev/null
+++ b/tests/stack_machine_cond_jump/test.v
@@ -0,0 +1 @@
+../stack_machine_store/test.v \ No newline at end of file
diff --git a/tests/stack_machine_cond_jump/words_to_verify.mem b/tests/stack_machine_cond_jump/words_to_verify.mem
new file mode 100644
index 0000000..4b77b8a
--- /dev/null
+++ b/tests/stack_machine_cond_jump/words_to_verify.mem
@@ -0,0 +1,9 @@
+// address value
+ 00400 0 // verify the first number written
+ 00402 0
+
+ 00408 2 // verify a number in the middle
+ 0040A 0
+
+ 0041C 7 // verify the last number
+ 0041E 0
diff --git a/tests/stack_machine_store/test.v b/tests/stack_machine_store/test.v
index b73e5de..7e7429f 100644
--- a/tests/stack_machine_store/test.v
+++ b/tests/stack_machine_store/test.v
@@ -103,7 +103,7 @@ module stack_machine_test();
CLK <= 0;
RST <= 1;
- for (i = 0; i < 1000; i++) begin
+ for (i = 0; i < 3500; i++) begin
#1;
CLK <= ~CLK;
@@ -132,9 +132,9 @@ module stack_machine_test();
$finish;
end // if (M_finished)
- end // for (i = 0; i < 1000; i++)
+ end // for (i = 0; i < 3500; i++)
- $display("error: cpu hasn't finished its operations in 500 ticks");
+ $display("error: cpu hasn't finished its operations in 1750 ticks");
$finish;
end // initial begin
endmodule // stack_machine_test