PRS Rule attributes - The HAC Language
Description: The HAC Language

Next: PRS Literal attributes, Previous: PRS Node attributes, Up: PRS Attributes

#### 15.2.2 Rule attributes

We propose the following syntax for per-rule attributes:

- rule-attrib-list : `[` rule-attrib `;` ... `]`
- rule-attrib : identifier `=` expr-list

Rule-attribs are generalized as key-value(s) pairs, which permits the programmer to add arbitrary attributes to the language without adding more keywords to the language. Rule-attrib-lists are just semicolon-delimited lists of one or more rule-attributes. In the case of repeated attributes, the latter pair will override the former. Rule-attribute-lists are optional prefixes to PRS-rules.

For now, the purpose of these attributes is to emit attribute lines suitable for consumption by another text-based tool, such as old versions of prsim. Q: What happens when we OR-combine rules with different attributes?

Some existing attributes:

— Macro: after d

> Applies a fixed delay d to a single rule. Affects hflat output and hacprsim operation.

— Macro: after_min d
— Macro: after_max d

> Specifies upper and lower bounds on delays for a rule. The upper bound should be greater than or equal to the lower bound, however, this is not checked here.

— Macro: weak b

> If b is true (1), rule is considered weak, e.g. feedback, and may be overpowered by non-weak rules. If unspecified, default value is true.

— Macro: unstab b

> If b is true (1), rule is allowed to be unstable, as an exception. If unspecified, default value is true.

— Macro: comb b

> If b is true (1), use combinational feedback.

— Macro: iskeeper [b]

> If b is true (1), flag that this rule is part of a standard keeper. If unspeficied, default value is true.

— Macro: isckeeper [b]

> If b is true (1), flag that this rule is part of a combinational feedback keeper. If unspeficied, default value is true.

— Macro: keeper b

> For LVS, If b is true (1), staticize (explicitly). This attribute will soon be deprecated in favor of a node attribute `autokeeper`.

— Macro: output b

> If b is true (1), staticize (explicitly). Q: should this really be a rule-attribute? better off as node-attribute?

— Macro: loadcap C

> Use C as load capacitance instead of inferring from configuration.

— Macro: always_random b

> If b is true (1), rule delay is based on random exponential distribution. If unspecified, default value is true.

— Macro: N_reff R
— Macro: P_reff R

> Use R as effective resistance to override the automatically computed value in other back-end tools. NOTE: This is a hack that should be replaced with a proper implementation of the "fold" expression macro. Consider this attribute deprecated from the start.