hades.utils
Class ISCAS89Converter

java.lang.Object
  extended byhades.utils.ISCAS89Converter

public class ISCAS89Converter
extends java.lang.Object

simple utility class to convert ISCAS 89 benchmark circuit descriptions to Hades .hds and .sym format. This class keeps all signal names from the ISCAS format. Currently, only AND/NAND/NOR/OR/INV and DFF components are implemented.

As the ISCAS format contains no explicit gate/component names, we create gate names of the form "gate_type" + "linenumber", e.g. "Nand42".

For inputs, we generate Ipin SimObjects with name "in_"+signalname, for outputs, Opins names "out_"+signalname, respectively. When necessary, the two global Ipins "in_clk" and "in_nreset" are created.


Field Summary
(package private)  boolean debug
           
(package private)  Design design
           
(package private)  java.io.LineNumberReader reader
           
 
Constructor Summary
ISCAS89Converter()
           
 
Method Summary
static java.lang.String changeExtension(java.lang.String filename, java.lang.String extension)
           
 void checkCreateClkResetPins()
          check if our Designs contains Signals named "clk" and "nreset", which are only created when the Design contains one or more DFF (hades.models.flipflops.Dffr) components.
(package private)  Signal checkCreateSignal(java.lang.String name)
          check whether our Design already contains a Signal called "name".
 Design getDesign()
           
 void handleComponentDeclaration(java.lang.String line)
          handle a declaration of the form G5 = DFF(G10) G8 = AND(G14, G6)
 void handleDFF(java.lang.String[] tokens)
           
 void handleGate(java.lang.String[] tokens, java.lang.String type)
           
 void handleInputDeclaration(java.lang.String line)
          handle "INPUT(SIGNALNAME)"
 void handleInverter(java.lang.String[] tokens)
           
 void handleOutputDeclaration(java.lang.String line)
          handle "OUTPUT(SIGNALNAME)"
static void main(java.lang.String[] argv)
           
static void msg(java.lang.String s)
           
 void parse()
           
 void printTokens(java.lang.String[] tokens)
           
 void setDebug(boolean b)
           
 void setDesign(Design _design)
           
 void setReader(java.io.LineNumberReader _reader)
           
static void usage()
           
 void writeTestbench(java.io.PrintWriter PW)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

debug

boolean debug

design

Design design

reader

java.io.LineNumberReader reader
Constructor Detail

ISCAS89Converter

public ISCAS89Converter()
Method Detail

setDesign

public void setDesign(Design _design)

getDesign

public Design getDesign()

setReader

public void setReader(java.io.LineNumberReader _reader)

setDebug

public void setDebug(boolean b)

parse

public void parse()
           throws java.lang.Exception
Throws:
java.lang.Exception

handleInputDeclaration

public void handleInputDeclaration(java.lang.String line)
handle "INPUT(SIGNALNAME)"


handleOutputDeclaration

public void handleOutputDeclaration(java.lang.String line)
handle "OUTPUT(SIGNALNAME)"


handleComponentDeclaration

public void handleComponentDeclaration(java.lang.String line)
handle a declaration of the form G5 = DFF(G10) G8 = AND(G14, G6)


printTokens

public void printTokens(java.lang.String[] tokens)

handleInverter

public void handleInverter(java.lang.String[] tokens)

handleDFF

public void handleDFF(java.lang.String[] tokens)

handleGate

public void handleGate(java.lang.String[] tokens,
                       java.lang.String type)

checkCreateSignal

Signal checkCreateSignal(java.lang.String name)
check whether our Design already contains a Signal called "name". If not, create that Signal. Finally, return a reference to the Signal.


checkCreateClkResetPins

public void checkCreateClkResetPins()
check if our Designs contains Signals named "clk" and "nreset", which are only created when the Design contains one or more DFF (hades.models.flipflops.Dffr) components. If so, we also need additional input pins for these signal, because those inputs are implicitly assumed by the ISCAS format.


writeTestbench

public void writeTestbench(java.io.PrintWriter PW)

changeExtension

public static java.lang.String changeExtension(java.lang.String filename,
                                               java.lang.String extension)

msg

public static void msg(java.lang.String s)

usage

public static void usage()

main

public static void main(java.lang.String[] argv)
                 throws java.lang.Exception
Throws:
java.lang.Exception