diff --git a/dataflow_neuro/cell_lib_async.act b/dataflow_neuro/cell_lib_async.act index 1e424af..e6b8e6a 100644 --- a/dataflow_neuro/cell_lib_async.act +++ b/dataflow_neuro/cell_lib_async.act @@ -478,6 +478,24 @@ namespace tmpl { p_n_mode <- 1; y {-1}} } + export defcell arbiter_handshake(bool in1_r, in1_a,in2_r, in2_a out_r, out_a) + { + bool _u, _v; + A_2C_B_X1 cel1(.c1 = out_a,.c2 = v,.y = in1_a); + A_2C_B_X1 cel2(.c1 = out_a,.c2 = u,.y = in2_a); + prs { + [keeper=0] in1_v & _v -> _u- + [keeper=0] ~in1_v | ~_v -> _u+ + [keeper=0] in2_v & _u -> _v- + [keeper=0] ~in2_v | ~_u -> _v+ + [keeper=0] ~_u | ~in2_a => u+ + [keeper=0] ~_v | ~in1_a => v+ + [keeper=0] u | v => out_r + } + spec { + mk_excllo(_u, _v) + } + } }} diff --git a/test/unit_tests/arbiter_2/test.act b/test/unit_tests/arbiter_2/test.act new file mode 100644 index 0000000..1d0f676 --- /dev/null +++ b/test/unit_tests/arbiter_2/test.act @@ -0,0 +1,33 @@ +defproc arbiter (bool a, b, u, v) +{ + bool _u, _v; + prs { + [keeper=0] a & _v -> _u- + [keeper=0] ~a | ~_v -> _u+ + [keeper=0] b & _u -> _v- + [keeper=0] ~b | ~_u -> _v+ + [keeper=0] _u => u- + [keeper=0] _v => v- + } + spec { + mk_excllo(_u, _v) + } +} + +bool Reset; + +defproc driver(bool r, a) +{ + prs { + Reset | a => r- + } +} + + +defproc test() +{ + driver d1, d2; + arbiter a(d1.r, d2.r, d1.a, d2.a); +} + +test t; diff --git a/test/unit_tests/arbiter_2/test.prsim b/test/unit_tests/arbiter_2/test.prsim new file mode 100644 index 0000000..7192820 --- /dev/null +++ b/test/unit_tests/arbiter_2/test.prsim @@ -0,0 +1,8 @@ +watchall +cycle +set Reset 0 +cycle + +status X +mode run +system "echo 'finished'" \ No newline at end of file