checkpoint
[sbp.git] / tests / library.xml
diff --git a/tests/library.xml b/tests/library.xml
new file mode 100644 (file)
index 0000000..1498416
--- /dev/null
@@ -0,0 +1,804 @@
+<?xml version='1.0' encoding='utf-8'?>
+
+<!--  Component library -->
+
+<!DOCTYPE component_list SYSTEM "ComponentList.dtd">
+
+<component_list>
+
+<!--
+THE FOLLOWING GROUP OF COMPONENTS IS USED FOR BUILDING SWITCH FABRICS.
+-->
+
+<component>
+<type>SourceFunnel</type>
+<class> com.sunlabs.archsim.fleet.HornAndFunnel.SourceFunnel </class>
+<info>
+       <tag value="FABRIC"/>
+       <!--
+       Inputs: In0, In1, ..., InK
+                       SrcIn0, SrcIn1, ..., SrcInK     
+       -->
+       <output name="Out" />
+       <parameter name= "depth" type="int"/>
+       <global name="mergeArbiterDelay" type="int" />
+       <global name="mergePassDelay" type="int" />
+       <global name="mergeAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Takes Payload (instruction) inputs on InX, and Data inputs on
+       SrcInX. When both inputs are received, the data is inserted
+       into the payload and funneled to Out.
+Global parameters: 
+       mergeArbiterDelay
+       mergePassDelay
+       mergeAckDelay
+Individual parameter: 
+       depth = Depth of the tree. The number of input pairs is 2 ^ (depth).
+-->
+</component>
+
+<component>
+<type>InstructionHorn</type>
+<class> com.sunlabs.archsim.fleet.HornAndFunnel.InstructionHorn </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <!--
+       Outputs: Out0, Out1, ... , OutK
+       -->
+       <parameter name= "depth" type="int"/>
+</info>
+<!--
+Behavior: 
+       Instruction horn - takes Payloads (Instructions) on In, 
+       steers them to the output determined by the source
+       attribute from Payload.
+Global parameters:
+Individual parameters: 
+       depth = depth of the tree. The number of outputs is 2 ^ (depth).
+-->
+</component>
+
+<component>
+<type>DestinationHorn</type>
+<class> com.sunlabs.archsim.fleet.HornAndFunnel.DestinationHorn </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <!--
+       Outputs: Out0, Out1, ... , OutK
+       -->
+       <parameter name= "depth" type="int"/>
+</info>
+<!--
+Behavior:
+       Horn, - takes Payloads (Instructions) on In, 
+       steers them to the output determined by the destination
+       attribute from Payload.
+Individual parameter: 
+       depth = d of the tree. The number of outputs is 2 ^ (depth).
+-->
+</component>
+
+<component>
+<type>DataMaskBranch</type>
+<class> com.sunlabs.archsim.fleet.components.switchFabric.DataMaskBranch </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out0" />
+       <output name="Out1" />
+       <parameter name="branchMask" type="int" />
+       <parameter name= "branchMaskBit" type="int" />
+</info>
+<!--
+Behavior: 
+       Input received on In is steered either to Out0 or Out1, depending on the
+       specified bit in Integer data carried by Payload.
+Individual parameters: 
+       branchMask (default = 1)
+       branchMaskBit (default = 0)
+-->
+</component>
+
+<component>
+<type>DestinationMaskBranch</type>
+<class> com.sunlabs.archsim.fleet.components.switchFabric.DestinationMaskBranch </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out0" />
+       <output name="Out1" />
+       <parameter name="branchMask" type="int" />
+       <parameter name= "branchMaskBit" type="int" />
+</info>
+<!--
+Behavior: 
+       Input received on In is steered either to Out0 or Out1, depending on the
+       specified bit in the Payload's destination
+Individual parameters: 
+       branchMask (default = 1)
+       branchMaskBit (default = 0)
+-->
+</component>
+
+<component>
+<type>SourceMaskBranch</type>
+<class> com.sunlabs.archsim.fleet.components.switchFabric.SourceMaskBranch </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out0" />
+       <output name="Out1" />
+       <parameter name="branchMask" type="int"/>
+       <parameter name= "branchMaskBit" type="int"/>
+</info>
+<!--
+Behavior: 
+       Input received on In is steered either to Out0 or Out1, depending on the
+       specified bit in the Payload's source
+Individual parameters: 
+       branchMask (default = 1)
+       branchMaskBit (default = 0)
+-->
+</component>
+
+<component>
+<type>ToggleBranch</type>
+<class> com.sunlabs.archsim.fleet.components.switchFabric.ToggleBranch </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out0" />
+       <output name="Out1" />
+       <parameter name="branchFanout" type="int"/>
+</info>
+<!--
+Inputs:                In
+Outputs:       Out0, Out1, ... , OutK
+Behavior: 
+       Input received on In is steered to Out0, Out1, ... , OutK 
+       in a round robin fashion
+Individual parameters: 
+       branchFanout (default = 2)
+-->
+</component>
+
+<component>
+<type>Merge</type>
+<class> com.sunlabs.archsim.fleet.components.switchFabric.Merge </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In0" />
+       <input name="In1" />
+       <output name="Out" />
+       <parameter name="mergeFanIn" type="int"/>
+       <parameter name= "mergeArbiterDelay" type="int"/>
+       <parameter name= "mergePassDelay" type="int"/>
+       <parameter name= "mergeAckDelay" type="int"/>
+       <parameter name= "mergeArbiterActionPassDelay" type="int"/>
+       <parameter name= "mergeIntouActionPassDelay" type="int"/>
+       <parameter name= "mergeInpuAckDelay" type="int"/>
+       <parameter name= "mergeOutputAckDelay" type="int"/>
+       <global name="mergeArbiterDelay" type="int" />
+       <global name="mergePassDelay" type="int" />
+       <global name="mergeAckDelay" type="int" />
+       <global name="mergeArbiterActionPassDelay" type="int" />
+       <global name="mergeIntouActionPassDelay" type="int" />
+       <global name="mergeInpuAckDelay" type="int" />
+       <global name="mergeOutputAckDelay" type="int" />
+</info>
+<!--
+Inputs:        In0, in2, ..., InK
+Outputs:       Out 
+Behavior: Demand merge - all inputs are steered to one output
+-->
+</component>
+
+<component>
+<type>DataPayloadMerge</type>
+<class> com.sunlabs.archsim.fleet.HornAndFunnel.SourceSync </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <input name="SrcIn" />
+       <output name="Out" />
+</info>
+<!--
+Behavior: 
+       Inserts Data arrraiving at SrcIn into Payload arriving at In. After both
+       inputs had arrived, it produces a Payload with inserted Data on Out.
+-->
+</component>
+
+
+<component>
+<type>Trunk</type>
+<class> com.sunlabs.archsim.fleet.components.trunk.Trunk </class>
+<info>
+       <tag value="FABRIC"/>
+
+       <input name="FabricIn" />
+       <input name="BypassIn" />
+
+       <output name="Out" />
+
+       <parameter name="trunkArbiterDelay" type="int"/>
+       <parameter name="trunkCopyDelay" type="int"/>
+       <parameter name="trunkAckDelay" type="int"/>
+
+       <global name="trunkArbiterDelay" type="int" />
+       <global name="trunkCopyDelay" type="int" />
+       <global name="trunkAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Essentially a demand merge - merges inputs on BypassIn (literals) and on
+       FabricIn ("regular" instructions) in one output Out. The two sources of inputs are
+       arbitrated.
+-->
+</component>
+
+<component>
+<type>FifoElement</type>
+<class> com.sunlabs.archsim.fleet.ships.fifo.FifoElement </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out" />
+       <parameter name="forwardDelay" type="int"/>
+       <parameter name="backwardDelay" type="int"/>
+       <global name="fifoForwardDelay" type="int" />
+       <global name="fifoBackwardDelay" type="int" />
+</info>
+<!--
+Inputs: In
+Outputs: Out
+Behavior: 
+       A fifo element. Elements strung together form a Fifo
+       Can only be used in a switch fabric not as a ship.
+-->
+</component>
+
+
+<component>
+<type>Fifo</type>
+<class> com.sunlabs.archsim.fleet.ships.fifo.Fifo </class>
+<info>
+       <tag value="FABRIC"/>
+       <input name="In" />
+       <output name="Out" />
+       <parameter name="fifoCapacity" type="int"/>
+       <parameter name="forwardDelay" type="int"/>
+       <parameter name="backwardDelay" type="int"/>
+       <global name="fifoForwardDelay" type="int" /> <!-- applies to one element -->
+       <global name="fifoBackwardDelay" type="int" /> <!-- applies to one element -->
+</info>
+<!--
+Behavior: 
+       A fifo.
+       Can only be used in a switch fabric not as a ship.
+-->
+</component>
+
+<!--
+
+THE FOLLOWING IS IS A LIST OF SHIPS.
+
+-->
+
+<component>
+<type>FetchAndIssue</type>
+<class> com.sunlabs.archsim.fleet.ships.fetchAndIssue.FetchAndIssue </class>
+<info>
+       <tag value="SHIP"/>     <input name="In" />
+       <output name="InstructionOut" />
+       <output name="LiteralOut" />
+       <global name="instructionIssueDelay" type="int" /> 
+       <global name="literalIssueDelay" type="int" /> 
+       <global name="fetchDelay" type="int" /> 
+</info>
+<!--
+Behavior: 
+       Takes a ship name in, fetches the code, issues literals and instructions
+       on corresponding output.                                   
+-->
+</component>
+
+<component>
+<type>Accumulator</type>
+<class> com.sunlabs.archsim.fleet.ships.accumulator.Accumulator </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <output name="Out" />
+       <global name="accumulatorOutDelay" type="int" /> 
+       <global name="accumulatorAckDelay" type="int" /> 
+</info>
+<!--
+Behavior: 
+       Take numbers on In, accumulate values. 
+       When OOB data is received, the sum is produced on Out,
+       and the accumulator is reset.
+-->
+</component>
+
+<component>
+<type>TokenAccumulator</type>
+<class> com.sunlabs.archsim.fleet.ships.tokenaccumulator.TokenAccumulator </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="DataIn" />
+       <input name="TokenOut" />
+       <output name="DataOut" />
+       <output name="TokenIn" />
+</info>
+<!--
+Behavior: 
+       Take numbers on In, accumulate values. 
+       When OOB data is received, the sum is produced on Out,
+       and the accumulator is reset.
+       TokenIn (output) and DataIn (input) form a request acknowledge
+       interface for receiving data.
+       Token Out (input)and DataOut (output) form a request-acknowledge
+       interface for the sum.
+-->
+</component>
+
+<component>
+<type>Adder</type>
+<class> com.sunlabs.archsim.fleet.ships.adder.Adder </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In1" />
+       <input name="In2" />
+       <output name="Out" />
+       <global name="adderDelay" type="int" />
+       <global name="adderAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Receive two numbers on In1 and In2, then produce the sum on Out.
+-->
+</component>
+
+<component>
+<type>TokenAdder</type>
+<class> com.sunlabs.archsim.fleet.ships.tokenadder.TokenAdder </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In1" />
+       <input name="In2" />
+       <input name="TokenOut"/>
+       <output name="Out" />
+       <output name="TokenIn1" />
+       <output name="TokenIn1" />
+       <global name="tokenAdderDelay" type="int" />
+       <global name="tokenAdderAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Receive two numbers on In1 and In2, then produce the sum on Out.
+       Request-acknowledge pairs forming the token interface
+       are: < In1, TokenIn1 >, < In2, TokenIn2 >, < TokenOut, Out >
+-->
+</component>
+
+<component>
+<type>AdderOOB</type>
+<class> com.sunlabs.archsim.fleet.ships.adder_oob.Adder_oob </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In1" />
+       <input name="In2" />
+       <output name="Out" />
+       <global name="adderOOBDelay" type="int" />
+       <global name="adderOOBAckDelay" type="int" />
+</info>
+<!--
+Behavior:
+       Receive two numbers on In1 and In2, then produce the sum on Out.
+       The difference between Adder and Adder_oob is that when A
+       dder_oob receives a OOB data on both inputs, it will produce 
+       an null Data, which will be propagated to other ships on the 
+       computation path and disassemble any standing MOVEs on it's 
+       way. This is used in the Fibonacci Fleet for terminating the 
+       computation.
+-->
+</component>
+
+<component>
+<type>BitBucket</type>
+<class> com.sunlabs.archsim.fleet.ships.bitbucket.BitBucket </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <parameter name="bitBucketdelay" type="int" />
+       <parameter name="bitBucketKeepData" type="int" />
+       <global name="bitBucketdelay" type="int" />
+       <global name="bitBucketKeepData" type="int" />
+</info>
+<!--
+Behavior: 
+       Takes any input and "throws it away".
+       Will keep all data if asked to - useful for testing.    
+-->
+</component>
+
+<component>
+<type>Constant</type>
+<class> com.sunlabs.archsim.fleet.ships.constant.Constant </class>
+<info>
+       <tag value="SHIP"/>
+       <output name="Out" />
+       <parameter name="constantValue" type="any" />
+       <parameter name="constantDelay" type="int" />
+       <global name="constantValue" type="any" />
+       <global name="constantDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Always produces the same constrant (integer, boolean, or string)
+-->
+</component>
+
+<component>
+<type>Duplicator</type>
+<class> com.sunlabs.archsim.fleet.ships.duplicator.Duplicator </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <output name="Out1" />
+       <output name="Out2" />
+       <global name="duplicatorDelay" type="int" />
+       <global name="duplicatorAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Duplicates data. For each input it receives, 
+       it produces a copy of it on both outputs.         
+-->
+</component>
+
+
+<component>
+<type>FifoShipElement</type>
+<class> com.sunlabs.archsim.fleet.ships.fifo.FifoShipElement </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <output name="Out" />
+       <parameter name="forwardDelay" type="int" />
+       <parameter name="fifoBackwardDelay" type="int" />
+       <global name="fifoShipForwardDelay" type="int" />
+       <global name="fifoShipBackwardDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       A fifo element. Elements strung together form a Fifo
+       Can only be used as a ship, or a part of a ship, 
+       not as a fifo in a switch fabric.
+-->
+</component>
+
+
+<component>
+<type>FifoShip</type>
+<class> com.sunlabs.archsim.fleet.ships.fifo.FifoShip </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <output name="Out" />
+       <parameter name="fifoCapacity" type="int" />
+       <parameter name="forwardDelay" type="int" /> <!-- applies to one element -->
+       <parameter name="fifoBackwardDelay" type="int" /> <!-- applies to one element -->
+       <global name="fifoShipForwardDelay" type="int" />
+       <global name="fifoShipBackwardDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       A fifo. Can only be used as a ship, not as a fifo in a switch fabric.
+-->
+</component>
+
+<component>
+<type>TokenFifoShipElement</type>
+<class> com.sunlabs.archsim.fleet.ships.tokenFifo.TokenFifoShipElement </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <input name="TokenIn" />
+       <output name="Out" />
+       <output name="TokenOut" />
+       <parameter name="forwardDelay" type="int" /> 
+       <parameter name="backwardDelay" type="int" /> 
+       <parameter name="tokenDelay" type="int" /> 
+       <parameter name="ackTokenDelay" type="int" /> 
+       <global name="fifoShipForwardDelay" type="int" />
+       <global name="fifoShipBackwardDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       A token fifo ship element. Elements strung together form a TokenFifo
+       Can only be used as a ship, not as a fifo in a switch fabric.
+       <In, TokenOut>, <TokenIn, Out>
+-->
+</component>
+
+<component>
+<type>TokenFifoShip</type>
+<class> com.sunlabs.archsim.fleet.ships.tokenFifo.TokenFifoShip </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In" />
+       <input name="TokenIn" />
+       <output name="Out" />
+       <output name="TokenOut" />
+       <parameter name="fifoCapacity" type="int" /> 
+       <parameter name="forwardDelay" type="int" /> 
+       <parameter name="backwardDelay" type="int" /> 
+       <parameter name="tokenDelay" type="int" /> 
+       <parameter name="ackTokenDelay" type="int" /> 
+       <global name="fifoShipForwardDelay" type="int" />
+       <global name="fifoShipBackwardDelay" type="int" />
+</info>
+<!--
+Behavior:
+       FifoShip with token interface.
+       Request acknowledge pairs are: <In, TokenOut>, <TokenIn, Out>
+-->
+</component>
+
+<component>
+<type>SimpleMemory</type>
+<class> com.sunlabs.archsim.fleet.ships.memory.SimpleMemory </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="ReadAddress" />
+       <input name="WriteAddress" />
+       <input name="WriteData" />
+       <output name="ReadData" />
+       <output name="WriteNext" />
+       <parameter name="readDelay" type="int" /> 
+       <parameter name="writeDelay" type="int" /> 
+       <parameter name="ackDelay" type="int" /> 
+       <parameter name="ackReadDelay" type="int" /> 
+       <parameter name="ackWriteDelay" type="int" /> 
+       <global name="simpleMemoryReadDelay" type="int" />
+       <global name="simpleMemoryWriteDelay" type="int" />
+       <global name="simpleMemoryAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Memory. Read and write interface operat concurrently.
+       No pipelining - one piece of data is operated on at a time (on
+       each read and write side).
+-->
+</component>
+
+<component>
+<type>Selector</type>
+<class> com.sunlabs.archsim.fleet.ships.selector.Selector </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="In1" />
+       <input name="In2" />
+       <input name="InSelect" />
+       <output name="Out" />
+       <global name="selectorDelay" type="int" />
+       <global name="selectorAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       Selector selects between data on In1 and In2, depending on
+       the value it receives on InSelect: 1 selects In1, 2 selects In2.
+       The selcted value is produced on Out.
+       Upon receiving a LAST on its Select input, it will wait for 
+       a LAST to arrive on In1 and In2, consuming and ignoring all 
+       non LAST data.
+-->
+</component>
+
+<component>
+<type>Stride</type>
+<class> com.sunlabs.archsim.fleet.ships.stride.Stride </class>
+<info>
+       <tag value="SHIP"/>
+       <input name="StartValue" />
+       <input name="Step" />
+       <input name="StepCount" />
+       <input name="Next" />
+       <output name="Counter" />
+       <output name="Done" />
+       <parameter name="ackDelay" type="int" />
+       <parameter name="counterDelay" type="int" />
+       <global name="strideCounterDelay" type="int" />
+       <global name="strideAckDelay" type="int" />
+</info>
+<!--
+Behavior: 
+       This is a counter. Setup by providing start value, step size,
+       and step count. Ask for the next value by providing an
+       input on Next. The response is a value on Counter.
+       When the counting is complete, an otput is produced on
+       Done - this is a token that indicates that the stride
+       is ready for the next setup.
+-->    
+</component>
+
+<!--
+
+THESE ARE THE COMPONENTS MADE FOR SPECIALLY FOR COURSE ASSIGNMENTS.
+WHICH SHOULD MAKE IT INTO OUR GENERAL REPERTOAIRE?
+
+-->
+
+<component>
+<type>TwoMerge</type>
+<class> com.sunlabs.archsim.assignJan25.TwoMerge </class>
+</component>
+
+<component>
+<type>Toggle</type>
+<class> com.sunlabs.archsim.assignJan25.Toggle </class>
+</component>
+
+<component>
+<type>RandomBranch</type>
+<class> com.sunlabs.archsim.assignJan25.RandomBranch </class>
+</component>
+
+<component>
+<type>MaskBranch</type>
+<class> com.sunlabs.archsim.assignJan25.MaskBranch </class>
+</component>
+
+<component>
+<type>PayloadSource</type>
+<class> com.sunlabs.archsim.assignJan18.Source </class>
+</component>
+
+<component>
+<type>PayloadSink</type>
+<class> com.sunlabs.archsim.assignJan18.Sink </class>
+</component>
+
+<!--
+
+THESE COMPONENTS ARE INTENDED FOR USE IN AUTOMATED TESTING.
+THEY HAVE ADDITIONAL APIs THAT ACCOMODATE TEST REQUIREMENTS.
+THEY MAY OR MAY NOT CONFORM TO THE CONVENTION THAT A SHIP
+PRODUCES A Data OBJECT AND RECEIVES A Payload OBJECT, 
+WHILE SWITCH FABRIC COMPONENTS RECEIVE AND PRODUCE
+Payload OBJECTS.
+
+-->
+
+
+<component>
+<type>TestDataSink</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.DataSink </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>TestDataSource</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.DataSource </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>TestIntegerSequenceSource</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.IntegerSequenceSource </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>TestPayloadSink</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.PayloadSink </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>TestPayloadSource</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.PayloadSource </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>TestTokenSource</type>
+<class> com.sunlabs.archsim.fleet.ships.testing.TokenSource </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<component>
+<type>InstructionHorn4</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn4 </class>
+<!--
+Used in automated testing. See code.
+-->
+</component>
+
+<!--
+
+THESE COMPONENTS MAY DISAPPEAR OR MAY NEED FIXING. 
+THEY WERE USED IN VERY EARLY TESTS.
+WE LIST THEM HERE FOR OLD TESTS TO STILL RUN.
+
+-->
+
+<component>
+<type>InstructionHorn8</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn8 </class>
+</component>
+
+<component>
+<type>InstructionHorn16</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn16 </class>
+</component>
+
+<component>
+<type>SourceFunnel4</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel4 </class>
+</component>
+
+<component>
+<type>SourceFunnel8</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel8 </class>
+</component>
+
+<component>
+<type>SourceFunnel16</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel16 </class>
+</component>
+
+<component>
+<type>DestinationHorn4</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn4 </class>
+</component>
+
+<component>
+<type>DestinationHorn8</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn8 </class>
+</component>
+
+<component>
+<type>DestinationHorn16</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn16 </class>
+</component>
+
+<component>
+<type>InstructionGenerator</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestInstrGen </class>
+</component>
+
+<component>
+<type>InstrGen4</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestInstrGen4 </class>
+</component>
+
+<component>
+<type>TestShip</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestShip </class>
+</component>
+
+<component>
+<type>TestShipRnd</type>
+<class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestShipRnd </class>
+</component>
+
+</component_list>