summaryrefslogtreecommitdiff
path: root/cpu/alu.ml
diff options
context:
space:
mode:
authorAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-03 19:05:10 +0100
committerAlex AUVOLAT <alex.auvolat@ens.fr>2014-01-03 19:05:10 +0100
commit1ff268ab13dd299c4cdc1e379df5397bd6a394e3 (patch)
tree014db93062f26cdfe2d2639fd833afd554e94a66 /cpu/alu.ml
parentc46fe12e47c405fbb03f0c93121402d873bc470e (diff)
downloadSystDigit-Projet-1ff268ab13dd299c4cdc1e379df5397bd6a394e3.tar.gz
SystDigit-Projet-1ff268ab13dd299c4cdc1e379df5397bd6a394e3.zip
Added simulator monitor tool.
Diffstat (limited to 'cpu/alu.ml')
-rw-r--r--cpu/alu.ml27
1 files changed, 17 insertions, 10 deletions
diff --git a/cpu/alu.ml b/cpu/alu.ml
index a0115a4..7356fbb 100644
--- a/cpu/alu.ml
+++ b/cpu/alu.ml
@@ -12,6 +12,18 @@ let rec eq_c n v c = (* v is a value, c is a constant *)
else
(eq_c 1 (v ** 0) (c mod 2)) ^& (eq_c (n-1) (v % (1, n-1)) (c/2))
+let rec all1 n x =
+ if n = 1 then
+ x
+ else
+ (x ** 0) ^& (all1 (n-1) (x % (1, n-1)))
+
+let rec nonnull n a =
+ if n = 1 then
+ a
+ else
+ (a ** 0) ^| (nonnull (n-1) (a % (1, n-1)))
+
let rec sign_extend n_a n_dest a =
a ++ rep (n_dest - n_a) (a ** (n_a - 1))
@@ -27,23 +39,18 @@ let rec nadder n a b c_in =
let s_n1, c_out = nadder (n-1) (a % (1, n-1)) (b % (1, n-1)) c_n1 in
s_n ++ s_n1, c_out
+let rec npshift_signed n p a b =
+ a (* TODO *)
+
let nadder_nocarry n a b =
let a, b = nadder n a b (const "0") in
ignore b a
let rec eq_n n a b =
- if n = 1 then
- not (a ^^ b)
- else
- (not ((a ** 0) ^^ (b ** 0)))
- ^& (eq_n (n-1) (a % (1, n-1)) (b % (1, n-1)))
+ all1 n (not (a ^^ b))
let rec ne_n n a b =
- if n = 1 then
- a ^^ b
- else
- ((a ** 0) ^^ (b ** 0))
- ^| (ne_n (n-1) (a % (1, n-1)) (b % (1, n-1)))
+ nonnull n (a ^^ b)
let rec lt_n n a b =
const "0" (* TODO : less than *)