DC-WG: background on modes


Subject: DC-WG: background on modes
From: Mark Hahn (mhahn@cadence.com)
Date: Mon Mar 20 2000 - 22:45:36 PST


The following description of modes is derived from a proposal for
commands and functionality to be added to Cadence's Envisia
Synthesis (BuildGates).

Mark

---

Functional mode definition --------------------------

Modes are defined by a mode group and a set of individual modes. All mode group names should be unique. Mode names within a mode group should be unique but may not be so between different mode groups.

Mode types ----------

There are two types of functional modes: unconditional and conditional modes. Unconditional modes are modes without conditional expressions associated with them. An example of unconditional mode is as follows:

MODE rw = read, write;

Conditional modes are associated conditional expressions. An example is

MODE rw = read COND (read_bit == 1), write COND (read_bit == 0);

Unconditional Modes -------------------

All the modes are assumed to be active if none is set by the user using "set_functional_mode" command. If one mode is set, then other unconditional modes in the mode group become unactive. Once the mode is set, it remains set until it is explicitly reset by the user. For example, consider a mode group 'm' with 3 modes 'm1', 'm2' and 'm3' as follows:

MODE m = m1, m2, m3;

Initially, all three modes are active. If the user sets mode 'm1', this disables 'm2' and 'm3'. If 'm2' is set later, then 'm1' and 'm2' will be active and 'm3' will be inactive.

If there is more than one mode group, setting a mode within one mode group does not affect the modes in other mode groups.

Conditional Modes -----------------

All the modes are assumed to be active initially. The mode is set if

1) the mode is set AND 2) the conditional expression associated with the mode evaluates to true.

Once one mode in the mode group is set, then all the other modes in the group are disabled as in the unconditional mode case. Likewise, setting a mode component within one mode group does not affect the modes in the other mode groups.

Consider the following example:

MODE m = m1 COND (A == 1), m2 COND (A == 0);

Assume that A == 0. If the user sets 'm1', then none of the modes will be active.

Note that this may be handled differently in other tools, as the handling of conditional modes within mode groups is controversial.

Unconditional modes and conditional modes may be combined. The following example shows 2 conditional modes {read, write} and 2 unconditional modes {ram1, ram2}.

MODE rw = read COND (read_bit == 1), write COND (read_bit == 0), ram1, ram2;

If 'read' mode is set, then 'write', 'ram1' and 'ram2' will be disabled. Note that for 'read' mode to be active, the condition read_bit == 1 must evaluate to true as well.

Modes and Contional Expressions ------------------------------- If an arc has both a mode and a conditional expression, then the arc is enabled only if

a) mode is active, *and* b) conditional expression evaluates to true

Multiple Modes -------------- If an arc has multiple modes, then the arc is enabled if any one of the modes is active.

User Interface --------------

We don't want to use "set_mode" because DCL has "set_calculation_mode" and "set_function_mode".

1) set_functional_mode

set_functional_mode -group <group_name> -mode <mode_name> <instance_list> Make <mode_name> in <group_name> active for all instances in <instance_list>. Once <mode_name> is set, all other modes in <group_name> become inactive and stay inactive unless they are explicitly set later.

set_functional_mode <instance_list> Make all modes in all mode groups of <instance_list> active.

set_functional_mode -group <group_mode> <instance_list> Make all modes in <group_mode> of <instance_list> active. 2) reset_functional_mode

reset_functional_mode -group <group_name> -mode <mode_name> <instance_list>

Make <mode_name> in <group_name> inactive for all instances in <instance_list>. This command has no effect if the mode was already active. Note that if a user resets a mode which is the only active mode, then all modes become active. For example, consider a mode group 'rw' with two modes: 'read' and 'write'. If the user sets 'read' and then resets it, then both modes 'read' and 'write' become active again, as if no modes had been set.

This behavior is controversial; other tools may leave all modes inactive instead.

3) report_functional_mode

report_functional_mode Report status (active or inactive) of all modes in all instances

report_functional_mode -cell <cell_name> Report a list of mode groups and modes for <cell_name>

report_functional_mode <instance> Report status of all modes for <instance>

* Note that currently there is no user interface to make all modes inactive. Such a UI can be added later if a need arises.



This archive was generated by hypermail 2b28 : Mon Mar 20 2000 - 22:47:03 PST