Differences
This shows you the differences between two versions of the page.
Both sides previous revisionPrevious revisionNext revision | Previous revision | ||
intro_example:loops [2020/12/02 06:00] – external edit 127.0.0.1 | intro_example:loops [2025/05/18 14:51] (current) – [Array, loops and selection] rajit | ||
---|---|---|---|
Line 1: | Line 1: | ||
====== Array, loops and selection ====== | ====== Array, loops and selection ====== | ||
+ | |||
+ | |||
Complex datapath designs are often designed with array of simpler cells. The following example show how to create array of simple cells and connect them using loop constructs in ACT. | Complex datapath designs are often designed with array of simpler cells. The following example show how to create array of simple cells and connect them using loop constructs in ACT. | ||
- | < | + | < |
import " | import " | ||
Line 21: | Line 23: | ||
Here are different ways of writing the same loop using another variant of signal connection. | Here are different ways of writing the same loop using another variant of signal connection. | ||
- | < | + | < |
(i : 8 : fa[i].a=a[i]; | (i : 8 : fa[i].a=a[i]; | ||
</ | </ | ||
Line 27: | Line 29: | ||
This version makes all the connections to the ports explicitly using the connection syntax. Since it is common to connect a number of ports to the same circuit in close proximity in the ACT file, the following syntax is also supported. | This version makes all the connections to the ports explicitly using the connection syntax. Since it is common to connect a number of ports to the same circuit in close proximity in the ACT file, the following syntax is also supported. | ||
- | < | + | < |
(i : 8 : fa[i](.a=a[i], | (i : 8 : fa[i](.a=a[i], | ||
</ | </ | ||
An instance of this adder is then created in a separate file as: | An instance of this adder is then created in a separate file as: | ||
- | < | + | < |
import “adder8b.act”; | import “adder8b.act”; | ||
Line 72: | Line 74: | ||
The example below shows how selection statement is used for conditional execution. | The example below shows how selection statement is used for conditional execution. | ||
- | < | + | < |
import " | import " | ||
Line 85: | Line 87: | ||
Depending on the value of index '' | Depending on the value of index '' | ||
+ | |||
+ | ====== General loops ====== | ||
+ | |||
+ | The parenthesis-based syntax is a compact way to describe simple loop-based replication. If a more complex approach is needed, then a generalized while loop syntax is also available. The selection example earlier could also be re-written as follows: | ||
+ | |||
+ | <code act> | ||
+ | import " | ||
+ | |||
+ | defproc select (bool x0[8], x1[8]; bool y[8], z[8]) | ||
+ | { | ||
+ | pint i; | ||
+ | i = 0; | ||
+ | *[ i < 8 -> x0[i] = y[i]; x1[i] = z[i]; | ||
+ | x0[i+1] = z[i+1]; x1[i+1] = y[i+1]; | ||
+ | i = i + 2; | ||
+ | ] | ||
+ | } | ||
+ | </ | ||