nmutil.test package

Submodules

nmutil.test.example_buf_pipe module

Pipeline and BufferedHandshake examples

class nmutil.test.example_buf_pipe.ExampleAddStage

Bases: nmutil.stageapi.StageCls

an example of how to use the buffered pipeline, as a class instance

ispec()

returns a tuple of input signals which will be the incoming data

ospec()

returns an output signal which will happen to contain the sum of the two inputs

process(i)

process the input data (sums the values in the tuple) and returns it

class nmutil.test.example_buf_pipe.ExampleBufPipe

Bases: nmutil.singlepipe.BufferedHandshake

an example of how to use the buffered pipeline.

class nmutil.test.example_buf_pipe.ExampleBufPipeAdd

Bases: nmutil.singlepipe.BufferedHandshake

an example of how to use the buffered pipeline, using a class instance

class nmutil.test.example_buf_pipe.ExamplePipeline

Bases: nmutil.singlepipe.UnbufferedPipeline

an example of how to use the unbuffered pipeline.

class nmutil.test.example_buf_pipe.ExampleStage

Bases: nmutil.stageapi.Stage

an example of how to use the buffered pipeline, in a static class fashion

ispec()
ospec()
process()

process the input data and returns it (adds 1)

class nmutil.test.example_buf_pipe.ExampleStageCls

Bases: nmutil.stageapi.StageCls

an example of how to use the buffered pipeline, in a static class fashion

ispec()
ospec()
process(i)

process the input data and returns it (adds 1)

nmutil.test.example_gtkwave module

Generation of GTKWave documents with nmutil.gtkw

class nmutil.test.example_gtkwave.Shifter(width)

Bases: nmigen.hdl.ir.Elaboratable

Simple sequential shifter

  • “Prev” port:

    • p_data_i: value to be shifted
    • p_shift_i: shift amount
    • op__sdir: shift direction (0 = left, 1 = right)
    • p_valid_i and p_ready_o: handshake
  • “Next” port:

    • n_data_o: shifted value
    • n_valid_o and n_ready_i: handshake
elaborate(_)
ports()
width = None

data width

nmutil.test.example_gtkwave.test_shifter()

Simulate the Shifter to generate some traces, as well as the GTKWave documents

nmutil.test.example_gtkwave.write_gtkw_direct()

Write a formatted GTKWave “save” file, using vcd.gtkw directly

nmutil.test.test_buf_pipe module

Unit tests for Buffered and Unbuffered pipelines

contains useful worked examples of how to use the Pipeline API, including:

  • Combinatorial Stage “Chaining”
  • class-based data stages
  • nmigen module-based data stages
  • special nmigen module-based data stage, where the stage is the module
  • Record-based data stages
  • static-class data stages
  • multi-stage pipelines (and how to connect them)
  • how to use the pipelines (see Test5) - how to get data in and out
class nmutil.test.test_buf_pipe.Example2OpClass

Bases: object

an example of a class used to store 2 operands. requires an eq function, to conform with the pipeline stage API

eq(i)
class nmutil.test.test_buf_pipe.Example2OpRecord

Bases: nmutil.iocontrol.RecordObject

class nmutil.test.test_buf_pipe.ExampleAddClassStage

Bases: nmutil.stageapi.StageCls

an example of how to use the buffered pipeline, as a class instance

ispec()

returns an instance of an Example2OpClass.

ospec()

returns an output signal which will happen to contain the sum of the two inputs

process(i)

process the input data (sums the values in the tuple) and returns it

class nmutil.test.test_buf_pipe.ExampleAddRecordObjectStage

Bases: nmutil.stageapi.StageCls

ispec()

returns an instance of an Example2OpRecord.

ospec()

returns an output signal which will happen to contain the sum of the two inputs

process(i)

process the input data (sums the values in the tuple) and returns it

class nmutil.test.test_buf_pipe.ExampleAddRecordPipe

Bases: nmutil.singlepipe.UnbufferedPipeline

an example of how to use the combinatorial pipeline.

class nmutil.test.test_buf_pipe.ExampleAddRecordPlaceHolderPipe

Bases: nmutil.singlepipe.UnbufferedPipeline

an example of how to use the combinatorial pipeline.

class nmutil.test.test_buf_pipe.ExampleAddRecordPlaceHolderStage

