====== Splitter ====== If you need to replicate tokens from a single channel to multiple channels, you can use this splitter. While the function of this process is rather generic, this specific implementation is meant for the simulation library and should not be used for final designs. It contains logging functionality meant for testing and verification. A possible use case for this would be a testing harness, where output from an already verified design unit shall be forwarded into the design under test as well a model. For simplicity, the rest of the testing harness is omitted: defproc test () { pint D_WIDTH = 32; // the data source with single ended output some_generator source; // the design test_design dut; // model design_model mod; // splitter sim::splitter split; // we split the output of the source split.I = source.O; // the output is connected to DUT, model buffer, and scoreboard buffer dut.I = split.O[0]; mod.I = split.O[1]; // here you would put a scoreboard construction to check the output } ===== Parameters ===== * ''D_WIDTH'': The bit width of the data bus * ''OUT_CHANNELS'': The number of channels incoming tokens should be replicated to * ''SPLITTER_ID'': ID of the splitter to be used in log output * ''LOG'': Toggles whether or not the splitter should post a log line whenever a token is replicated ===== Interface ===== * ''I'': Token input channel * ''O'': Token output channel; array of size ''OUT_CHANNELS'' The available process is: export template defproc splitter (chan?(int) I; chan?(int) O[OUT_CHANNELS]);