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
. This approach is used in the chp2prs
tool to provide an implementation of the CHP. This is the standard convention used in any tool that takes CHP and generates a circuit-level description. By augmenting the definition of the process in this manner, you can model the process at both the CHP level of abstraction as well as a more detailed representation containing a collection of instances that implement the CHP.