1 from nmigen
import Module
, Signal
2 from nmigen
.back
.pysim
import Simulator
, Delay
, Settle
3 from nmutil
.formaltest
import FHDLTestCase
4 from ieee754
.part_mul_add
.partpoints
import PartitionPoints
6 from ieee754
.part_shift
.part_shift_scalar
import \
11 class ScalarShiftTestCase(FHDLTestCase
):
12 def get_intervals(self
, signal
, points
):
15 keys
= list(points
.keys()) + [signal
.width
]
18 interval
.append(signal
[start
:end
])
22 def test_scalar(self
):
27 step
= int(width
/mwidth
)
28 gates
= Signal(mwidth
-1)
29 points
= PartitionPoints()
30 for i
in range(mwidth
-1):
31 points
[(i
+1)*step
] = gates
[i
]
34 output
= Signal(width
)
35 a_intervals
= self
.get_intervals(a
, points
)
36 output_intervals
= self
.get_intervals(output
, points
)
38 m
.submodules
.dut
= dut
= PartitionedScalarShift(width
, points
)
39 comb
+= [dut
.data
.eq(a
),
41 output
.eq(dut
.output
)]
45 yield a
.eq(0x01010101)
47 for i
in range(1<<(mwidth
-1)):
52 for i
in range(1<<(mwidth
-1)):
64 sim
.add_process(process
)
65 with sim
.write_vcd("test.vcd", "test.gtkw", traces
=[a
,b
,output
]):
68 if __name__
== "__main__":