This is an old revision of the document!


Using pure structures

A pure structure is a user-defined data type that contains only int/bool or other pure structures. An example of a pure structure is:

deftype cache_entry (bool valid; int<32> data; int<24> tag) { }

An example CHP program that uses this as the data type is:

defproc cache(chan?(int<32>) A; chan?(bool) RD; chan!(int<32>) DI; chan!(int<32>) DO)
{
   cache_entry C[256];
   int<32> addr;
   bool cmd;
   cache_entry ce;
 
   chp {
     *[ A?addr,RD?cmd;
        [cmd -> // read command
              ce := C[addr{7..0}];
             [ ce.valid & ce.tag = addr{31..8} -> log ("cache hit!"); DO!ce.data
             [] else -> log ("cache miss!"); DO!0
             ]
     []~cmd -> // write command
             ce.valid+;
             DI?ce.data;
             ce.tag := addr{31..8};
             C[addr{7..0}] := ce
      ]
   ]
  }                  
}

(Note: this is not meant to be a working cache!)