Source code for hwtLib.logic.binToOneHot

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

from hwt.code import log2ceil
from hwt.hdl.constants import Time
from hwt.interfaces.std import s, VectSignal
from hwt.serializer.mode import serializeParamsUniq
from hwt.simulator.simTestCase import SimTestCase
from hwt.synthesizer.unit import Unit
from hwt.synthesizer.param import Param


[docs]@serializeParamsUniq class BinToOneHot(Unit):
[docs] def _config(self): self.DATA_WIDTH = Param(8)
[docs] def _declr(self): self.din = VectSignal(log2ceil(self.DATA_WIDTH)) self.en = s() self.dout = VectSignal(self.DATA_WIDTH)
[docs] def _impl(self): en = self.en dIn = self.din WIDTH = self.DATA_WIDTH if int(WIDTH) == 1: # empty_gen self.dout[0](en) else: for i in range(int(WIDTH)): self.dout[i](dIn._eq(i) & en)
[docs]class BinToOneHotTC(SimTestCase):
[docs] def test_basic(self): u = BinToOneHot() self.prepareUnit(u) u.en._ag.data.append(1) u.din._ag.data.extend(range(8)) self.runSim(80 * Time.ns) self.assertValSequenceEqual(u.dout._ag.data, [1 << i for i in range(8)])
if __name__ == "__main__": import unittest from hwt.synthesizer.utils import toRtl print(toRtl(BinToOneHot())) suite = unittest.TestSuite() # suite.addTest(IndexingTC('test_split')) suite.addTest(unittest.makeSuite(BinToOneHotTC)) runner = unittest.TextTestRunner(verbosity=3) runner.run(suite)