1 <?xml version='1.0' encoding='utf-8'?>
3 <!-- Component library -->
5 <!DOCTYPE component_list SYSTEM "ComponentList.dtd">
10 THE FOLLOWING GROUP OF COMPONENTS IS USED FOR BUILDING SWITCH FABRICS.
14 <type>SourceFunnel</type>
15 <class> com.sunlabs.archsim.fleet.HornAndFunnel.SourceFunnel </class>
19 Inputs: In0, In1, ..., InK
20 SrcIn0, SrcIn1, ..., SrcInK
23 <parameter name= "depth" type="int"/>
24 <global name="mergeArbiterDelay" type="int" />
25 <global name="mergePassDelay" type="int" />
26 <global name="mergeAckDelay" type="int" />
30 Takes Payload (instruction) inputs on InX, and Data inputs on
31 SrcInX. When both inputs are received, the data is inserted
32 into the payload and funneled to Out.
38 depth = Depth of the tree. The number of input pairs is 2 ^ (depth).
43 <type>InstructionHorn</type>
44 <class> com.sunlabs.archsim.fleet.HornAndFunnel.InstructionHorn </class>
49 Outputs: Out0, Out1, ... , OutK
51 <parameter name= "depth" type="int"/>
55 Instruction horn - takes Payloads (Instructions) on In,
56 steers them to the output determined by the source
57 attribute from Payload.
59 Individual parameters:
60 depth = depth of the tree. The number of outputs is 2 ^ (depth).
65 <type>DestinationHorn</type>
66 <class> com.sunlabs.archsim.fleet.HornAndFunnel.DestinationHorn </class>
71 Outputs: Out0, Out1, ... , OutK
73 <parameter name= "depth" type="int"/>
77 Horn, - takes Payloads (Instructions) on In,
78 steers them to the output determined by the destination
79 attribute from Payload.
81 depth = d of the tree. The number of outputs is 2 ^ (depth).
86 <type>DataMaskBranch</type>
87 <class> com.sunlabs.archsim.fleet.components.switchFabric.DataMaskBranch </class>
91 <output name="Out0" />
92 <output name="Out1" />
93 <parameter name="branchMask" type="int" />
94 <parameter name= "branchMaskBit" type="int" />
98 Input received on In is steered either to Out0 or Out1, depending on the
99 specified bit in Integer data carried by Payload.
100 Individual parameters:
101 branchMask (default = 1)
102 branchMaskBit (default = 0)
107 <type>DestinationMaskBranch</type>
108 <class> com.sunlabs.archsim.fleet.components.switchFabric.DestinationMaskBranch </class>
110 <tag value="FABRIC"/>
112 <output name="Out0" />
113 <output name="Out1" />
114 <parameter name="branchMask" type="int" />
115 <parameter name= "branchMaskBit" type="int" />
119 Input received on In is steered either to Out0 or Out1, depending on the
120 specified bit in the Payload's destination
121 Individual parameters:
122 branchMask (default = 1)
123 branchMaskBit (default = 0)
128 <type>SourceMaskBranch</type>
129 <class> com.sunlabs.archsim.fleet.components.switchFabric.SourceMaskBranch </class>
131 <tag value="FABRIC"/>
133 <output name="Out0" />
134 <output name="Out1" />
135 <parameter name="branchMask" type="int"/>
136 <parameter name= "branchMaskBit" type="int"/>
140 Input received on In is steered either to Out0 or Out1, depending on the
141 specified bit in the Payload's source
142 Individual parameters:
143 branchMask (default = 1)
144 branchMaskBit (default = 0)
149 <type>ToggleBranch</type>
150 <class> com.sunlabs.archsim.fleet.components.switchFabric.ToggleBranch </class>
152 <tag value="FABRIC"/>
154 <output name="Out0" />
155 <output name="Out1" />
156 <parameter name="branchFanout" type="int"/>
160 Outputs: Out0, Out1, ... , OutK
162 Input received on In is steered to Out0, Out1, ... , OutK
163 in a round robin fashion
164 Individual parameters:
165 branchFanout (default = 2)
171 <class> com.sunlabs.archsim.fleet.components.switchFabric.Merge </class>
173 <tag value="FABRIC"/>
176 <output name="Out" />
177 <parameter name="mergeFanIn" type="int"/>
178 <parameter name= "mergeArbiterDelay" type="int"/>
179 <parameter name= "mergePassDelay" type="int"/>
180 <parameter name= "mergeAckDelay" type="int"/>
181 <parameter name= "mergeArbiterActionPassDelay" type="int"/>
182 <parameter name= "mergeIntouActionPassDelay" type="int"/>
183 <parameter name= "mergeInpuAckDelay" type="int"/>
184 <parameter name= "mergeOutputAckDelay" type="int"/>
185 <global name="mergeArbiterDelay" type="int" />
186 <global name="mergePassDelay" type="int" />
187 <global name="mergeAckDelay" type="int" />
188 <global name="mergeArbiterActionPassDelay" type="int" />
189 <global name="mergeIntouActionPassDelay" type="int" />
190 <global name="mergeInpuAckDelay" type="int" />
191 <global name="mergeOutputAckDelay" type="int" />
194 Inputs: In0, in2, ..., InK
196 Behavior: Demand merge - all inputs are steered to one output
201 <type>DataPayloadMerge</type>
202 <class> com.sunlabs.archsim.fleet.HornAndFunnel.SourceSync </class>
204 <tag value="FABRIC"/>
206 <input name="SrcIn" />
207 <output name="Out" />
211 Inserts Data arrraiving at SrcIn into Payload arriving at In. After both
212 inputs had arrived, it produces a Payload with inserted Data on Out.
219 <class> com.sunlabs.archsim.fleet.components.trunk.Trunk </class>
221 <tag value="FABRIC"/>
223 <input name="FabricIn" />
224 <input name="BypassIn" />
226 <output name="Out" />
228 <parameter name="trunkArbiterDelay" type="int"/>
229 <parameter name="trunkCopyDelay" type="int"/>
230 <parameter name="trunkAckDelay" type="int"/>
232 <global name="trunkArbiterDelay" type="int" />
233 <global name="trunkCopyDelay" type="int" />
234 <global name="trunkAckDelay" type="int" />
238 Essentially a demand merge - merges inputs on BypassIn (literals) and on
239 FabricIn ("regular" instructions) in one output Out. The two sources of inputs are
245 <type>FifoElement</type>
246 <class> com.sunlabs.archsim.fleet.ships.fifo.FifoElement </class>
248 <tag value="FABRIC"/>
250 <output name="Out" />
251 <parameter name="forwardDelay" type="int"/>
252 <parameter name="backwardDelay" type="int"/>
253 <global name="fifoForwardDelay" type="int" />
254 <global name="fifoBackwardDelay" type="int" />
260 A fifo element. Elements strung together form a Fifo
261 Can only be used in a switch fabric not as a ship.
268 <class> com.sunlabs.archsim.fleet.ships.fifo.Fifo </class>
270 <tag value="FABRIC"/>
272 <output name="Out" />
273 <parameter name="fifoCapacity" type="int"/>
274 <parameter name="forwardDelay" type="int"/>
275 <parameter name="backwardDelay" type="int"/>
276 <global name="fifoForwardDelay" type="int" /> <!-- applies to one element -->
277 <global name="fifoBackwardDelay" type="int" /> <!-- applies to one element -->
282 Can only be used in a switch fabric not as a ship.
288 THE FOLLOWING IS IS A LIST OF SHIPS.
293 <type>FetchAndIssue</type>
294 <class> com.sunlabs.archsim.fleet.ships.fetchAndIssue.FetchAndIssue </class>
296 <tag value="SHIP"/> <input name="In" />
297 <output name="InstructionOut" />
298 <output name="LiteralOut" />
299 <global name="instructionIssueDelay" type="int" />
300 <global name="literalIssueDelay" type="int" />
301 <global name="fetchDelay" type="int" />
305 Takes a ship name in, fetches the code, issues literals and instructions
306 on corresponding output.
311 <type>Accumulator</type>
312 <class> com.sunlabs.archsim.fleet.ships.accumulator.Accumulator </class>
316 <output name="Out" />
317 <global name="accumulatorOutDelay" type="int" />
318 <global name="accumulatorAckDelay" type="int" />
322 Take numbers on In, accumulate values.
323 When OOB data is received, the sum is produced on Out,
324 and the accumulator is reset.
329 <type>TokenAccumulator</type>
330 <class> com.sunlabs.archsim.fleet.ships.tokenaccumulator.TokenAccumulator </class>
333 <input name="DataIn" />
334 <input name="TokenOut" />
335 <output name="DataOut" />
336 <output name="TokenIn" />
340 Take numbers on In, accumulate values.
341 When OOB data is received, the sum is produced on Out,
342 and the accumulator is reset.
343 TokenIn (output) and DataIn (input) form a request acknowledge
344 interface for receiving data.
345 Token Out (input)and DataOut (output) form a request-acknowledge
346 interface for the sum.
352 <class> com.sunlabs.archsim.fleet.ships.adder.Adder </class>
357 <output name="Out" />
358 <global name="adderDelay" type="int" />
359 <global name="adderAckDelay" type="int" />
363 Receive two numbers on In1 and In2, then produce the sum on Out.
368 <type>TokenAdder</type>
369 <class> com.sunlabs.archsim.fleet.ships.tokenadder.TokenAdder </class>
374 <input name="TokenOut"/>
375 <output name="Out" />
376 <output name="TokenIn1" />
377 <output name="TokenIn1" />
378 <global name="tokenAdderDelay" type="int" />
379 <global name="tokenAdderAckDelay" type="int" />
383 Receive two numbers on In1 and In2, then produce the sum on Out.
384 Request-acknowledge pairs forming the token interface
385 are: < In1, TokenIn1 >, < In2, TokenIn2 >, < TokenOut, Out >
390 <type>AdderOOB</type>
391 <class> com.sunlabs.archsim.fleet.ships.adder_oob.Adder_oob </class>
396 <output name="Out" />
397 <global name="adderOOBDelay" type="int" />
398 <global name="adderOOBAckDelay" type="int" />
402 Receive two numbers on In1 and In2, then produce the sum on Out.
403 The difference between Adder and Adder_oob is that when A
404 dder_oob receives a OOB data on both inputs, it will produce
405 an null Data, which will be propagated to other ships on the
406 computation path and disassemble any standing MOVEs on it's
407 way. This is used in the Fibonacci Fleet for terminating the
413 <type>BitBucket</type>
414 <class> com.sunlabs.archsim.fleet.ships.bitbucket.BitBucket </class>
418 <parameter name="bitBucketdelay" type="int" />
419 <parameter name="bitBucketKeepData" type="int" />
420 <global name="bitBucketdelay" type="int" />
421 <global name="bitBucketKeepData" type="int" />
425 Takes any input and "throws it away".
426 Will keep all data if asked to - useful for testing.
431 <type>Constant</type>
432 <class> com.sunlabs.archsim.fleet.ships.constant.Constant </class>
435 <output name="Out" />
436 <parameter name="constantValue" type="any" />
437 <parameter name="constantDelay" type="int" />
438 <global name="constantValue" type="any" />
439 <global name="constantDelay" type="int" />
443 Always produces the same constrant (integer, boolean, or string)
448 <type>Duplicator</type>
449 <class> com.sunlabs.archsim.fleet.ships.duplicator.Duplicator </class>
453 <output name="Out1" />
454 <output name="Out2" />
455 <global name="duplicatorDelay" type="int" />
456 <global name="duplicatorAckDelay" type="int" />
460 Duplicates data. For each input it receives,
461 it produces a copy of it on both outputs.
467 <type>FifoShipElement</type>
468 <class> com.sunlabs.archsim.fleet.ships.fifo.FifoShipElement </class>
472 <output name="Out" />
473 <parameter name="forwardDelay" type="int" />
474 <parameter name="fifoBackwardDelay" type="int" />
475 <global name="fifoShipForwardDelay" type="int" />
476 <global name="fifoShipBackwardDelay" type="int" />
480 A fifo element. Elements strung together form a Fifo
481 Can only be used as a ship, or a part of a ship,
482 not as a fifo in a switch fabric.
488 <type>FifoShip</type>
489 <class> com.sunlabs.archsim.fleet.ships.fifo.FifoShip </class>
493 <output name="Out" />
494 <parameter name="fifoCapacity" type="int" />
495 <parameter name="forwardDelay" type="int" /> <!-- applies to one element -->
496 <parameter name="fifoBackwardDelay" type="int" /> <!-- applies to one element -->
497 <global name="fifoShipForwardDelay" type="int" />
498 <global name="fifoShipBackwardDelay" type="int" />
502 A fifo. Can only be used as a ship, not as a fifo in a switch fabric.
507 <type>TokenFifoShipElement</type>
508 <class> com.sunlabs.archsim.fleet.ships.tokenFifo.TokenFifoShipElement </class>
512 <input name="TokenIn" />
513 <output name="Out" />
514 <output name="TokenOut" />
515 <parameter name="forwardDelay" type="int" />
516 <parameter name="backwardDelay" type="int" />
517 <parameter name="tokenDelay" type="int" />
518 <parameter name="ackTokenDelay" type="int" />
519 <global name="fifoShipForwardDelay" type="int" />
520 <global name="fifoShipBackwardDelay" type="int" />
524 A token fifo ship element. Elements strung together form a TokenFifo
525 Can only be used as a ship, not as a fifo in a switch fabric.
526 <In, TokenOut>, <TokenIn, Out>
531 <type>TokenFifoShip</type>
532 <class> com.sunlabs.archsim.fleet.ships.tokenFifo.TokenFifoShip </class>
536 <input name="TokenIn" />
537 <output name="Out" />
538 <output name="TokenOut" />
539 <parameter name="fifoCapacity" type="int" />
540 <parameter name="forwardDelay" type="int" />
541 <parameter name="backwardDelay" type="int" />
542 <parameter name="tokenDelay" type="int" />
543 <parameter name="ackTokenDelay" type="int" />
544 <global name="fifoShipForwardDelay" type="int" />
545 <global name="fifoShipBackwardDelay" type="int" />
549 FifoShip with token interface.
550 Request acknowledge pairs are: <In, TokenOut>, <TokenIn, Out>
555 <type>SimpleMemory</type>
556 <class> com.sunlabs.archsim.fleet.ships.memory.SimpleMemory </class>
559 <input name="ReadAddress" />
560 <input name="WriteAddress" />
561 <input name="WriteData" />
562 <output name="ReadData" />
563 <output name="WriteNext" />
564 <parameter name="readDelay" type="int" />
565 <parameter name="writeDelay" type="int" />
566 <parameter name="ackDelay" type="int" />
567 <parameter name="ackReadDelay" type="int" />
568 <parameter name="ackWriteDelay" type="int" />
569 <global name="simpleMemoryReadDelay" type="int" />
570 <global name="simpleMemoryWriteDelay" type="int" />
571 <global name="simpleMemoryAckDelay" type="int" />
575 Memory. Read and write interface operat concurrently.
576 No pipelining - one piece of data is operated on at a time (on
577 each read and write side).
582 <type>Selector</type>
583 <class> com.sunlabs.archsim.fleet.ships.selector.Selector </class>
588 <input name="InSelect" />
589 <output name="Out" />
590 <global name="selectorDelay" type="int" />
591 <global name="selectorAckDelay" type="int" />
595 Selector selects between data on In1 and In2, depending on
596 the value it receives on InSelect: 1 selects In1, 2 selects In2.
597 The selcted value is produced on Out.
598 Upon receiving a LAST on its Select input, it will wait for
599 a LAST to arrive on In1 and In2, consuming and ignoring all
606 <class> com.sunlabs.archsim.fleet.ships.stride.Stride </class>
609 <input name="StartValue" />
610 <input name="Step" />
611 <input name="StepCount" />
612 <input name="Next" />
613 <output name="Counter" />
614 <output name="Done" />
615 <parameter name="ackDelay" type="int" />
616 <parameter name="counterDelay" type="int" />
617 <global name="strideCounterDelay" type="int" />
618 <global name="strideAckDelay" type="int" />
622 This is a counter. Setup by providing start value, step size,
623 and step count. Ask for the next value by providing an
624 input on Next. The response is a value on Counter.
625 When the counting is complete, an otput is produced on
626 Done - this is a token that indicates that the stride
627 is ready for the next setup.
633 THESE ARE THE COMPONENTS MADE FOR SPECIALLY FOR COURSE ASSIGNMENTS.
634 WHICH SHOULD MAKE IT INTO OUR GENERAL REPERTOAIRE?
639 <type>TwoMerge</type>
640 <class> com.sunlabs.archsim.assignJan25.TwoMerge </class>
645 <class> com.sunlabs.archsim.assignJan25.Toggle </class>
649 <type>RandomBranch</type>
650 <class> com.sunlabs.archsim.assignJan25.RandomBranch </class>
654 <type>MaskBranch</type>
655 <class> com.sunlabs.archsim.assignJan25.MaskBranch </class>
659 <type>PayloadSource</type>
660 <class> com.sunlabs.archsim.assignJan18.Source </class>
664 <type>PayloadSink</type>
665 <class> com.sunlabs.archsim.assignJan18.Sink </class>
670 THESE COMPONENTS ARE INTENDED FOR USE IN AUTOMATED TESTING.
671 THEY HAVE ADDITIONAL APIs THAT ACCOMODATE TEST REQUIREMENTS.
672 THEY MAY OR MAY NOT CONFORM TO THE CONVENTION THAT A SHIP
673 PRODUCES A Data OBJECT AND RECEIVES A Payload OBJECT,
674 WHILE SWITCH FABRIC COMPONENTS RECEIVE AND PRODUCE
681 <type>TestDataSink</type>
682 <class> com.sunlabs.archsim.fleet.ships.testing.DataSink </class>
684 Used in automated testing. See code.
689 <type>TestDataSource</type>
690 <class> com.sunlabs.archsim.fleet.ships.testing.DataSource </class>
692 Used in automated testing. See code.
697 <type>TestIntegerSequenceSource</type>
698 <class> com.sunlabs.archsim.fleet.ships.testing.IntegerSequenceSource </class>
700 Used in automated testing. See code.
705 <type>TestPayloadSink</type>
706 <class> com.sunlabs.archsim.fleet.ships.testing.PayloadSink </class>
708 Used in automated testing. See code.
713 <type>TestPayloadSource</type>
714 <class> com.sunlabs.archsim.fleet.ships.testing.PayloadSource </class>
716 Used in automated testing. See code.
721 <type>TestTokenSource</type>
722 <class> com.sunlabs.archsim.fleet.ships.testing.TokenSource </class>
724 Used in automated testing. See code.
729 <type>InstructionHorn4</type>
730 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn4 </class>
732 Used in automated testing. See code.
738 THESE COMPONENTS MAY DISAPPEAR OR MAY NEED FIXING.
739 THEY WERE USED IN VERY EARLY TESTS.
740 WE LIST THEM HERE FOR OLD TESTS TO STILL RUN.
745 <type>InstructionHorn8</type>
746 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn8 </class>
750 <type>InstructionHorn16</type>
751 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.InstructionHorn16 </class>
755 <type>SourceFunnel4</type>
756 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel4 </class>
760 <type>SourceFunnel8</type>
761 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel8 </class>
765 <type>SourceFunnel16</type>
766 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.SourceFunnel16 </class>
770 <type>DestinationHorn4</type>
771 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn4 </class>
775 <type>DestinationHorn8</type>
776 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn8 </class>
780 <type>DestinationHorn16</type>
781 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.DestinationHorn16 </class>
785 <type>InstructionGenerator</type>
786 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestInstrGen </class>
790 <type>InstrGen4</type>
791 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestInstrGen4 </class>
795 <type>TestShip</type>
796 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestShip </class>
800 <type>TestShipRnd</type>
801 <class> com.sunlabs.archsim.fleet.components.hornAndFunnelFabric.TestShipRnd </class>