Difference between revisions of "MASC/Elastic System"

From Vlsiwiki
Jump to: navigation, search
(Created page with "== Elastic System Tutorial == This tutorial is to demonstrate how to create an Elastic System design using the default MASC synthesis flow. The first you need, if you're not ...")
 
(Elastic System Tutorial)
Line 2: Line 2:
  
 
This tutorial is to demonstrate how to create an Elastic System design using the default MASC synthesis flow.
 
This tutorial is to demonstrate how to create an Elastic System design using the default MASC synthesis flow.
The first you need, if you're not yet, is to familiarize with the concept of Elastic System, the following papers should give a good introduction to the topic [http://http://www.cs.upc.edu/~jordicf/gavina/BIB/files/self_tau06.pdf SELF], [http://dspace.mit.edu/handle/1721.1/58834 LI_BDN] and [http://www.cs.columbia.edu/~luca/research/lipTransactions.pdf LIDs].
+
The first you need, if you're not yet, is to familiarize with the concept of Elastic System, the following papers should give a good introduction to the topic [http://www.cs.upc.edu/~jordicf/gavina/BIB/files/self_tau06.pdf SELF], [http://dspace.mit.edu/handle/1721.1/58834 LI_BDN] and [http://www.cs.columbia.edu/~luca/research/lipTransactions.pdf LIDs].
Once you know enough about the concept of Elastic Systems, you need to get access to the RTL repo of the MASC lab (mascrtl), check instructions [GIT_Repository here].  
+
 
 +
There is one important difference between the approaches in these papers and the approach we use in the lab. The previous approaches have an automated flow that convert regular synchronous RTL code into elastic systems. This leads to some limitations in the types of transformations that are possible in the circuits. In the approach adopted at MASC, we require the designer to explicit write RTL using the elastic syntax. For that, we provide a custom implementation of the elastic buffer, that must be declared in the RTL code. Also, the handshake signals have to be generated by the designer.
 +
 
 +
Once you know enough about the concept of Elastic Systems, you need to get access to the RTL repo of the MASC lab (mascrtl), check instructions [[GIT_Repository]]. In the remainder of this tutorial, <mascrtl> will indicate directory to which the repository was checked-out. Thus, <mascrtl>/code indicates the directory code inside the mascrtl repository, and so forth.
 +
 
 +
== Glossary ==
  
 
A couple of remarks that may be useful for mapping the contents of the papers into the vocabulary used here.  
 
A couple of remarks that may be useful for mapping the contents of the papers into the vocabulary used here.  
The names Elastic Systems, Latency Insensitive and Synchronous with Handshakes are different names used in the literature, but indicate the same thing (or almost the same thing). These approached have an automated flow that convert regular synchronous RTL code into elastic systems. That basically means that, there is a tool that automatically creates the handshake signals. There is also a pair of signals, one forward and one backward, but the names vary. Typically, the signals are named 'valid' (indicating that the data in the channel is valid) and 'stop' (indicating that the sender should stop sending data).
 
The approach this tutorial discusses is a bit different, since in it, you are required to specify the
 
  
There is a few steps needed before actually getting into writing the elastic RTL code: create a project in the default MASC flow, import the files for the MASC elastic buffers (that we call stages).
+
* '''Elastic Systems''', '''Latency Insensitive''' and '''Synchronous with Handshakes''': different names used in the literature, indicate the same thing (or almost the same thing). 
 +
* '''Valid''' and '''Stop''' signals are the handshakes signals used in the papers. LI-BDNs uses queue operations intead ('''enqueue''', '''dequeue''', '''empty''' and '''full'''. Although our papers also use valid/stop, in our verilog the names used are '''valid''' and '''retry'''.
 +
* '''Elastic buffers''' are called '''stages''' in our verilog, but are essentially the same thing.
 +
 
 +
 
 +
 
 +
== Methodology ==
 +
 
 +
The tutorial starts by presenting a simple circuit, to get the reader familiarized with the flow and the behavior and testing of elastic. We will call this circuit "Hello, Elastic". It consists of a simple buffer that returns '0' if the input is odd, and returns the input divided by two if it is even.
 +
A testbench will also be generated to verify the functionality.
 +
Then, we are going to create an elastic multiplier, with the relevant testbench. The topology used for the multiplier is the so-called shift-adder, which takes an arbitrary number of cycles to complete.
 +
 
 +
 
 +
 
 +
== Hello Elastic ==
 +
 
 +
=== Creating an RTL project ===
 +
 
 +
Start by creating a new project, named 'hello' as described in [[Synthesis Setup]].
 +
 
 +
 
 +
== Multiplier ==
  
== Creating
+
(Explain arithmetically how the multiplier works).

Revision as of 18:29, 10 June 2015

Elastic System Tutorial

This tutorial is to demonstrate how to create an Elastic System design using the default MASC synthesis flow. The first you need, if you're not yet, is to familiarize with the concept of Elastic System, the following papers should give a good introduction to the topic SELF, LI_BDN and LIDs.

There is one important difference between the approaches in these papers and the approach we use in the lab. The previous approaches have an automated flow that convert regular synchronous RTL code into elastic systems. This leads to some limitations in the types of transformations that are possible in the circuits. In the approach adopted at MASC, we require the designer to explicit write RTL using the elastic syntax. For that, we provide a custom implementation of the elastic buffer, that must be declared in the RTL code. Also, the handshake signals have to be generated by the designer.

Once you know enough about the concept of Elastic Systems, you need to get access to the RTL repo of the MASC lab (mascrtl), check instructions GIT_Repository. In the remainder of this tutorial, <mascrtl> will indicate directory to which the repository was checked-out. Thus, <mascrtl>/code indicates the directory code inside the mascrtl repository, and so forth.

Glossary

A couple of remarks that may be useful for mapping the contents of the papers into the vocabulary used here.

  • Elastic Systems, Latency Insensitive and Synchronous with Handshakes: different names used in the literature, indicate the same thing (or almost the same thing).
  • Valid and Stop signals are the handshakes signals used in the papers. LI-BDNs uses queue operations intead (enqueue, dequeue, empty and full. Although our papers also use valid/stop, in our verilog the names used are valid and retry.
  • Elastic buffers are called stages in our verilog, but are essentially the same thing.


Methodology

The tutorial starts by presenting a simple circuit, to get the reader familiarized with the flow and the behavior and testing of elastic. We will call this circuit "Hello, Elastic". It consists of a simple buffer that returns '0' if the input is odd, and returns the input divided by two if it is even. A testbench will also be generated to verify the functionality. Then, we are going to create an elastic multiplier, with the relevant testbench. The topology used for the multiplier is the so-called shift-adder, which takes an arbitrary number of cycles to complete.


Hello Elastic

Creating an RTL project

Start by creating a new project, named 'hello' as described in Synthesis Setup.


Multiplier

(Explain arithmetically how the multiplier works).