hades.models.rtl
Class RAM_256x8

java.lang.Object
  extended byhades.simulator.SimObject
      extended byhades.models.rtl.RAM_256x8
All Implemented Interfaces:
java.lang.Cloneable, ContextToolTip, Memory, java.io.Serializable, Simulatable

public class RAM_256x8
extends SimObject
implements Memory

RAM_256x8 - a subclass of SimObject that models a static RAM of 256 by 8 bits. Ports are single bits of type StdLogic1164. The RAM has separate nWE, nME, and nCS lines.

The behaviour is modeled similar to typical ASIC SRAM macrocells. The RAM outputs are tri-stated and the input disabled as long as nCS is high. RAM outputs and the whole RAM contents are lost, whenever one of the control-lines is undefined.

On the rising edge of nME, the RAM latches the current value of the address inputs. If nWE is high during a nME cycle, the data from the selected RAM location appears on the data outputs after t_access. For a write cycle, hold nWE low during a nME cycle. The value from the data input lines is written to the selected address, as soon as the first of either nWE or nME goes low.

Clicking 'edit' on the RAM model will open a dialog window which allows selection of the initial RAM data file only.

See Also:
Serialized Form

Field Summary
protected  MemoryEditorFrame MEF
           
(package private)  java.lang.String resourcename
           
static double t_access
           
static double t_tristate
           
static double t_undefined
           
static int TRISTATED
           
static int UNDEFINED
           
 
Fields inherited from class hades.simulator.SimObject
classloader, console, debug, editor, name, parent, ports, propertySheet, simulator, symbol, versionId, visible
 
Constructor Summary
RAM_256x8()
          RAM_256x8 constructor
 
Method Summary
 void addMemoryListener(MemoryListener ML)
           
 boolean canChangeSize()
           
 void configure()
          create and display a 'ConfigDialog' to set the parameters for a SimObject.
 void dbg(java.lang.String msg)
           
 void elaborate(java.lang.Object arg)
          elaborate(): This method is called by the simulation engine to initialize the simulation object.
 void evaluate(java.lang.Object arg)
          evaluate(): called by the simulation engine on all events that concern this object.
 int getAddrOffset()
          utility method to support systems with different memory components mapped into a single address space at different offsets.
 int getBitsPerWord()
          return the number of bits per word in this memory.
 PropertySheet getConfigDialog()
           
 long[] getDataArray()
           
 long getDataAt(int address)
           
 java.lang.String[] getExternalResources()
          return a String[] array of length 1 with our RAM contents file.
protected  java.lang.String getHexString(long value, int n_chars)
           
 java.awt.Component getPropertySheet()
          return a reference to the 'property sheet' or configuration window for this SimObject.
 java.lang.String getResourcename()
           
 int getSize()
          get the number of words in this memory.
 boolean initialize(java.lang.String s)
          initialize a RAM_256x8 from a String.
 void initRAM()
           
protected  void latchAdress()
           
 boolean merge(java.io.BufferedReader reader)
           
 boolean needsExternalResources()
          we use one external resource: the data file to initialize the RAM contents.
 boolean parse(java.io.BufferedReader br)
          parse RAM data from a file specified via its Java 1.1 resourcename.
 void parseRAM(java.lang.String resourcename)
           
 void printSramContent()
           
 void removeMemoryListener(MemoryListener ML)
           
 boolean resize(int n_words, int n_bits_per_word)
           
 boolean save(java.io.PrintWriter PW)
           
 void setBitsPerWord(int n_bits)
           
 void setDataArray(long[] data)
           
 void setDataAt(int address, long value)
           
 void setResourcename(java.lang.String s)
           
 void setSize(int n_words)
           
 java.lang.String toString()
          toString() - the usual info method
 void write(java.io.PrintWriter ps)
           
 
Methods inherited from class hades.simulator.SimObject
constructDynamicSymbol, copy, getBindkey, getClassLoader, getDebug, getEditor, getFullName, getName, getParent, getPort, getPorts, getResourceAsStream, getSimulator, getSymbol, getSymbolResourceName, getToolTip, getVersionId, isVisible, keyPressed, message, mousePressed, needsDynamicSymbol, setClassLoader, setConsole, setDebug, setEditor, setName, setParent, setPorts, setSimulator, setSymbol, setVersionId, setVisible, tearDown
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MEF

protected MemoryEditorFrame MEF

TRISTATED

public static final int TRISTATED
See Also:
Constant Field Values

UNDEFINED

public static final int UNDEFINED
See Also:
Constant Field Values

t_access

public static final double t_access
See Also:
Constant Field Values

t_tristate

public static final double t_tristate
See Also:
Constant Field Values

t_undefined

public static final double t_undefined
See Also:
Constant Field Values

resourcename

java.lang.String resourcename
Constructor Detail

RAM_256x8

public RAM_256x8()
RAM_256x8 constructor

Method Detail

needsExternalResources

public boolean needsExternalResources()
we use one external resource: the data file to initialize the RAM contents.

Overrides:
needsExternalResources in class SimObject

getExternalResources

public java.lang.String[] getExternalResources()
return a String[] array of length 1 with our RAM contents file.

Overrides:
getExternalResources in class SimObject

initRAM

public void initRAM()

