<s> import pytest <EOL> from pymtl import * <EOL> from pclib . ifcs import InValRdyBundle , OutValRdyBundle <EOL> from pclib . test import TestSrcSinkSim <EOL> from pclib . cl import InValRdyQueue , OutValRdyQueue <EOL> from pipelines import Pipeline <EOL> @ pytest . mark . parametrize ( <EOL> ( '<STR_LIT>' ) , [ <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:12> ] <EOL> ) <EOL> def test_Pipeline ( dump_vcd , stages ) : <EOL> pipeline = Pipeline ( stages ) <EOL> pipeline . vcd_file = dump_vcd <EOL> i = - <NUM_LIT:1> <EOL> for i in range ( stages - <NUM_LIT:1> ) : <EOL> pipeline . advance ( ) <EOL> pipeline . insert ( i ) <EOL> assert not pipeline . ready ( ) <EOL> pipeline . advance ( ) <EOL> pipeline . insert ( i + <NUM_LIT:1> ) <EOL> assert pipeline . ready ( ) <EOL> for i in range ( stages ) : <EOL> assert pipeline . ready ( ) <EOL> assert pipeline . remove ( ) == i <EOL> pipeline . advance ( ) <EOL> assert not pipeline . ready ( ) <EOL> class ValRdyPipelineHarness ( Model ) : <EOL> def __init__ ( s , dtype , stages , pipeq , bypassq ) : <EOL> s . in_ = InValRdyBundle ( dtype ) <EOL> s . out = OutValRdyBundle ( dtype ) <EOL> s . in_q = InValRdyQueue ( dtype , pipe = pipeq ) <EOL> s . out_q = OutValRdyQueue ( dtype , bypass = bypassq ) <EOL> s . pipe = Pipeline ( stages ) <EOL> s . connect ( s . in_ , s . in_q . in_ ) <EOL> s . connect ( s . out , s . out_q . out ) <EOL> @ s . tick <EOL> def logic ( ) : <EOL> s . in_q . xtick ( ) <EOL> s . out_q . xtick ( ) <EOL> if not s . out_q . is_full ( ) : <EOL> if not s . in_q . is_empty ( ) : <EOL> s . pipe . insert ( s . in_q . deq ( ) ) <EOL> if s . pipe . ready ( ) : <EOL> s . out_q . enq ( s . pipe . remove ( ) ) <EOL> s . pipe . advance ( ) <EOL> @ pytest . mark . parametrize ( <EOL> ( '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' , '<STR_LIT>' ) , <EOL> [ <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:0> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> ) , <EOL> ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:5> ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:0> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:0> ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> ) , <EOL> ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:5> , <NUM_LIT:0> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:0> , <NUM_LIT:3> , <NUM_LIT:5> ) , ( <NUM_LIT:5> , <NUM_LIT:1> , <NUM_LIT:1> , <NUM_LIT:3> , <NUM_LIT:5> ) , <EOL> ] <EOL> ) <EOL> def test_ValRdyPipeline ( dump_vcd , stages , pipeq , bypassq , src_delay , sink_delay ) : <EOL> msgs = range ( <NUM_LIT:20> ) <EOL> model = ValRdyPipelineHarness ( Bits ( <NUM_LIT:8> ) , stages , pipeq , bypassq ) <EOL> model . vcd_file = dump_vcd <EOL> sim = TestSrcSinkSim ( model , msgs , msgs , src_delay , sink_delay ) <EOL> sim . run_test ( ) </s>
