- A Logic Circuit Simulation Library in C++ |
#include <inbus.h>
Inheritance diagram for lcs::InputBus< bits >:
lcs::Module
object. A client can only read the data lines and cannot set/modify them. Use the class lcs::Bus
in order to obtain encapsulated lines whose levels can be set.
bits | The number of data lines in the bus. |
Public Member Functions | |
InputBus (void) | |
InputBus (const InputBus< bits > &bus) | |
InputBus (const Line &line) throw (OutOfRangeException<int>) | |
virtual | ~InputBus () |
int | width (void) const |
void | notify (Module *mod, const LineEvent &event, const int &portId, const int &line=-1) throw (OutOfRangeException<int>) |
void | stopNotification (Module *mod, const LineEvent &event, const int &portId, const int &line=-1) throw (OutOfRangeException<int>) |
unsigned long | toInt () const |
std::string | toStr (void) const |
const LineState | get (int index) const throw (OutOfRangeException<int>) |
const InputBus< 1 > | operator[] (unsigned int i) const throw (OutOfRangeException<unsigned int>) |
template<int w> | |
const InputBus< w+bits > | operator, (const InputBus< w > &bus) const |
const InputBus< bits+1 > | operator, (const Line &line) const |
template<int w> | |
const InputBus< w > | partSelect (int s) const |
Friends | |
class | InputBus |
class | Bus |
lcs::InputBus< bits >::InputBus | ( | void | ) |
The default constructor. The data lines are all initialised to the lcs::UNKNOWN state.
lcs::InputBus< bits >::InputBus | ( | const InputBus< bits > & | bus | ) |
lcs::InputBus< bits >::InputBus | ( | const Line & | line | ) | throw (OutOfRangeException<int>) |
Creates a single-line bus object containing the line object which is passed as the argument. One can only use 1 as the class template argument. Other numbers will lead to an lcs::OutOfRangeException<int>
line | The line object which is encapsulated in the resultant bus object. |
lcs::InputBus< bits >::~InputBus | ( | ) | [virtual] |
Destructor.
const LineState lcs::InputBus< bits >::get | ( | int | index | ) | const throw (OutOfRangeException<int>) |
Returns the line state of the line specified by the index
argument. Results in an lcs::OutOfRangeException
if an invalid or out of range index is used. Valid range for the index is 0
to w-1
, where w
is the width of the bus.
index | The index of the line whose line state will be returned by the function. |
void lcs::InputBus< bits >::notify | ( | Module * | mod, | |
const LineEvent & | event, | |||
const int & | portId, | |||
const int & | line = -1 | |||
) | throw (OutOfRangeException<int>) |
Registers the module which has to be notified about an occurance of a line event. A module can request notification at the occurance of one of the three different kinds of line events. These line events are enumerated as lcs::LineEvent
members. Every module which intends to be driven by an InputBus
will have to register itself using this function. Also, the module should be an object of a class which is a derivate of the lcs::Module
class.
This function typically needs to be used only by module implementers in the constructors of their lcs::Module
derivatives. Other users will never need to use this function.
mod | Pointer to the lcs::Module object which has to be notified about a line event. | |
event | The event type whose occurance the module will be notified of. For example, if lcs::LINE_POS_EDGE is used, then the module will notified at the occurance of a positive edge on the line. | |
portId | The id of the module port to which the bus is connected. The bus will use this id while notifying the module. | |
line | The index of the bus line whose line events the module seeks to be notified of. The default value is -1. In general, a negetive value indicates that the module should be notified of the event occuring on all lines of the bus. |
Reimplemented in lcs::Bus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
const InputBus< bits+1 > lcs::InputBus< bits >::operator, | ( | const Line & | line | ) | const |
The overloaded operator to join a data line to a bus to form a new bus. The line to be joined will have to be the right operand. The joined line takes the MSB location in the resulting InputBus
object.
line | The right operand lcs::Line object. |
Reimplemented in lcs::Bus< bits >, lcs::InOutBus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
const InputBus< w+bits > lcs::InputBus< bits >::operator, | ( | const InputBus< w > & | bus | ) | const |
The overloaded operator to join data lines from two busses and form a new bus from these. The right operand bus takes the MSB locations of the new InputBus
object.
bits | The width of the left-operand bus | |
w | The width of the right operand bus | |
bus | The right operand Bus object. |
Reimplemented in lcs::Bus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
const InputBus< 1 > lcs::InputBus< bits >::operator[] | ( | unsigned int | i | ) | const throw (OutOfRangeException<unsigned int>) [inline] |
Overloaded operator which returns a suitable expression object corresponding to the line at index i
. This is done so that bit-selects can be used in expressions of bitwise operations. An OutOfRangeException
is thrown if the index value i
is beyond the bus width.
Reimplemented from lcs::Array1D< T, len >.
const InputBus< w > lcs::InputBus< bits >::partSelect | ( | int | s | ) | const |
Returns a part-bus formed from a set of consecutive lines of the original lcs::InputBus
object. If s+w
goes beyond the range of the original bus width, then, only the lines within range are assigned to the lines of the new bus object.
w | The width of the part-bus. | |
s | The start bit from where the part-bus should be accumulated. |
Reimplemented in lcs::Bus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
void lcs::InputBus< bits >::stopNotification | ( | Module * | mod, | |
const LineEvent & | event, | |||
const int & | portId, | |||
const int & | line = -1 | |||
) | throw (OutOfRangeException<int>) |
De-registers a module from the list of modules which have to be notified. See InputBus::notify
for more details.
This function typically needs to be used only by module implementers in the destructors of their lcs::Module
derivatives. Other users will never need to use this function.
mod | Pointer to the lcs::Module object which has to be de-registered. | |
event | The event type whose occurance the module was be notified. | |
portId | The id of the module port to which the bus is connected. | |
line | The index of the bus line whose line events the module sought to be notified of. The default value is -1. In general, a negetive value indicates that the module should de-registered from being notified by all lines of the bus. |
Reimplemented in lcs::Bus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
unsigned long lcs::InputBus< bits >::toInt | ( | ) | const |
Converts the binary bit value in the bus lines to a decimal integer.
std::string lcs::InputBus< bits >::toStr | ( | void | ) | const |
Converts the binary bit value in the bus lines to a string representation.
int lcs::InputBus< bits >::width | ( | void | ) | const [inline] |
Returns the bus width. Bus width is the same as the number of data lines in the bus.
friend class Bus [friend] |
InputBus classes of different sizes are friends of each other.
Reimplemented in lcs::Bus< bits >, lcs::Bus< outbits >, lcs::Bus< inBits >, lcs::Bus< 1 >, lcs::Bus< lines >, and lcs::Bus< n >.
friend class InputBus [friend] |
InputBus classes of different sizes are friends of each other.