Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
Last revision Both sides next revision
language:interface [2023/04/09 18:17]
rajit
language:interface [2023/04/09 19:00]
rajit [Parameter types]
Line 15: Line 15:
 Any process can export a list of interfaces.  Any process can export a list of interfaces. 
 When a process exports an interface, it means that it has I/O ports that correspond to the names in the interface. When a process exports an interface, it means that it has I/O ports that correspond to the names in the interface.
-The port names within the process need not match the port names in the interface; in the case when they don't match, a mapping can be provided as part of the interface export specification.+The port names within the process need not match the port names in the interface; when an interface is exported, a mapping must be provided as part of the interface export specification.
  
 <code act> <code act>
-defproc proc1 (bool? a; bool! b)  :> linearchain { in -> a, out -> b }+defproc proc1 (bool? a; bool! b)  :> linearchain { in -> a, out -> b } 
 { {
  ...  ...
Line 27: Line 27:
  
 ==== Parameter types ==== ==== Parameter types ====
 +
 +**Needs to be updated**
  
 The special ''ptype'' meta-parameter type is used to pass in types The special ''ptype'' meta-parameter type is used to pass in types
Line 47: Line 49:
 <code act> <code act>
 // A constructor for a datapath with W-bit ripple connections, and // A constructor for a datapath with W-bit ripple connections, and
-// where each component has M inputs and one output+// where each component has an additional M inputs and one output
  
-// A skeleton+// Interface definition
 template<pint W, pint M> template<pint W, pint M>
-defproc bitslice (e1of2? rin[W]; e1of2! rout[W];  +interface bitslice (e1of2? rin[W]; e1of2! rout[W]; e1of2? in[M]; e1of2! out);
-                  e1of2? in[M]; e1of2! out) { }+
  
 // the constructor // the constructor
Line 59: Line 60:
                      e1of2? in[M*N]; e1of2! out[N])                      e1of2? in[M*N]; e1of2! out[N])
 { {
-   t x[N];+   t x[N];  // array of type "t" that exports a bitslice<W,M> interface 
  
    // ripple connections    // ripple connections
-   (;i:N-1: x[i].rout=x[i+1].rin);+   (i:N-1: x[i].rout=x[i+1].rin;)
    x[0].rin=rin;    x[0].rin=rin;
-   x[N-1].rout=rout;    +   x[N-1].rout=rout; 
 + 
    // i/o connections    // i/o connections
-   (;i:N: x[i].in[i*M..(i+1)*M-1] = in[i*M..(i+1)*M-1]; +   (i:N: x[i].in = in[i*M..(i+1)*M-1]; 
-          x[i].out=out[i] )+          x[i].out=out[i])
 } }
  
-// A one-bit adder +// A one-bit adder, that exports the bitslice interface 
-defproc onebit (e1of2? in[2], rin[1]; e1of2! out, rout[1]) { ... }+defproc onebit (e1of2? in[2], rin[1]; e1of2! out, rout[1])  
 +                 :>  bitslice<1,2> { in -> in, rin -> rin, out -> out, rout -> rout } 
 +{ ... }
  
 defproc ripple_adder (e1of2? a[32], b[32], cin; e1of2! out[32], cout) defproc ripple_adder (e1of2? a[32], b[32], cin; e1of2! out[32], cout)
 { {
-    build_dpath<32,2,1,onebit> dp;+    build_dpath<32,2,1,@onebit> dp;
  
-    (i : 32 : dp.in[2*i] = a[i]; dp.in[2*i+1] = b[i]);+    (i : 32 : dp.in[2*i] = a[i]; dp.in[2*i+1] = b[i];)
     dp.out = out;     dp.out = out;
     dp.rin[0] = cin;     dp.rin[0] = cin;
-    dp.rout[0] = cout+    dp.rout[0] = cout;
 } }
 </code> </code>
 +
 +Process type (''ptype'') parameters for templates use the ''@'' character (as in ''@onebit'') in the example above.