printSramContent

public void printSramContent()

getResourcename

public java.lang.String getResourcename()
Specified by:
getResourcename in interface Memory

setResourcename

public void setResourcename(java.lang.String s)
Specified by:
setResourcename in interface Memory

initialize

public boolean initialize(java.lang.String s)
initialize a RAM_256x8 from a String. Currently, the String should contain the following things: the RAM_256x8 versionId, and the Java resource-name of the RAM datafile to parse, e.g.
       1002 /hades/examples/b-tutorial/ampel-43.rom
    

Overrides:
initialize in class SimObject

write

public void write(java.io.PrintWriter ps)
Overrides:
write in class SimObject

parseRAM

public void parseRAM(java.lang.String resourcename)

parse

public boolean parse(java.io.BufferedReader br)
parse RAM data from a file specified via its Java 1.1 resourcename. If the file is not found or contains illegal data, the RAM is re-initialized to the all-invalid state.

Each line of the RAM data file should contain the address and the corresponding data in hex format, seperated by a colon, e.g. '0001:D3' or '03FF:20'.

The alternative DigLOG compact format, e.g. '0000:000102030405060708090A0B0C0D0E0F' is also accepted.

The RAM model will issue a warning message, if the same location is written multiple times.

Specified by:
parse in interface Memory

setDataAt

public void setDataAt(int address,
                      long value)
Specified by:
setDataAt in interface Memory

getDataAt

public long getDataAt(int address)
Specified by:
getDataAt in interface Memory

getBitsPerWord

public int getBitsPerWord()
Description copied from interface: Memory
return the number of bits per word in this memory. This should typically be in the range 1 .. 64.

Specified by:
getBitsPerWord in interface Memory

setBitsPerWord

public void setBitsPerWord(int n_bits)
                    throws java.lang.Exception
Specified by:
setBitsPerWord in interface Memory
Throws:
java.lang.Exception

getSize

public int getSize()
Description copied from interface: Memory
get the number of words in this memory.

Specified by:
getSize in interface Memory

setSize

public void setSize(int n_words)
             throws java.lang.Exception
Specified by:
setSize in interface Memory
Throws:
java.lang.Exception

resize

public boolean resize(int n_words,
                      int n_bits_per_word)
               throws java.lang.Exception
Specified by:
resize in interface Memory
Throws:
java.lang.Exception

canChangeSize

public boolean canChangeSize()
Specified by:
canChangeSize in interface Memory

getDataArray

public long[] getDataArray()
Specified by:
getDataArray in interface Memory

setDataArray

public void setDataArray(long[] data)
Specified by:
setDataArray in interface Memory

merge

public boolean merge(java.io.BufferedReader reader)
Specified by:
merge in interface Memory

addMemoryListener

public void addMemoryListener(MemoryListener ML)
Specified by:
addMemoryListener in interface Memory

removeMemoryListener

public void removeMemoryListener(MemoryListener ML)
Specified by:
removeMemoryListener in interface Memory

getHexString

protected java.lang.String getHexString(long value,
                                        int n_chars)

save

public boolean save(java.io.PrintWriter PW)
Specified by:
save in interface Memory

configure

public void configure()
Description copied from class: SimObject
create and display a 'ConfigDialog' to set the parameters for a SimObject. The default ConfigDialog for the base class (SimObject) itself is empty except for the 'instance name' of the SimObject.

Overrides:
configure in class SimObject

getPropertySheet

public java.awt.Component getPropertySheet()
Description copied from class: SimObject
return a reference to the 'property sheet' or configuration window for this SimObject. We cast the return value to an AWT Component, but typically you can expect either a hades.gui.PropertySheet or an java.awt.Window (Dialog or Frame).

Overrides:
getPropertySheet in class SimObject

elaborate

public void elaborate(java.lang.Object arg)
elaborate(): This method is called by the simulation engine to initialize the simulation object.

Specified by:
elaborate in interface Simulatable
Overrides:
elaborate in class SimObject

evaluate

public void evaluate(java.lang.Object arg)
evaluate(): called by the simulation engine on all events that concern this object. The object is responsible for updating its internal state and for scheduling all pending output events.

Specified by:
evaluate in interface Simulatable
Overrides:
evaluate in class SimObject
Parameters:
arg - an arbitrary object argument

latchAdress

protected void latchAdress()

dbg

public void dbg(java.lang.String msg)

toString

public java.lang.String toString()
toString() - the usual info method

Overrides:
toString in class SimObject

getAddrOffset

public int getAddrOffset()
Description copied from interface: Memory
utility method to support systems with different memory components mapped into a single address space at different offsets. Note that the value returned is just used for displaying the addresses in the GUI (e.g. MemoryHexEditorField or MRCanvas), while the simulation uses the raw adresses (always starting at 0).

For example, the D*CORE processor used in our T3 practical course uses one ROM mapped to addresses 0x000..0x6FFF with address offset 0, a RAM mapped to addresses 0x8000..0xFFFF with address offset 0x8000, and IO components mapped to 0x7000..0x7FFF. Standard memory components will usually return 0 here.

Specified by:
getAddrOffset in interface Memory

getConfigDialog

public PropertySheet getConfigDialog()
Specified by:
getConfigDialog in interface Memory