hwtLib.logic package¶
Submodules¶
hwtLib.logic.bcdToBin module¶
- class hwtLib.logic.bcdToBin.BcdToBin(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Convert a BCD number to binary encoding This uses the double-dabble algorithm in reverse. The conversion of a BCD number to an n-bit binary number will take n+3 cycles to complete.
based on: https://github.com/kevinpt/vhdl-extras/blob/master/rtl/extras/bcd_conversion.vhdl
- HDL params
BCD_DIGITS - default value 3 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
din - of type hwt.interfaces.std.Handshaked - SLAVE
dout - of type hwt.interfaces.std.Handshaked - MASTER
hwtLib.logic.binToBcd module¶
- class hwtLib.logic.binToBcd.BinToBcd(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Convert binary to BCD (Binary coded decimal) format (BCD is a format where each 4 bites represents a single decimal digit 0-9)
based on https://github.com/kb000/bin2bcd/blob/master/rtl/bin2bcd32.v
- HDL params
INPUT_WIDTH - default value 64 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
din - of type hwt.interfaces.std.Handshaked - SLAVE
dout - of type hwt.interfaces.std.Handshaked - MASTER
hwtLib.logic.binToOneHot module¶
- class hwtLib.logic.binToOneHot.BinToOneHot(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Little endian encoded number to number in one-hot encoding
- HDL params
DATA_WIDTH - default value 8 of type int
- HDL IO
din - of type hwt.interfaces.std.Signal with dtype=<Bits, 3bits> - SLAVE
en - of type hwt.interfaces.std.Signal with dtype=<Bits, 1bit> - SLAVE
dout - of type hwt.interfaces.std.Signal with dtype=<Bits, 8bits> - MASTER
- class hwtLib.logic.binToOneHot.BinToOneHotTC(methodName='runTest')[source]¶
Bases:
SimTestCase
hwtLib.logic.bitonicSorter module¶
- class hwtLib.logic.bitonicSorter.BitonicSorter(cmpFn=<function BitonicSorter.<lambda>>)[source]¶
Bases:
Unit
Bitonic sorter of arbitrary data
- HDL params
ITEMS - default value 2 of type int
DATA_WIDTH - default value 64 of type int
SIGNED - default value False of type bool
- HDL IO
inputs_0 - of type hwt.interfaces.std.Signal with dtype=<Bits, 64bits, unsigned> - SLAVE
inputs_1 - of type hwt.interfaces.std.Signal with dtype=<Bits, 64bits, unsigned> - SLAVE
outputs_0 - of type hwt.interfaces.std.Signal with dtype=<Bits, 64bits, unsigned> - MASTER
outputs_1 - of type hwt.interfaces.std.Signal with dtype=<Bits, 64bits, unsigned> - MASTER
hwtLib.logic.cntrGray module¶
- class hwtLib.logic.cntrGray.GrayCntr(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Counter for gray code
- HDL params
DATA_WIDTH - default value 4 of type int
INIT_VAL - default value 0 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
en - of type hwt.interfaces.std.Signal with dtype=<Bits, 1bit> - SLAVE
dataOut - of type hwt.interfaces.std.Signal with dtype=<Bits, 4bits> - MASTER
- class hwtLib.logic.cntrGray.GrayCntrTC(methodName='runTest')[source]¶
Bases:
SimTestCase
- hwtLib.logic.cntrGray.binToGray(sigOrVal) RtlSignalBase [source]¶
Convert value or signal from binary encoding to gray encoding
hwtLib.logic.countLeading module¶
- class hwtLib.logic.countLeading.CountLeadingOnes(hdl_name_override: Optional[str] = None)[source]¶
Bases:
_CountLeading
Count leading zeros in bit vector
- HDL params
DATA_WIDTH - default value 2 of type int
- HDL IO
data_in - of type hwt.interfaces.std.Signal with dtype=<Bits, 2bits> - SLAVE
data_out - of type hwt.interfaces.std.Signal with dtype=<Bits, 2bits> - MASTER
- class hwtLib.logic.countLeading.CountLeadingZeros(hdl_name_override: Optional[str] = None)[source]¶
Bases:
_CountLeading
Count leading zeros in bit vector
- HDL params
DATA_WIDTH - default value 2 of type int
- HDL IO
data_in - of type hwt.interfaces.std.Signal with dtype=<Bits, 2bits> - SLAVE
data_out - of type hwt.interfaces.std.Signal with dtype=<Bits, 2bits> - MASTER
- class hwtLib.logic.countLeading._CountLeading(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Count leading zeros/ones in bit vector
hwtLib.logic.crc module¶
- class hwtLib.logic.crc.Crc(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Crc generator for any crc, polynome can be string in usual format or integer (“x^3+x+1” or 0b1011)
- HDL params
DATA_WIDTH - default value 16 of type int
IN_IS_BIGENDIAN - default value False of type bool
LATENCY - default value 1 of type int
MASK_GRANULARITY - default value 8 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
dataIn - of type hwtLib.common_nonstd_interfaces.data_mask_last_hs.DataMaskLastHs - SLAVE
dataOut - of type hwt.interfaces.std.Signal with dtype=<Bits, 32bits> - MASTER
hwtLib.logic.crcComb module¶
- class hwtLib.logic.crcComb.CrcComb(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
CRC generator, polynomial can be string in usual format or integer (“x^3+x+1” or 0b1011)
- Variables
~.DATA_WIDTH – width of data in signal
~.POLY – specified CRC polynome, str, int or Bits value
~.POLY_WIDTH – width of POLY
~.REFIN – This is a boolean parameter. If it is FALSE, input bytes are processed with bit 7 being treated as the most significant bit (MSB) and bit 0 being treated as the least significant bit. If this parameter is FALSE, each byte is reflected before being processed.
~.REFOUT – Same as REFIN except for output
~.XOROUT – value to xor result with
- HDL params
DATA_WIDTH - default value 11 of type int
IN_IS_BIGENDIAN - default value False of type bool
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
dataIn - of type hwt.interfaces.std.Signal with dtype=<Bits, 11bits> - SLAVE
dataOut - of type hwt.interfaces.std.Signal with dtype=<Bits, 5bits> - MASTER
- classmethod applyCrcXorMatrix(crcMatrix: List[List[List[int]]], inBits: List[RtlSignal], stateBits: List[Union[RtlSignal, BitsVal]], refin: bool) List [source]¶
- static buildCrcXorMatrix(data_width: int, polyBits: List[bool]) List[Tuple[List[bool], List[bool]]] [source]¶
- Parameters
data_width – number of bits in input (excluding bits of signal wit current crc state)
polyBits – list of bits in specified polynome
- Note
all bits are in format LSB downto MSB
- Returns
crc_mask contains rows where each row describes which bits should be XORed to get bit of resut row is [mask_for_state_reg, mask_for_data]
hwtLib.logic.crcPoly module¶
Library of common CRC configurations
- note
POLY is the polynome of CRC and specifies which bits should be xored together.
- note
WIDTH - specifies the width of CRC state/value
- note
REFIN - If it is True the bits in each byte are reversed before processing.
- note
REFOUT If it is set to FALSE, the final value in the register is fed into the XOROUT stage directly, otherwise, if this parameter is TRUE, the final register value is reflected first.
- note
XOROUT This is an WIDTH-bit value. It is XORed to the final register value (after the REFOUT) stage before the value is returned as the official checksum.
- note
- note
- class hwtLib.logic.crcPoly.CRC3_ROHC[source]¶
Bases:
CRC_POLY
CRC-3/ROHC (Robust header compression rfc3095)
- CHECK = 6¶
- INIT = 7¶
- POLY = 3¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 0¶
- WIDTH = 3¶
- class hwtLib.logic.crcPoly.CRC_1[source]¶
Bases:
CRC_POLY
also known as parity bit
- POLY = 1¶
- WIDTH = 1¶
- class hwtLib.logic.crcPoly.CRC_10[source]¶
Bases:
CRC_POLY
Used in ATM; I.610
- POLY = 563¶
- WIDTH = 10¶
- class hwtLib.logic.crcPoly.CRC_10_CDMA2000[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 985¶
- WIDTH = 10¶
- class hwtLib.logic.crcPoly.CRC_10_GSM[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 373¶
- WIDTH = 10¶
- class hwtLib.logic.crcPoly.CRC_12[source]¶
Bases:
CRC_POLY
Used in telecom systems
- POLY = 2063¶
- WIDTH = 12¶
- class hwtLib.logic.crcPoly.CRC_12_CDMA2000[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 3859¶
- WIDTH = 12¶
- class hwtLib.logic.crcPoly.CRC_12_GSM[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 3377¶
- WIDTH = 12¶
- class hwtLib.logic.crcPoly.CRC_13_BBC[source]¶
Bases:
CRC_POLY
Used in Time signal, Radio teleswitch
- POLY = 7413¶
- WIDTH = 13¶
- class hwtLib.logic.crcPoly.CRC_14_DARC[source]¶
Bases:
CRC_POLY
Used in Data Radio Channel[19]
- POLY = 2053¶
- WIDTH = 14¶
- class hwtLib.logic.crcPoly.CRC_14_GSM[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 8237¶
- WIDTH = 14¶
- class hwtLib.logic.crcPoly.CRC_16_ARINC[source]¶
Bases:
CRC_POLY
Used in ACARS applications
- POLY = 41003¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_CCITT[source]¶
Bases:
CRC_POLY
Used in X.25, V.41, HDLC FCS, XMODEM, Bluetooth, PACTOR, SD, DigRF, many others; Also known as CRC_CCITT
- INIT = 65535¶
- POLY = 4129¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_CDMA2000[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 51303¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_Chakravarty[source]¶
Bases:
CRC_POLY
Used in Optimal for payloads ≤64 bits
- POLY = 12053¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_DECT[source]¶
Bases:
CRC_POLY
Used in cordless telephones
- POLY = 1417¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_DNP[source]¶
Bases:
CRC_POLY
Used in DNP, IEC 870, M-Bus
- POLY = 15717¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_IBM[source]¶
Bases:
CRC_POLY
Used in Bisync, Modbus, ANSI X3.28, SIA DC-07, many others; Also known as CRC_16 and CRC_16-ANSI
- POLY = 32773¶
- REFIN = True¶
- REFOUT = True¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_OpenSafety_A[source]¶
Bases:
CRC_POLY
Used in safety fieldbus
- POLY = 22837¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_OpenSafety_B[source]¶
Bases:
CRC_POLY
Used in safety fieldbus
- POLY = 30043¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_Profibus[source]¶
Bases:
CRC_POLY
Used in fieldbus networks
- POLY = 7631¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_T10_DIF[source]¶
Bases:
CRC_POLY
Used in SCSI DIF
- POLY = 35767¶
- WIDTH = 16¶
- class hwtLib.logic.crcPoly.CRC_16_USB[source]¶
Bases:
object
- CHECK = 46280¶
- INIT = 65535¶
- POLY = 32773¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 45057¶
- WIDTH = 16¶
- XOROUT = 65535¶
- class hwtLib.logic.crcPoly.CRC_17_CAN[source]¶
Bases:
CRC_POLY
Used in CAN FD
- POLY = 92251¶
- WIDTH = 17¶
- class hwtLib.logic.crcPoly.CRC_21_CAN[source]¶
Bases:
CRC_POLY
Used in CAN FD
- POLY = 1058969¶
- WIDTH = 21¶
- class hwtLib.logic.crcPoly.CRC_24[source]¶
Bases:
CRC_POLY
Used in FlexRay
- POLY = 6122955¶
- WIDTH = 24¶
- class hwtLib.logic.crcPoly.CRC_24_Radix_64[source]¶
Bases:
CRC_POLY
Used in OpenPGP, RTCM104v3
- POLY = 8801531¶
- WIDTH = 24¶
- class hwtLib.logic.crcPoly.CRC_30[source]¶
Bases:
CRC_POLY
Used in CDMA
- POLY = 540064199¶
- WIDTH = 30¶
- class hwtLib.logic.crcPoly.CRC_32[source]¶
Bases:
CRC_POLY
Used in HDLC, ANSI X3.66, ITU-T V.42, Ethernet, Serial ATA, MPEG-2, PKZIP, Gzip, Bzip2, PNG, many others
- INIT = 4294967295¶
- POLY = 79764919¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 3338984827¶
- WIDTH = 32¶
- XOROUT = 4294967295¶
- class hwtLib.logic.crcPoly.CRC_32C[source]¶
Bases:
CRC_POLY
Used in (Castagnoli), iSCSI, SCTP, G.hn payload, SSE4.2, Btrfs, ext4, Ceph
- CHECK = 3808858755¶
- INIT = 4294967295¶
- POLY = 517762881¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 3080238136¶
- WIDTH = 32¶
- XOROUT = 4294967295¶
- class hwtLib.logic.crcPoly.CRC_32K[source]¶
Bases:
CRC_POLY
Koopman {1,3,28}
- POLY = 1947962583¶
- WIDTH = 32¶
- class hwtLib.logic.crcPoly.CRC_32K_2[source]¶
Bases:
CRC_POLY
Koopman {1,1,30}
- POLY = 844641433¶
- WIDTH = 32¶
- class hwtLib.logic.crcPoly.CRC_32Q[source]¶
Bases:
CRC_POLY
Used in aviation; AIXM
- POLY = 2168537515¶
- WIDTH = 32¶
- class hwtLib.logic.crcPoly.CRC_3_GSM[source]¶
Bases:
CRC_POLY
Used in mobile networks
- INIT = 0¶
- POLY = 3¶
- WIDTH = 3¶
- XOROUT = 7¶
- class hwtLib.logic.crcPoly.CRC_40_GSM[source]¶
Bases:
CRC_POLY
Used in GSM control channel[40][41]
- POLY = 75628553¶
- WIDTH = 40¶
- class hwtLib.logic.crcPoly.CRC_4_ITU[source]¶
Bases:
CRC_POLY
G.704
- CHECK = 7¶
- POLY = 3¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 0¶
- WIDTH = 4¶
- class hwtLib.logic.crcPoly.CRC_5_EPC[source]¶
Bases:
CRC_POLY
Gen 2 RFID EPC-C1G2
- CHECK = 0¶
- POLY = 9¶
- RESIDUE = 0¶
- WIDTH = 5¶
- class hwtLib.logic.crcPoly.CRC_5_USB[source]¶
Bases:
CRC_POLY
USB token packets
- CHECK = 25¶
- INIT = 31¶
- POLY = 5¶
- REFIN = True¶
- REFOUT = True¶
- RESIDUE = 12¶
- WIDTH = 5¶
- XOROUT = 31¶
- class hwtLib.logic.crcPoly.CRC_64_ECMA[source]¶
Bases:
CRC_POLY
Used in ECMA-182, XZ Utils
- POLY = 4823603603198064275¶
- WIDTH = 64¶
- class hwtLib.logic.crcPoly.CRC_64_ISO[source]¶
Bases:
CRC_POLY
Used in HDLC, Swiss-Prot/TrEMBL; considered weak for hashing
- POLY = 27¶
- WIDTH = 64¶
- class hwtLib.logic.crcPoly.CRC_6_CDMA2000_A[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 39¶
- WIDTH = 6¶
- class hwtLib.logic.crcPoly.CRC_6_CDMA2000_B[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 7¶
- WIDTH = 6¶
- class hwtLib.logic.crcPoly.CRC_6_DARC[source]¶
Bases:
CRC_POLY
Data Radio Channel
- POLY = 25¶
- WIDTH = 6¶
- class hwtLib.logic.crcPoly.CRC_6_GSM[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 47¶
- WIDTH = 6¶
- class hwtLib.logic.crcPoly.CRC_7[source]¶
Bases:
CRC_POLY
Used in telecom systems, G.707,G.832, MMC, SD
- POLY = 9¶
- WIDTH = 7¶
- class hwtLib.logic.crcPoly.CRC_7_MVB[source]¶
Bases:
CRC_POLY
Used in Train Communication Network, IEC 60870-5
- POLY = 101¶
- WIDTH = 7¶
- class hwtLib.logic.crcPoly.CRC_8_AUTOSAR[source]¶
Bases:
CRC_POLY
Used in automotive integration, OpenSafety
- POLY = 47¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_Bluetooth[source]¶
Bases:
CRC_POLY
Used in wireless connectivity
- POLY = 167¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_CCITT[source]¶
Bases:
CRC_POLY
Used in I.432.1; ATM HEC, ISDN HEC and cell delineation
- CHECK = 244¶
- POLY = 7¶
- RESIDUE = 0¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_DARC[source]¶
Bases:
CRC_POLY
Used in Data Radio Channel
- POLY = 57¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_Dallas_Maxim[source]¶
Bases:
CRC_POLY
Used in 1-Wire bus
- POLY = 49¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_GSM_B[source]¶
Bases:
CRC_POLY
Used in mobile networks
- POLY = 73¶
- WIDTH = 8¶
- class hwtLib.logic.crcPoly.CRC_8_SAE_J1850[source]¶
Bases:
CRC_POLY
Used in AES3
- POLY = 29¶
- WIDTH = 8¶
hwtLib.logic.crcUtils module¶
hwtLib.logic.crc_test_utils module¶
- class hwtLib.logic.crc_test_utils.NaiveCrcAccumulator(params: CRC_POLY, value: Optional[int] = None)[source]¶
Bases:
object
Holds the intermediate state of the CRC algorithm.
Based on http://www.nightmare.com/~ryb/
- __init__(params: CRC_POLY, value: Optional[int] = None)[source]¶
- Parameters
value – The initial register value to use. The result previous of a previous CRC calculation, can be used here to continue calculation with more data. If this parameter is
None
or not given, the register will be initialized with algorithm’s default seed value.
hwtLib.logic.lfsr module¶
- class hwtLib.logic.lfsr.Lfsr(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Linear shift feedback register generator, form of hardware pseudorandom generator.
- HDL params
POLY_WIDTH - default value 8 of type int
POLY - default value 136 of type int
INIT - default value 1 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
dataOut - of type hwt.interfaces.std.Signal with dtype=<Bits, 1bit> - MASTER
hwtLib.logic.oneHotToBin module¶
- class hwtLib.logic.oneHotToBin.OneHotToBin(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
Converts one hot signal to binary, bin.vld is high when oneHot != 0
- HDL params
ONE_HOT_WIDTH - default value 8 of type int
- HDL IO
oneHot - of type hwt.interfaces.std.Signal with dtype=<Bits, 8bits> - SLAVE
bin - of type hwt.interfaces.std.VldSynced - MASTER
hwtLib.logic.pid module¶
- class hwtLib.logic.pid.PidController(hdl_name_override: Optional[str] = None)[source]¶
Bases:
Unit
The PID Control block compares the input to the target and calculates an error. Based on this error, a output value is calculated that should result in a smaller error on the next iteration of the loop, assuming your parameters are tuned properly.
u(k) = u(k-1) + a0*e(k) + a1*y(k) + a2*y(k-1) + a3*y(k-2)
e(k): error in this step (= target value - input) y(k): input in step k ax: PID coeficient
The PID parameter inputs for this equation are slightly different from the traditional K_p, K_i, and K_d.
a0 = K_i * T_s a1 = -K_p - K_d / T_s a2 = K_p + 2K_d/T_s a3 = - K_d / T_s
- HDL params
DATAIN_WIDTH - default value 16 of type int
DATAOUT_WIDTH - default value 16 of type int
COEF_WIDTH - default value 16 of type int
- HDL IO
clk - of type hwt.interfaces.std.Clk with dtype=<Bits, 1bit> - SLAVE
rst_n - of type hwt.interfaces.std.Rst_n with dtype=<Bits, 1bit> - SLAVE
input - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE
output - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - MASTER
target - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE
coefs_0 - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE
coefs_1 - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE
coefs_2 - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE
coefs_3 - of type hwt.interfaces.std.Signal with dtype=<Bits, 16bits, signed> - SLAVE