Thu Aug 23 01:47:19 EDT 2018
Procedural / behavioral modeling
So what is it? What are the constructs? Is this just single-ended
ifs? ( Because unrolled macros are trivial ).
Coding at the RTL level means describing the hardware behavior in a
single clock cycle.
If an algorithm requires a number of steps, you have to code it as
an FSM so that the behavior depends on the state you are in. The
resulting code is fairly low level. For example, a loop is emulated
by explicit transitions between states.
However, there is an interesting special case. When the algorithm is
simple enough to complete within a single clock cycle, you can use
higher level features such as a for loop to describe the behavior in
a straightforward way.
So as long as the loop unrolls into a logic network, it is
synthesizable. Now what is the equivalent of that, Haskellized? It's
OK if I generate straight RTL...
That gray counter is a good example to duplicate.
Some more here:
Trying to summarize the points:
- Consecutive assignments can be useful to factor out complex
- Loops are useful to express networks algorithmically.
For seq: the latter is just macros. The former needs a special trick,
such as register assigments or lenses.