This is an old revision of the document!


The refine sublanguage

The refine sub-language takes the form

refine {
    /* any standard ACT body element can appear here */
}

This is used to provide an implementation of a process that replaces the CHP, dataflow, HSE, or PRS body. For example, imagine you had a process defined at the CHP level

defproc example (...)
{
   int x;
   chp {
      *[ L?x; R!x ]
   }
}

You can include its production-rule level description in the same process definition, as follows:

defproc example (...)
{
   ...
   chp {
      *[ L?x; R!x ]
   }
   prs {
      // circuit goes here
   }
 }    

Now imagine that instead of writing the production rules directly, you'd like to instantiate a set of gates to implement the circuit. If you wrote:

defproc example(...)
{
  ...
  chp {
    *[ L?x; R!x ]
  }
  inst1 i1;
  inst2 i2;
  // the other instances and connctions...
}

then this means that the process has a CHP definition, and in addition it has the specified instances! This is not what was intended; we'd like to use the CHP definition or the instances. To provide support for this, the refine body is used. The example would be written:

defproc example(...)
{
  ...
  chp {
    *[ L?x; R!x ]
  }
  refine {
     inst1 i1;
     inst2 i2;
     // the other instances and connctions...
   }
}

Now you can pick the refined version of the process by using the ACT command-line option -ref=1.