From 244a51086c20dbd937dd21f1eb9c4b74acc5a3c9 Mon Sep 17 00:00:00 2001 From: Alex AUVOLAT Date: Tue, 5 Nov 2013 18:29:27 +0100 Subject: More simplifcation passes... --- tests/Makefile | 2 +- tests/clockHMS.mj | 37 ++++++++++++++++++------------------- 2 files changed, 19 insertions(+), 20 deletions(-) (limited to 'tests') diff --git a/tests/Makefile b/tests/Makefile index 443e86a..0721dab 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -7,7 +7,7 @@ SIM=../csim/csim %.sim: %.dumb $(SIM) $< -%.dumb %_sch.net: %.net +%.dumb %_sch.net %_opt.dumb %_sch_opt.net: %.net $(SCHED) $< %.net: %.mj diff --git a/tests/clockHMS.mj b/tests/clockHMS.mj index 27f96ea..a25a85c 100644 --- a/tests/clockHMS.mj +++ b/tests/clockHMS.mj @@ -13,19 +13,18 @@ repeat(a) = (x:[n]) where end where fulladder(a,b,c) = (s, r) where - s = (a ^ b) ^ c; - r = (a & b) + ((a ^ b) & c); + s = (a ^ b) ^ c; + r = (a & b) + ((a ^ b) & c); end where adder(a:[n], b:[n], c_in) = (o:[n], c_out) where - if n = 0 then - o = []; - c_out = 0 - else - (s_n, c_n1) = fulladder(a[0], b[0], c_in); - (s_n1, c_out) = adder(a[1..], b[1..], c_n1); - o = s_n . s_n1 - end if + if n = 1 then + (o, c_out) = fulladder(a[0], b[0], c_in) + else + (s_n, c_n1) = fulladder(a[0], b[0], c_in); + (s_n1, c_out) = adder(a[1..], b[1..], c_n1); + o = s_n . s_n1 + end if end where equal(a:[n]) = (eq) where @@ -41,29 +40,29 @@ equal(a:[n]) = (eq) where end where reg_n(a:[n]) = (r:[n]) where - if n = 0 then - r = [] + if n = 1 then + r = reg a[0] else - r = (reg a[0]) . (reg_n(r[1..])) + r = (reg a[0]) . (reg_n(a[1..])) end if end where and_each(a, b:[n]) = (o:[n]) where - if n = 0 then - o = [] + if n = 1 then + o = b[0] and a else o = (b[0] and a) . and_each(a, b[1..]) end if end where count_mod(in:[n]) = (out:[n]) where - neq = not (equal(in)); (incr, carry) = adder(in, 1 . repeat(0), 0); + neq = not (equal(incr)); out = and_each(neq, incr) end where -main() = (ret:[2],out:[2]) where - out = count_mod<2, 3>(ret); - ret = reg_n<2>(out) +main() = (out:[4],next:[4]) where + next = count_mod<4, 12>(out); + out = reg_n<4>(next) end where -- cgit v1.2.3