ACT Library
Loading...
Searching...
No Matches
lang.h
Go to the documentation of this file.
1/*************************************************************************
2 *
3 * This file is part of the ACT library
4 *
5 * Copyright (c) 2011, 2018-2019 Rajit Manohar
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version 2
10 * of the License, or (at your option) any later version.
11 *
12 * This program is distributed in the hope that it will be useful,
13 * but WITHOUT ANY WARRANTY; without even the implied warranty of
14 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15 * GNU General Public License for more details.
16 *
17 * You should have received a copy of the GNU General Public License
18 * along with this program; if not, write to the Free Software
19 * Foundation, Inc., 51 Franklin Street, Fifth Floor,
20 * Boston, MA 02110-1301, USA.
21 *
22 **************************************************************************
23 */
24#ifndef __LANG_H__
25#define __LANG_H__
26
27#include "expr.h"
28#include <common/mstring.h>
29#include <common/list.h>
30#include <common/array.h>
31
32class ActId;
33
44struct act_attr {
45 const char *attr;
47 struct act_attr *next;
48};
49
50typedef struct act_attr act_attr_t;
51
52
53/*------------------------------------------------------------------------
54 *
55 * The PRS sublanguage: gate-level abstraction for the circuit
56 *
57 *------------------------------------------------------------------------
58 */
59
72
75};
76
77
83typedef struct {
86 int flavor;
89
90
97typedef struct act_prs_expr {
98 unsigned int type:4;
99 union {
100 struct {
101 struct act_prs_expr *l;
102 struct act_prs_expr *r;
105 } e;
106 struct {
109 } v;
110 struct {
111 char *label;
112 } l;
113 struct {
114 char *id;
117 struct act_prs_expr *e;
119 } u;
121
131 ACT_PRS_CAP = 5
133
140typedef struct act_prs_lang {
142 unsigned int type:3;
144 union {
145 struct {
152 unsigned int arrow_type:2;
155 unsigned int dir:1;
157 unsigned int label:1;
159 } one;
161 struct {
170 } p;
175 struct {
176 const char *id;
179 struct act_prs_lang *p;
180 } l;
184 } u;
186
194struct act_prs {
202 struct act_prs *next;
203};
204
205
206
207/*------------------------------------------------------------------------
208 *
209 * The CHP sublanguage: behavioral description
210 *
211 *------------------------------------------------------------------------
212 */
213
214
229
231
232 ACT_CHP_SEMILOOP = 11,
234 ACT_CHP_COMMALOOP = 12,
236
238
239 ACT_CHP_ASSIGNSELF = 14,
241
242 ACT_CHP_MACRO = 15,
244
247
248#define ACT_CHP_STMT_END 17
250
251struct act_chp_lang;
252
253
272typedef struct act_chp_gc {
273 const char *id;
274 Expr *lo, *hi;
276 struct act_chp_lang *s;
277 struct act_chp_gc *next;
279
280
286typedef struct act_chp_lang {
287 int type;
288 const char *label;
289 void *space;
290 union {
291 struct {
295
296 /* A bi-directional channel can have both var and e that are non-NULL */
297 struct {
300 Expr *e;
301 unsigned int flavor:2;
303 unsigned int convert:2;
305
306 /* used for log(...) */
307 struct {
308 mstring_t *name;
309 list_t *rhs;
312
313 /* used for process/type macros */
314 struct {
315 ActId *id;
316 mstring_t *name;
317 list_t *rhs;
319
320 /* ;/, : this is the list of statements that are either comma or
321 semi-colon separated */
322 struct {
323 list_t *cmd;
325
328
329 struct {
330 const char *id;
334
335 struct {
336 const char *nextlabel;
337 list_t *exit_conds;
339 struct act_chp_lang *body;
342
343 } u;
345
346
353typedef struct act_func_arguments {
354 unsigned int isstring:1;
355 union {
356 mstring_t *s;
358 } u;
360
361
367struct act_chp {
374};
375
376
377
378
379/*------------------------------------------------------------------------
380 *
381 * The specification sublanguage: used for verification and asserting
382 * invariants; also used to specify arbiters
383 *
384 *
385 *------------------------------------------------------------------------
386 */
387
388#define ACT_SPEC_ISTIMING(x) ((x)->type == -1 || (x)->type == -2 || (x)->type == -3 || (x)->type == -4)
389#define ACT_SPEC_ISTIMINGFORK(x) ((x)->type == -1 || (x)->type == -2)
390
391
397struct act_spec {
401
413 int type;
414
415 int count;
417
425 int *extra;
426 struct act_spec *next;
427};
428
429class ActBody;
430
431
432/*------------------------------------------------------------------------
433 *
434 * The refinement sublanguage
435 *
436 *------------------------------------------------------------------------
437 */
438
446};
447
448
449/*------------------------------------------------------------------------
450 *
451 * The gate sizing sublanguage
452 *
453 *------------------------------------------------------------------------
454 */
455
469
470 /*-- sizing loop: NOTE: loop_id == NULL meanas the rest of the
471 fields are garbage --*/
472 const char *loop_id;
473 Expr *lo, *hi;
475};
476
483 // p_n_mode 0/1 0 = default, 1 = sqrt sizing
484 // unit_n 5
492 int unit_n;
496};
497
498
499/*------------------------------------------------------------------------
500 *
501 * The initialization sublanguage, used to specify the initial state
502 * and reset protocol.
503 *
504 *------------------------------------------------------------------------
505 */
506
514 list_t *actions;
517};
518
519/*------------------------------------------------------------------------
520 *
521 * The dataflow sublanguage
522 *
523 *------------------------------------------------------------------------
524 */
525
536 ACT_DFLOW_SINK = 6
538
539
545typedef struct {
547 union {
548 struct {
554 } func;
555 struct {
559 int nmulti;
563 } splitmerge;
567 struct {
569 } sink;
571 } u;
573
574
582 list_t *lhs;
583 list_t *rhs;
584};
585
586
593 list_t *dflow;
594
616 list_t *order;
617};
618
619void prs_print (FILE *, act_prs *);
620void chp_print (FILE *, act_chp *);
621void chp_print (FILE *fp, act_chp_lang_t *c);
622void hse_print (FILE *, act_chp *);
623void spec_print (FILE *, act_spec *);
624void refine_print (FILE *, act_refine *);
625void sizing_print (FILE *, act_sizing *);
627void dflow_print (FILE *, act_dataflow *);
629void act_print_size (FILE *fp, act_size_spec_t *sz);
630
631class ActNamespace;
632class Scope;
633
634
642public:
644 prs = NULL;
645 chp = NULL;
646 hse = NULL;
647 spec = NULL;
648 refine = NULL;
649 sizing = NULL;
650 init = NULL;
651 dflow = NULL;
652 }
653 void Print (FILE *fp) {
654 if (chp) { chp_print (fp, chp); }
655 if (hse) { hse_print (fp, hse); }
656 if (prs) { prs_print (fp, prs); }
657 if (spec) { spec_print (fp, spec); }
658 if (sizing) { sizing_print (fp, sizing); }
659 if (refine) { }
660 if (init) { initialize_print (fp, init); }
661 if (dflow) { dflow_print (fp, dflow); }
662 }
663
664 act_chp *getchp () { return chp; }
665 void setchp (act_chp *x) { chp = x; }
666
667 act_chp *gethse () { return hse; }
668 void sethse (act_chp *x) { hse = x; }
669
670 act_prs *getprs () { return prs; }
671 void setprs (act_prs *x) { prs = x; }
672
673 act_spec *getspec () { return spec; }
674 void setspec (act_spec *x) { spec = x; }
675
677 void setrefine (act_refine *x) { refine = x; }
678
680 void setsizing(act_sizing *s) { sizing = s; }
681
683 void setinit(act_initialize *s) { init = s; }
684
686 void setdflow (act_dataflow *s) { dflow = s; }
687
689
697 int hasCktLang () {
698 if (chp || hse || prs || dflow) return 1;
699 return 0;
700 }
701
709 if (prs) return 1;
710 return 0;
711 }
712
713 private:
721};
722
723
728
733
738
743
748
753
758
762void chp_expand_macromode (int mode);
763
768
773
778
783
789
794const char *act_spec_string (int type);
795
799const char *act_dev_value_to_string (int);
800
805int act_dev_string_to_value (const char *s);
806
812
818
823
824
828typedef void *(*ACT_VAR_CONV) (void *, void *);
829
849 struct Hashtable *at_hash,
851 ACT_VAR_CONV conv_var);
852
853
862char *act_prs_expr_to_string (list_t *id_list, act_prs_expr_t *e);
863
872char *act_expr_to_string (list_t *id_list, Expr *e);
873
883void act_expr_collect_ids (list_t *l, Expr *e);
884
889
894
903
914
920
926
927
928#endif /* __LANG_H__ */
This class is used to hold the contents of the body of any user-defined type or namespace....
Definition: body.h:52
This class is used to store Act identifiers that correspond to instances. Identifiers have an optiona...
Definition: act_id.h:56
The ActNamespace class holds all the information about a namespace.
Definition: namespaces.h:469
This is the data structure that holds all instances and their associated types within a scope....
Definition: namespaces.h:77
This holds all the sub-langugae bodies in a namespace/user-defined type definition.
Definition: lang.h:641
act_sizing * getsizing()
Definition: lang.h:679
act_initialize * getinit()
Definition: lang.h:682
act_languages()
Definition: lang.h:643
int hasCktLang()
Definition: lang.h:697
void setchp(act_chp *x)
Definition: lang.h:665
void Print(FILE *fp)
Definition: lang.h:653
act_chp * gethse()
Definition: lang.h:667
void setprs(act_prs *x)
Definition: lang.h:671
act_dataflow * dflow
Definition: lang.h:720
int hasNetlistLang()
Definition: lang.h:708
act_chp * getchp()
Definition: lang.h:664
act_languages * Expand(ActNamespace *ns, Scope *s)
act_dataflow * getdflow()
Definition: lang.h:685
void setsizing(act_sizing *s)
Definition: lang.h:680
act_spec * getspec()
Definition: lang.h:673
void setrefine(act_refine *x)
Definition: lang.h:677
act_prs * getprs()
Definition: lang.h:670
act_chp * hse
Definition: lang.h:714
act_prs * prs
Definition: lang.h:715
act_refine * getrefine()
Definition: lang.h:676
act_sizing * sizing
Definition: lang.h:718
act_spec * spec
Definition: lang.h:716
act_refine * refine
Definition: lang.h:717
void setdflow(act_dataflow *s)
Definition: lang.h:686
act_initialize * init
Definition: lang.h:719
void setspec(act_spec *x)
Definition: lang.h:674
act_chp * chp
Definition: lang.h:714
void sethse(act_chp *x)
Definition: lang.h:668
void setinit(act_initialize *s)
Definition: lang.h:683
act_prs_expr_type
Definition: lang.h:64
@ ACT_PRS_EXPR_OR
"|" operator
Definition: lang.h:66
@ ACT_PRS_EXPR_NOT
"~" operator
Definition: lang.h:68
@ ACT_PRS_EXPR_ANDLOOP
replicated &-loop
Definition: lang.h:70
@ ACT_PRS_EXPR_VAR
leaf variable
Definition: lang.h:67
@ ACT_PRS_EXPR_TRUE
constant "true"
Definition: lang.h:73
@ ACT_PRS_EXPR_FALSE
constant "false"
Definition: lang.h:74
@ ACT_PRS_EXPR_AND
"&" operator
Definition: lang.h:65
@ ACT_PRS_EXPR_ORLOOP
replicated |-loop
Definition: lang.h:71
@ ACT_PRS_EXPR_LABEL
leaf "@label"
Definition: lang.h:69
int act_dev_string_to_value(const char *s)
void spec_print(FILE *, act_spec *)
void act_print_one_prs(FILE *fp, act_prs_lang_t *p)
void refine_expand(act_refine *, ActNamespace *, Scope *)
void chp_print(FILE *, act_chp *)
act_initialize * initialize_expand(act_initialize *, ActNamespace *, Scope *)
struct act_chp_lang act_chp_lang_t
void act_expr_collect_ids(list_t *l, Expr *e)
char * act_expr_to_string(list_t *id_list, Expr *e)
act_spec * spec_expand(act_spec *, ActNamespace *, Scope *)
void *(* ACT_VAR_CONV)(void *, void *)
Definition: lang.h:828
act_prs * prs_expand(act_prs *, ActNamespace *, Scope *)
act_attr_t * inst_attr_expand(act_attr_t *a, ActNamespace *ns, Scope *s)
struct act_func_arguments act_func_arguments_t
act_prs_expr_t * act_prs_celement_rule(act_prs_expr_t *e)
int act_expr_has_neg_probes(Expr *e)
act_size_spec_t * act_expand_size(act_size_spec_t *sz, ActNamespace *ns, Scope *s)
void chp_expand_macromode(int mode)
void sizing_print(FILE *, act_sizing *)
act_chp_lang_type
Definition: lang.h:218
@ ACT_CHP_MACRO
Definition: lang.h:242
@ ACT_CHP_SELECT
selection statement
Definition: lang.h:221
@ ACT_CHP_DOLOOP
CHP do loop.
Definition: lang.h:224
@ ACT_CHP_LOOP
CHP while loop.
Definition: lang.h:223
@ ACT_CHP_FUNC
used for log(...) logging statement
Definition: lang.h:230
@ ACT_CHP_SEMILOOP
Definition: lang.h:232
@ ACT_CHP_SELECT_NONDET
non-deterministic selection statement
Definition: lang.h:222
@ ACT_CHP_ASSIGNSELF
Definition: lang.h:239
@ ACT_CHP_COMMALOOP
Definition: lang.h:234
@ ACT_CHP_SEMI
sequential composition
Definition: lang.h:220
@ ACT_CHP_SEND
send operation
Definition: lang.h:227
@ ACT_CHP_SKIP
skip statement
Definition: lang.h:225
@ ACT_CHP_ASSIGN
assignment
Definition: lang.h:226
@ ACT_CHP_RECV
receive operation
Definition: lang.h:228
@ ACT_CHP_COMMA
comma or parallel composition
Definition: lang.h:219
@ ACT_CHP_HOLE
a "hole"—only used by downstream tools
Definition: lang.h:237
@ ACT_HSE_FRAGMENTS
used to support fragmented hse
Definition: lang.h:245
act_prs_expr_t * act_prs_expr_nnf(void *cookie, struct Hashtable *at_hash, act_prs_expr_t *e, ACT_VAR_CONV conv_var)
const char * act_dev_value_to_string(int)
struct act_prs_lang act_prs_lang_t
act_attr_t * prs_attr_expand(act_attr_t *a, ActNamespace *ns, Scope *s)
void refine_print(FILE *, act_refine *)
int act_hse_direction(act_chp_lang_t *, ActId *)
struct act_prs_expr act_prs_expr_t
void prs_print(FILE *, act_prs *)
act_dataflow * dflow_expand(act_dataflow *, ActNamespace *, Scope *)
void act_print_size(FILE *fp, act_size_spec_t *sz)
char * act_prs_expr_to_string(list_t *id_list, act_prs_expr_t *e)
void act_prs_expr_free(act_prs_expr_t *e)
struct act_chp_gc act_chp_gc_t
void act_chp_macro_check(Scope *s, ActId *id)
act_chp * chp_expand(act_chp *, ActNamespace *, Scope *)
const char * act_spec_string(int type)
void initialize_print(FILE *, act_initialize *)
ActId * expand_var_write(ActId *id, ActNamespace *ns, Scope *s)
void dflow_print(FILE *, act_dataflow *)
void chp_check_channels(act_chp_lang_t *c, Scope *s)
act_dataflow_element_types
Definition: lang.h:529
@ ACT_DFLOW_MIXER
mixer dataflow element
Definition: lang.h:533
@ ACT_DFLOW_SINK
a dataflow sink
Definition: lang.h:536
@ ACT_DFLOW_SPLIT
split dataflow element
Definition: lang.h:531
@ ACT_DFLOW_ARBITER
arbiter dataflow element
Definition: lang.h:534
@ ACT_DFLOW_CLUSTER
a cluster of dataflow elements
Definition: lang.h:535
@ ACT_DFLOW_MERGE
merge dataflow element
Definition: lang.h:532
@ ACT_DFLOW_FUNC
function dataflow element
Definition: lang.h:530
act_prs_expr_t * act_prs_complement_rule(act_prs_expr_t *e)
act_prs_lang_type
Definition: lang.h:125
@ ACT_PRS_RULE
a production rule
Definition: lang.h:126
@ ACT_PRS_GATE
a transmission gate / pass transistor
Definition: lang.h:127
@ ACT_PRS_CAP
a capacitor
Definition: lang.h:131
@ ACT_PRS_LOOP
a loop of production rules
Definition: lang.h:128
@ ACT_PRS_SUBCKT
a subckt { ... } block
Definition: lang.h:130
@ ACT_PRS_TREE
a tree { ... } block
Definition: lang.h:129
void act_chp_free(act_chp_lang_t *)
void hse_print(FILE *, act_chp *)
act_sizing * sizing_expand(act_sizing *, ActNamespace *, Scope *)
Attribute list associated with an instance.
Definition: lang.h:44
struct act_attr * next
linked list next pointer
Definition: lang.h:47
Expr * e
the expression that holds the value of the attribute
Definition: lang.h:46
const char * attr
the name of the attribute
Definition: lang.h:45
Data structure for guarded commands.
Definition: lang.h:272
struct act_chp_gc * next
next pointer for linked-list
Definition: lang.h:277
Expr * g
the guard
Definition: lang.h:275
const char * id
the loop id for syntactic replication
Definition: lang.h:273
struct act_chp_lang * s
the statement
Definition: lang.h:276
Expr * hi
Definition: lang.h:274
Expr * lo
Definition: lang.h:274
Data structure for the chp sub-language body.
Definition: lang.h:286
Expr * e
expression on the RHS
Definition: lang.h:293
Expr * lo
Definition: lang.h:331
int type
this is taken from act_chp_lang_type
Definition: lang.h:287
Expr * hi
Definition: lang.h:331
list_t * exit_conds
Definition: lang.h:337
unsigned int convert
0 = nothing, 1 = bool(.), 2 = int(.)
Definition: lang.h:303
struct act_chp_lang::@27::@30 func
currently only used for log(..)
void * space
this space for rent!
Definition: lang.h:289
const char * nextlabel
next label
Definition: lang.h:336
struct act_chp_lang::@27::@34 frag
HSE fragments.
const char * label
label for this item, normally NULL
Definition: lang.h:288
act_chp_gc_t * gc
Definition: lang.h:326
struct act_chp_lang::@27::@28 assign
assignment statement id := e
mstring_t * name
function name
Definition: lang.h:308
ActId * chan
channel for communication
Definition: lang.h:298
ActId * var
variable to be assigned
Definition: lang.h:299
list_t * rhs
the argument list, list of Expr *
Definition: lang.h:309
list_t * cmd
a list of act_chp_lang_t pointers
Definition: lang.h:323
struct act_chp_lang * body
body to be replicated
Definition: lang.h:332
const char * id
loop variable
Definition: lang.h:330
struct act_chp_lang * next
next fragment
Definition: lang.h:340
struct act_chp_lang::@27::@31 macro
macro call
ActId * id
variable on the LHS
Definition: lang.h:292
unsigned int flavor
Definition: lang.h:301
struct act_chp_lang::@27::@29 comm
used for send/recv
union act_chp_lang::@27 u
struct act_chp_lang::@27::@33 loop
replication construct
struct act_chp_lang::@27::@32 semi_comma
used for comma and semicolon
Holds a CHP sub-language.
Definition: lang.h:367
ActId * vdd
power supply
Definition: lang.h:368
ActId * gnd
ground
Definition: lang.h:369
int is_synthesizable
1 if this is synthesizable, 0 otherwise
Definition: lang.h:373
ActId * psc
p-substrate terminal
Definition: lang.h:370
act_chp_lang_t * c
chp body
Definition: lang.h:372
ActId * nsc
n-substrate terminal
Definition: lang.h:371
An individual dataflow element.
Definition: lang.h:545
Expr * lhs
expression
Definition: lang.h:549
ActId * nondetctrl
Definition: lang.h:561
ActId * guard
the condition
Definition: lang.h:556
ActId * chan
the input channel
Definition: lang.h:568
act_dataflow_element_types t
the type
Definition: lang.h:546
ActId * rhs
channel output
Definition: lang.h:550
Expr * init
initial token, if any on the output
Definition: lang.h:553
list_t * dflow_cluster
a cluster is a list of dataflow elements
Definition: lang.h:570
Expr * nbufs
Definition: lang.h:551
int istransparent
transparent v/s opaque
Definition: lang.h:552
ActId ** multi
Definition: lang.h:557
int nmulti
number of channels in multi
Definition: lang.h:559
ActId * single
the single channel end
Definition: lang.h:560
An order directive in the dataflow language, used for optimizations in the presence of hierarchy.
Definition: lang.h:581
list_t * lhs
first list of ActId pointers (channels)
Definition: lang.h:582
list_t * rhs
second list of ActId pointers (channels)
Definition: lang.h:583
The dataflow sub-language.
Definition: lang.h:592
list_t * order
Definition: lang.h:616
list_t * dflow
list of dataflow elements
Definition: lang.h:593
Used to represent log(...) arguments. Holds either a string or an expression.
Definition: lang.h:353
mstring_t * s
string
Definition: lang.h:356
Expr * e
or expression
Definition: lang.h:357
union act_func_arguments::@35 u
unsigned int isstring
true if string, false otherwise
Definition: lang.h:354
The Initialize { ... } body. Only used in the global namespace.
Definition: lang.h:513
list_t * actions
Definition: lang.h:514
act_initialize * next
next initialize block
Definition: lang.h:516
A production rule expression, corresponding to the guard for the production rule.
Definition: lang.h:97
struct act_prs_expr * e
body of the loop
Definition: lang.h:117
int pchg_type
precharge type: 1 for +, 0 for -
Definition: lang.h:104
char * label
name of the label
Definition: lang.h:111
struct act_prs_expr * r
right pointer in expression tree
Definition: lang.h:102
ActId * id
name of the variable
Definition: lang.h:107
struct act_prs_expr::@18::@22 loop
used for AND/OR loops
struct act_prs_expr::@18::@19 e
a standard PRS expression
char * id
loop iteration variable
Definition: lang.h:114
struct act_prs_expr * l
left pointer in expression tree
Definition: lang.h:101
struct act_prs_expr * pchg
internal precharge, only for an AND
Definition: lang.h:103
act_size_spec_t * sz
size specifier, if any
Definition: lang.h:108
struct act_prs_expr::@18::@20 v
a leaf variable
Expr * lo
low value of loop range
Definition: lang.h:115
Expr * hi
high value of loop range
Definition: lang.h:116
unsigned int type
an act_prs_expr_type value
Definition: lang.h:98
union act_prs_expr::@18 u
Structure that holds a prs sub-language body. This consists of a linked-list of individual items in t...
Definition: lang.h:140
ActId * id
Definition: lang.h:149
struct act_prs_lang * next
the linked list next pointer field
Definition: lang.h:141
struct act_prs_lang::@23::@25 p
struct act_prs_lang::@23::@26 l
const char * id
loop id
Definition: lang.h:176
Expr * lo
low range (NULL means 0..hi-1)
Definition: lang.h:177
unsigned int dir
Definition: lang.h:155
ActId * _g
Definition: lang.h:167
ActId * d
the drain terminal
Definition: lang.h:166
struct act_prs_lang * p
loop body
Definition: lang.h:179
ActId * s
the source terminal
Definition: lang.h:165
act_prs_expr_t * e
the guard of the production rule
Definition: lang.h:148
unsigned int label
Definition: lang.h:157
ActId * g
Definition: lang.h:163
unsigned int type
Definition: lang.h:142
act_size_spec_t * sz
sizing specification
Definition: lang.h:169
struct act_prs_lang::@23::@24 one
unsigned int arrow_type
Definition: lang.h:152
union act_prs_lang::@23 u
act_attr_t * attr
any attribute associated with the gate
Definition: lang.h:146
Expr * hi
high range
Definition: lang.h:178
Structure that holds all the prs { } blocks in a particular scope. This is a linked-list of blocks,...
Definition: lang.h:194
struct act_prs * next
the next prs block
Definition: lang.h:202
ActId * nsc
n substrate terminal
Definition: lang.h:198
ActId * vdd
power supply
Definition: lang.h:195
int leak_adjust
Definition: lang.h:199
ActId * psc
p substrate terminal
Definition: lang.h:197
act_prs_lang_t * p
the actual prs sub-languge elements
Definition: lang.h:201
ActId * gnd
ground
Definition: lang.h:196
The refinement sub-language just contains an ActBody.
Definition: lang.h:444
ActBody * b
the body of the refine { ... }
Definition: lang.h:445
Sizing specifier for variables.
Definition: lang.h:83
int flavor
type of transistor (its flavor)
Definition: lang.h:86
Expr * folds
number of folds, the folding specification if any
Definition: lang.h:87
Expr * w
transistor width
Definition: lang.h:84
Expr * l
transistor length
Definition: lang.h:85
An individual sizing directive.
Definition: lang.h:461
ActId * id
the signal to be sized
Definition: lang.h:462
Expr * upfolds
number of folds for pull-up
Definition: lang.h:467
A_DECL(act_sizing_directive, d)
loop body
const char * loop_id
for a loop in the sizing body
Definition: lang.h:472
Expr * eup
drive strength for pull-up
Definition: lang.h:465
Expr * hi
Definition: lang.h:473
Expr * dnfolds
number of folds for pull-down
Definition: lang.h:468
int flav_dn
transistor flavor for pull-down
Definition: lang.h:464
int flav_up
transistor flavor for pull-up
Definition: lang.h:463
Expr * edn
drive strength for pull-down
Definition: lang.h:466
Expr * lo
Definition: lang.h:473
The sizing { ... } body data.
Definition: lang.h:482
Expr * p_n_mode_e
p_n_mode expression
Definition: lang.h:488
int p_specified
1 if p_n_mode is specified, 0 otherwise
Definition: lang.h:485
A_DECL(act_sizing_directive, d)
all sizing directives
int p_n_mode
p_n_mode after expansion (default 0)
Definition: lang.h:491
int leak_adjust
leak_adjust after expansion (default 0)
Definition: lang.h:493
act_sizing * next
next sizing body
Definition: lang.h:495
int unit_n
unit_n after expansion
Definition: lang.h:492
Expr * leak_adjust_e
leak_adjust expression
Definition: lang.h:490
int unit_n_specified
1 if unit_n specified, 0 otherwise
Definition: lang.h:486
Expr * unit_n_e
unit_n expression
Definition: lang.h:489
int leak_adjust_specified
1 if leak_adjust specified, 0 otherwise
Definition: lang.h:487
The specification sub-language.
Definition: lang.h:397
int type
Definition: lang.h:413
struct act_spec * next
Definition: lang.h:426
int count
the number of ids; -1 = all nodes in the process
Definition: lang.h:415
ActId ** ids
the array of identifiers in the spec directive
Definition: lang.h:416
int * extra
Definition: lang.h:425
int isrequires
Definition: lang.h:398
Definition: expr.h:79