Differences
This shows you the differences between two versions of the page.
Both sides previous revision Previous revision Next revision | Previous revision | ||
language:introduction [2020/12/02 01:00] 127.0.0.1 external edit |
language:introduction [2024/11/18 08:16] (current) rajit [Variables and expressions] |
||
---|---|---|---|
Line 16: | Line 16: | ||
To get a feel for how a circuit is described in ACT, we begin with a simple example circuit. The purpose of this circuit is to create a dual rail channel (called '' | To get a feel for how a circuit is described in ACT, we begin with a simple example circuit. The purpose of this circuit is to create a dual rail channel (called '' | ||
- | < | + | < |
/* my first act program */ | /* my first act program */ | ||
defchan a1of2 <: chan(bool) (bool d0,d1,a) | defchan a1of2 <: chan(bool) (bool d0,d1,a) | ||
Line 72: | Line 72: | ||
legal: | legal: | ||
- | < | + | < |
bitbucket b; | bitbucket b; | ||
a1of2 x1; | a1of2 x1; | ||
Line 81: | Line 81: | ||
On the other hand, the following declaration is incorrect. | On the other hand, the following declaration is incorrect. | ||
- | < | + | < |
pbool 5; | pbool 5; | ||
+ | </ | ||
+ | < | ||
-[ERROR]-> | -[ERROR]-> | ||
</ | </ | ||
Line 90: | Line 92: | ||
parser was expecting. Error messages are accompanied by the file name, | parser was expecting. Error messages are accompanied by the file name, | ||
line number, and column number of the item that resulted in the error. | line number, and column number of the item that resulted in the error. | ||
+ | |||
+ | The variable names '' | ||
+ | ACT language features like functions and user-defined types. | ||
The names in the port list of a user-defined type are the only parts of | The names in the port list of a user-defined type are the only parts of | ||
Line 96: | Line 101: | ||
consider the following definition of '' | consider the following definition of '' | ||
- | < | + | < |
defproc bitbucket(a1of2 d) | defproc bitbucket(a1of2 d) | ||
{ | { | ||
Line 112: | Line 117: | ||
result in the following message: | result in the following message: | ||
- | < | + | < |
bitbucket b; | bitbucket b; | ||
a1of2 c; | a1of2 c; | ||
b.p = c.d0; | b.p = c.d0; | ||
+ | </ | ||
+ | < | ||
-[ERROR]-> | -[ERROR]-> | ||
</ | </ | ||
Line 141: | Line 148: | ||
circuits. The simplest way to create an array is shown below. | circuits. The simplest way to create an array is shown below. | ||
- | < | + | < |
bool x[10]; | bool x[10]; | ||
a1of2 y[5][3]; | a1of2 y[5][3]; | ||
Line 153: | Line 160: | ||
be specified as shown below | be specified as shown below | ||
- | < | + | < |
bool w[4..7]; // create Booleans w[4], ..., w[7] | bool w[4..7]; // create Booleans w[4], ..., w[7] | ||
</ | </ | ||
Line 162: | Line 169: | ||
block. Consider the following instantiation: | block. Consider the following instantiation: | ||
- | < | + | < |
bool x[10]; | bool x[10]; | ||
bool x[12..14]; | bool x[12..14]; | ||
Line 172: | Line 179: | ||
following, on the other hand, is not valid. | following, on the other hand, is not valid. | ||
- | < | + | < |
bool x[10]; | bool x[10]; | ||
bool x[9..14]; | bool x[9..14]; | ||
Line 189: | Line 196: | ||
below. | below. | ||
- | < | + | < |
bool x[10]; | bool x[10]; | ||
bool x[12..14]; | bool x[12..14]; | ||
Line 203: | Line 210: | ||
succeed, and their shapes also have to be compatible. | succeed, and their shapes also have to be compatible. | ||
- | < | + | < |
bool x[12]; | bool x[12]; | ||
bool w[4][3]; | bool w[4][3]; | ||
x=w; | x=w; | ||
+ | </ | ||
+ | < | ||
-[ERROR]-> | -[ERROR]-> | ||
Types `bool[12]' | Types `bool[12]' | ||
Line 213: | Line 222: | ||
The following are examples of valid connections: | The following are examples of valid connections: | ||
- | < | + | < |
bool x[10]; | bool x[10]; | ||
bool x[10..12]; | bool x[10..12]; | ||
Line 233: | Line 242: | ||
carry chain for a ten bit ripple-carry adder. | carry chain for a ten bit ripple-carry adder. | ||
- | < | + | < |
fulladder fa[10]; | fulladder fa[10]; | ||
(i : 9 : fa[i].co=fa[i+1].ci; | (i : 9 : fa[i].co=fa[i+1].ci; | ||
Line 251: | Line 260: | ||
indices are connected to '' | indices are connected to '' | ||
- | < | + | < |
bool x[10], y[10], z[10]; | bool x[10], y[10], z[10]; | ||
Line 282: | Line 291: | ||
instance, ACT files will tend to begin with | instance, ACT files will tend to begin with | ||
- | < | + | < |
bool Reset, | bool Reset, | ||
</ | </ | ||
Line 304: | Line 313: | ||
within the namespace. | within the namespace. | ||
- | < | + | < |
namespace lib { | namespace lib { | ||
export defchan a1of2 <: chan(bool) (bool d0,d1,a) { ... } | export defchan a1of2 <: chan(bool) (bool d0,d1,a) { ... } | ||
Line 327: | Line 336: | ||
Namespaces can be nested. For instance, we could have: | Namespaces can be nested. For instance, we could have: | ||
- | < | + | < |
namespace processor { | namespace processor { | ||
namespace lib { | namespace lib { | ||
- | | + | |
} | } | ||
Line 345: | Line 354: | ||
'' | '' | ||
- | < | + | < |
namespace processor { | namespace processor { | ||
namespace lib { | namespace lib { | ||
- | | + | |
} | } | ||
Line 355: | Line 364: | ||
processor:: | processor:: | ||
+ | </ | ||
+ | < | ||
-[ERROR]-> | -[ERROR]-> | ||
| | ||
Line 363: | Line 374: | ||
exporting the namespace itself. | exporting the namespace itself. | ||
- | < | + | < |
namespace processor { | namespace processor { | ||
export namespace lib { | export namespace lib { | ||
- | | + | |
} | } | ||
Line 402: | Line 413: | ||
'' | '' | ||
- | < | + | < |
import " | import " | ||
... | ... | ||
Line 424: | Line 435: | ||
the namespaces, and could create naming conflicts (e.g. multiple | the namespaces, and could create naming conflicts (e.g. multiple | ||
definition of types having the same name---an error). To solve this | definition of types having the same name---an error). To solve this | ||
- | problem, one can do the following: | + | problem, one can do the following: |
- | < | + | < |
import " | import " | ||
open lib -> lib1; | open lib -> lib1; | ||
Line 446: | Line 457: | ||
because not all types might be exported! In this case we can say: | because not all types might be exported! In this case we can say: | ||
- | < | + | < |
import " | import " | ||
open processor:: | open processor:: | ||
Line 467: | Line 478: | ||
hierarchy. The import statement | hierarchy. The import statement | ||
- | < | + | < |
import processor:: | import processor:: | ||
</ | </ | ||
Line 473: | Line 484: | ||
is equivalent to the following: | is equivalent to the following: | ||
- | < | + | < |
import " | import " | ||
</ | </ |