[<<][rtl][>>][..]
Fri May 25 19:10:21 EDT 2018

fix?


Added a fatal error for signals driven more than once.

Now, how to avoid this from happening by using a functional
representation?

Basically, create some kind of fix operator.

Again, a counter.


-- A counter from a register fixed point operator
counter' :: forall m r. RTL m r => r Sig -> m ()
counter' = regFix inc

regFix :: RTL m r => (r Sig -> m (r Sig)) -> r Sig -> m ()
regFix f r = f r >>= next r


So that's straightforward.

To create state machines it is still necessary to have a naked
'signal' that can set up the register in the first place.


Ok... so what's next?

I will have to represent state machines as functions with I/O.

E.g. two input, two output:

r Sig -> r Sig -> m (r Sig, r Sig)

For the code generator, open functions are definitely necessary, but
for the emulator it is ok to just work with traces for now.  A test
bench doesn't need an input.




[Reply][About]
[<<][rtl][>>][..]