Source code for hwtLib.examples.rtlLvl.arithmetic.leadingZero

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

from hwt.code import If
from hwt.hdl.types.bits import HBits
from hwt.synthesizer.rtlLevel.netlist import RtlNetlist
from hwtLib.examples.rtlLvl.netlistToRtl import netlistToVhdlStr
from ipCorePackager.constants import DIRECTION


[docs] def LeadingOne(): width = 8 t = HBits(width) resT = HBits(4) n = RtlNetlist() s_in = n.sig("s_in", t) index = n.sig("s_leadingOneCnt", resT) leadingZeroTop = index(width) for i in range(width): # iterate from MSB->LSB on first bit 0 set result # to number of 1 seen so far c = s_in[i]._eq(0) leadingZeroTop = If(c, index(width - i - 1) ).Else( leadingZeroTop ) interf = {s_in: DIRECTION.IN, index: DIRECTION.OUT} return n, interf
[docs] def LeadingOneB(): width = 8 t = HBits(width) resT = HBits(4) n = RtlNetlist() s_in = n.sig("s_in", t) index = n.sig("s_leadingOneCnt", resT) leadingZeroTop = index(width) for i in reversed(range(width)): # iterate from MSB->LSB on first bit 0 set result # to number of 1 seen so far c = s_in[width - i - 1]._eq(0) leadingZeroTop = If(c, index(i) ).Else( leadingZeroTop ) interf = {s_in: DIRECTION.IN, index: DIRECTION.OUT} return n, interf
[docs] def LeadingZero(): width = 8 t = HBits(width) resT = HBits(4) n = RtlNetlist() s_in = n.sig("s_in", t) index = n.sig("s_leadingZeroCnt", resT) leadingZeroTop = index(width) for i in range(width): # iterate from MSB->LSB on first bit 0 set result # to number of 1 seen so far c = s_in[i] leadingZeroTop = If(c, index(width - i - 1) ).Else( leadingZeroTop ) interf = {s_in: DIRECTION.IN, index: DIRECTION.OUT} return n, interf
if __name__ == "__main__": netlist, interfaces = LeadingOne() print(netlistToVhdlStr("LeadingOne", netlist, interfaces)) netlist, interfaces = LeadingOneB() print(netlistToVhdlStr("LeadingOneB", netlist, interfaces)) netlist, interfaces = LeadingZero() print(netlistToVhdlStr("LeadingZero", netlist, interfaces))