List<Port *> I_List, O_List: These two members
maintain linked lists of input and output ports respectively as required
by the component. Each element of the linked list is a pointer to a
Port object, which is described in detail in a subsequent
section. These linked list of ports are used extensively during the
simulation in order to coordinate the processing of inputs and outputs
and to access lower levels of the component hierarchy built during the
construction of the circuit. Because a component communicates with the
external world via its ports, the port lists are made part of the
public interface of the Component class.
Note that this is one of the few instances in the implementation where
public access is granted to the data members of a class.
void process(ckt_time time): This is a virtual
method which implements the functional behaviour of the component. For
high level components, (that is, components which are composed of
subcomponents) this function scans over all the port pointers in the
aforementioned input port list and activates all the subcomponents which
are connected to these input ports. Components at the lowest level of
the hardware hierarchy, however, must override this virtual function to
provide the specific functionality of the component. For example, a
2-input NAND gate would examine its two inputs signals at the
specified time and produce a low output only if both inputs are high.
void simulate(): This function is employed by all
classes derived from the Component class, regardless of the
hierarchical level of the component. This method first determines if
all the inputs for the component are ready at the local time of the
component. If so, then this method will increment the local time and
invoke the process() member function to trigger the component
to consume its inputs and produce appropriate outputs. The
simulate() method is called recursively as control travels
down the three dimensional component object tree.
void show_outputs(): In order to determine the
results of the simulation, this function must be called. This method
simply traverses the ports in the output port list of the component and
displays all the signal values and times that are stored in the output
wires connected to each of the ports.