Bases: nmutil.stageapi.StageCls

example use of a Record, with a placeholder as the processing result

ispec()

returns a Record using the specification

ospec()
process(i)

process the input data, returning a PlaceHolder class instance with attributes that exactly match those of the Record.

record_spec = [('src1', 16), ('src2', 16)]
class nmutil.test.test_buf_pipe.ExampleAddRecordStage

Bases: nmutil.stageapi.StageCls

example use of a Record

ispec()

returns a Record using the specification

ospec()
process(i)

process the input data, returning a dictionary with key names that exactly match the Record’s attributes.

record_spec = [('src1', 16), ('src2', 16)]
class nmutil.test.test_buf_pipe.ExampleBufAdd1Pipe

Bases: nmutil.singlepipe.BufferedHandshake

class nmutil.test.test_buf_pipe.ExampleBufDelayedPipe

Bases: nmutil.singlepipe.BufferedHandshake

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufModeAdd1Pipe

Bases: nmutil.singlepipe.SimpleHandshake

class nmutil.test.test_buf_pipe.ExampleBufModeUnBufPipe(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufPassThruPipe(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufPassThruPipe2(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufPipe2(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

Example of how to do chained pipeline stages.

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufPipe3(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

Example of how to do delayed pipeline, where the stage signals whether it is ready.

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleBufPipeAddClass

Bases: nmutil.singlepipe.BufferedHandshake

an example of how to use the buffered pipeline, using a class instance

class nmutil.test.test_buf_pipe.ExampleBufPipeChain2

Bases: nmutil.singlepipe.BufferedHandshake

connects two stages together as a single combinatorial stage.

class nmutil.test.test_buf_pipe.ExampleBufUnBufPipe(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleFIFOAdd2Pipe(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleFIFOPassThruPipe1(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleFIFORecordObjectPipe(stage=None, in_multi=None, stage_ctl=False, maskwid=0)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.ExampleLTBufferedPipeDerived

Bases: nmutil.singlepipe.BufferedHandshake

an example of how to use the buffered pipeline.

class nmutil.test.test_buf_pipe.ExampleLTPipeline

Bases: nmutil.singlepipe.UnbufferedPipeline

an example of how to use the unbuffered pipeline.

class nmutil.test.test_buf_pipe.ExampleMaskCancellable

Bases: nmutil.stageapi.StageCls

ispec()

returns an instance of an ExampleMaskRecord.

ospec()

returns the same

process(i)

process the input data: increase op1 and op2

class nmutil.test.test_buf_pipe.ExampleMaskRecord

Bases: nmutil.iocontrol.RecordObject

an example of a class used to store 2 operands. requires an eq function, to conform with the pipeline stage API

class nmutil.test.test_buf_pipe.ExamplePassAdd1Pipe

Bases: nmutil.singlepipe.PassThroughHandshake

class nmutil.test.test_buf_pipe.ExampleRecordHandshakeAddClass

Bases: nmutil.singlepipe.SimpleHandshake

class nmutil.test.test_buf_pipe.ExampleStageDelayCls(valid_trigger=2)

Bases: nmutil.stageapi.StageCls, nmigen.hdl.ir.Elaboratable

an example of how to use the buffered pipeline, in a static class fashion

d_ready

data is ready to be accepted when this is true

d_valid(ready_i)

data is valid at output when this is true

elaborate(platform)
ispec()
ospec()
process(i)

process the input data and returns it (adds 1)

class nmutil.test.test_buf_pipe.ExampleUnBufAdd1Pipe

Bases: nmutil.singlepipe.UnbufferedPipeline

class nmutil.test.test_buf_pipe.ExampleUnBufAdd1Pipe2

Bases: nmutil.singlepipe.UnbufferedPipeline2

class nmutil.test.test_buf_pipe.ExampleUnBufDelayedPipe

Bases: nmutil.singlepipe.BufferedHandshake

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.FIFOTest16

Bases: nmutil.singlepipe.FIFOControl

class nmutil.test.test_buf_pipe.FIFOTest2x16

Bases: nmutil.singlepipe.FIFOControl

class nmutil.test.test_buf_pipe.FIFOTestAdd16

Bases: nmutil.singlepipe.FIFOControl

class nmutil.test.test_buf_pipe.FIFOTestRecordAddStageControl

Bases: nmutil.singlepipe.FIFOControl

class nmutil.test.test_buf_pipe.FIFOTestRecordControl

Bases: nmutil.singlepipe.FIFOControl

class nmutil.test.test_buf_pipe.LTStage

Bases: nmutil.stageapi.StageCls

module-based stage example

ispec(name)
ospec(name)
process(i)
setup(m, i)
class nmutil.test.test_buf_pipe.LTStageDerived

Bases: nmutil.test.test_buf_pipe.SetLessThan, nmutil.stageapi.StageCls

special version of a nmigen module where the module is also a stage

shows that you don’t actually need to combinatorially connect to the outputs, or add the module as a submodule: just return the module output parameter(s) from the Stage.process() function

ispec()
ospec()
process(i)
setup(m, i)
class nmutil.test.test_buf_pipe.MaskCancellableDynamic(maskwid)

Bases: nmutil.singlepipe.ControlBase

elaborate(platform)

handles case where stage has dynamic ready/valid functions

class nmutil.test.test_buf_pipe.MaskCancellablePipe(dynamic=False, maskwid=16)

Bases: nmutil.singlepipe.MaskCancellable

connects two stages together as a single combinatorial stage.

class nmutil.test.test_buf_pipe.MaskCancellablePipe1(dynamic=True, maskwid=16)

Bases: nmutil.singlepipe.MaskCancellable

connects a stage to a cancellable pipe with “dynamic” mode on.

class nmutil.test.test_buf_pipe.PassThroughTest

Bases: nmutil.singlepipe.PassThroughHandshake

iospecfn()
class nmutil.test.test_buf_pipe.PlaceHolder

Bases: object

class nmutil.test.test_buf_pipe.SetLessThan(width, signed)

Bases: nmigen.hdl.ir.Elaboratable

elaborate(platform)
class nmutil.test.test_buf_pipe.Test3(dut, resultfn)

Bases: object

rcv()
send()
class nmutil.test.test_buf_pipe.Test5(dut, resultfn, data=None, stage_ctl=False)

Bases: object

rcv()
send()
class nmutil.test.test_buf_pipe.TestInputAdd(op1, op2)

Bases: object

the eq function, called by set_input, needs an incoming object that conforms to the Example2OpClass.eq function requirements easiest way to do that is to create a class that has the exact same member layout (self.op1, self.op2) as Example2OpClass

class nmutil.test.test_buf_pipe.TestInputMask(src1, src2)

Bases: object

the eq function, called by set_input, needs an incoming object that conforms to the Example2OpClass.eq function requirements easiest way to do that is to create a class that has the exact same member layout (self.op1, self.op2) as Example2OpClass

class nmutil.test.test_buf_pipe.TestMask(dut, resultfn, maskwid, data=None, stage_ctl=False, latching=False)

Bases: object

rcv()
send()
nmutil.test.test_buf_pipe.check_o_n_valid(dut, val)
nmutil.test.test_buf_pipe.check_o_n_valid2(dut, val)
nmutil.test.test_buf_pipe.data_2op()
nmutil.test.test_buf_pipe.data_chain0(n_tests)
nmutil.test.test_buf_pipe.data_chain1()
nmutil.test.test_buf_pipe.data_chain2()
nmutil.test.test_buf_pipe.data_dict()
nmutil.test.test_buf_pipe.data_placeholder()
nmutil.test.test_buf_pipe.iospecfn()
nmutil.test.test_buf_pipe.iospecfn24()
nmutil.test.test_buf_pipe.iospecfnrecord()
nmutil.test.test_buf_pipe.notworking1()
nmutil.test.test_buf_pipe.notworking2()
nmutil.test.test_buf_pipe.resultfn_0(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_11(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_12(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_3(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_5(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_6(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_7(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_8(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_9(data_o, expected, i, o)
nmutil.test.test_buf_pipe.resultfn_identical(data_o, expected, i, o)
nmutil.test.test_buf_pipe.tbench(dut)
nmutil.test.test_buf_pipe.tbench2(dut)
nmutil.test.test_buf_pipe.tbench4(dut)
nmutil.test.test_buf_pipe.test0()
nmutil.test.test_buf_pipe.test0_1()
nmutil.test.test_buf_pipe.test10()
nmutil.test.test_buf_pipe.test11()
nmutil.test.test_buf_pipe.test12()
nmutil.test.test_buf_pipe.test13()
nmutil.test.test_buf_pipe.test15()
nmutil.test.test_buf_pipe.test16()
nmutil.test.test_buf_pipe.test17()
nmutil.test.test_buf_pipe.test18()
nmutil.test.test_buf_pipe.test19()
nmutil.test.test_buf_pipe.test20()
nmutil.test.test_buf_pipe.test21()
nmutil.test.test_buf_pipe.test22()
nmutil.test.test_buf_pipe.test23()
nmutil.test.test_buf_pipe.test24()
nmutil.test.test_buf_pipe.test25()
nmutil.test.test_buf_pipe.test3()
nmutil.test.test_buf_pipe.test3_5()
nmutil.test.test_buf_pipe.test4()
nmutil.test.test_buf_pipe.test5()
nmutil.test.test_buf_pipe.test6()
nmutil.test.test_buf_pipe.test7()
nmutil.test.test_buf_pipe.test8()
nmutil.test.test_buf_pipe.test9()
nmutil.test.test_buf_pipe.test997()
nmutil.test.test_buf_pipe.test998()
nmutil.test.test_buf_pipe.test999()

nmutil.test.test_clz module

class nmutil.test.test_clz.CLZTestCase(methodName='runTest')

Bases: unittest.case.TestCase

run_test(inputs, width=8)
test_non_power_2()
test_selected()

nmutil.test.test_inout_feedback_pipe module

key strategic example showing how to do multi-input fan-in into a multi-stage pipeline, then multi-output fanout, with an unary muxid and cancellation

the multiplex ID from the fan-in is passed in to the pipeline, preserved, and used as a routing ID on the fanout.

class nmutil.test.test_inout_feedback_pipe.DecisionPipe(maskwid)

Bases: nmutil.singlepipe.MaskCancellable

class nmutil.test.test_inout_feedback_pipe.InputTest(dut, tlen)

Bases: object

rcv(muxid)
send(muxid)
class nmutil.test.test_inout_feedback_pipe.MergeRoutePipe

Bases: nmutil.multipipe.PriorityCombMuxInPipe

merges data coming from end of pipe (with operator now == 1)

class nmutil.test.test_inout_feedback_pipe.PassData

Bases: nmutil.iocontrol.Object

class nmutil.test.test_inout_feedback_pipe.PassThroughPipe(maskwid)

Bases: nmutil.singlepipe.MaskCancellable

class nmutil.test.test_inout_feedback_pipe.PassThroughStage

Bases: object

ispec()
ospec()
process(i)
class nmutil.test.test_inout_feedback_pipe.RouteBackPipe

Bases: nmutil.multipipe.CombMuxOutPipe

routes data back to start of pipeline

class nmutil.test.test_inout_feedback_pipe.SplitRouteStage

Bases: object

ispec()
ospec()
process(i)
setup(m, i)
class nmutil.test.test_inout_feedback_pipe.TestInOutPipe(num_rows=4)

Bases: nmigen.hdl.ir.Elaboratable

elaborate(platform)
ports()
class nmutil.test.test_inout_feedback_pipe.TestMuxOutPipe(num_rows)

Bases: nmutil.multipipe.CombMuxOutPipe

class nmutil.test.test_inout_feedback_pipe.TestPriorityMuxPipe(num_rows)

Bases: nmutil.multipipe.PriorityCombMuxInPipe

nmutil.test.test_inout_feedback_pipe.test1()

nmutil.test.test_inout_mux_pipe module

key strategic example showing how to do multi-input fan-in into a multi-stage pipeline, then multi-output fanout.

the multiplex ID from the fan-in is passed in to the pipeline, preserved, and used as a routing ID on the fanout.

class nmutil.test.test_inout_mux_pipe.InputTest(dut)

Bases: object

rcv(muxid)
send(muxid)
class nmutil.test.test_inout_mux_pipe.OutputTest(dut)

Bases: object

send()
class nmutil.test.test_inout_mux_pipe.PassData

Bases: nmutil.iocontrol.Object

class nmutil.test.test_inout_mux_pipe.PassData2

Bases: nmutil.iocontrol.RecordObject

class nmutil.test.test_inout_mux_pipe.PassThroughPipe

Bases: nmutil.singlepipe.SimpleHandshake

class nmutil.test.test_inout_mux_pipe.PassThroughStage

Bases: object

ispec()
ospec()
process(i)
class nmutil.test.test_inout_mux_pipe.TestInOutPipe(num_rows=4)

Bases: nmigen.hdl.ir.Elaboratable

elaborate(platform)
ports()
class nmutil.test.test_inout_mux_pipe.TestMuxOutPipe(num_rows)

Bases: nmutil.multipipe.CombMuxOutPipe

class nmutil.test.test_inout_mux_pipe.TestPriorityMuxPipe(num_rows)

Bases: nmutil.multipipe.PriorityCombMuxInPipe

nmutil.test.test_inout_mux_pipe.test1()

nmutil.test.test_inout_unary_mux_cancel_pipe module

key strategic example showing how to do multi-input fan-in into a multi-stage pipeline, then multi-output fanout, with an unary muxid and cancellation

the multiplex ID from the fan-in is passed in to the pipeline, preserved, and used as a routing ID on the fanout.

class nmutil.test.test_inout_unary_mux_cancel_pipe.InputTest(dut, tlen)

Bases: object

rcv(muxid)
send(muxid)
class nmutil.test.test_inout_unary_mux_cancel_pipe.PassData

Bases: nmutil.iocontrol.Object

class nmutil.test.test_inout_unary_mux_cancel_pipe.PassData2

Bases: nmutil.iocontrol.RecordObject

class nmutil.test.test_inout_unary_mux_cancel_pipe.PassThroughPipe(maskwid)

Bases: nmutil.singlepipe.MaskCancellable

class nmutil.test.test_inout_unary_mux_cancel_pipe.PassThroughStage

Bases: object

ispec()
ospec()
process(i)
class nmutil.test.test_inout_unary_mux_cancel_pipe.TestInOutPipe(num_rows=4)

Bases: nmigen.hdl.ir.Elaboratable

elaborate(platform)
ports()
class nmutil.test.test_inout_unary_mux_cancel_pipe.TestMuxOutPipe(num_rows)

Bases: nmutil.multipipe.CombMuxOutPipe

class nmutil.test.test_inout_unary_mux_cancel_pipe.TestPriorityMuxPipe(num_rows)

Bases: nmutil.multipipe.PriorityCombMuxInPipe

nmutil.test.test_inout_unary_mux_cancel_pipe.test1()

nmutil.test.test_outmux_pipe module

class nmutil.test.test_outmux_pipe.OutputTest(dut)

Bases: object

rcv(muxid)
send()
class nmutil.test.test_outmux_pipe.PassInData

Bases: nmutil.iocontrol.RecordObject

class nmutil.test.test_outmux_pipe.PassThroughDataStage

Bases: object

ispec()
ospec()
process(i)
class nmutil.test.test_outmux_pipe.PassThroughPipe

Bases: nmutil.singlepipe.PassThroughHandshake

class nmutil.test.test_outmux_pipe.PassThroughStage

Bases: object

ispec()
ospec(name)
process(i)
class nmutil.test.test_outmux_pipe.TestPriorityMuxPipe(num_rows)

Bases: nmutil.multipipe.CombMuxOutPipe

class nmutil.test.test_outmux_pipe.TestSyncToPriorityPipe

Bases: nmigen.hdl.ir.Elaboratable

elaborate(platform)
ports()
nmutil.test.test_outmux_pipe.test1()

nmutil.test.test_prioritymux_pipe module

class nmutil.test.test_prioritymux_pipe.InputTest(dut)

Bases: object

rcv()
send(muxid)
class nmutil.test.test_prioritymux_pipe.PassData

Bases: object

eq(i)
ports()
class nmutil.test.test_prioritymux_pipe.TestPriorityMuxPipe

Bases: nmutil.multipipe.PriorityCombMuxInPipe

nmutil.test.test_prioritymux_pipe.tbench(dut)
nmutil.test.test_prioritymux_pipe.test1()

Module contents

class nmutil.test.StepLimiter(limit=100000)

Bases: object

step()