Source code for hwtLib.examples.statements.codeBlockStm
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
from hwt.code import If, CodeBlock
from hwt.hwIOs.std import HwIOSignal
from hwt.hwIOs.utils import addClkRstn
from hwt.hwModule import HwModule
from hwt.pyUtils.typingFuture import override
[docs]
class BlockStm_complete_override0(HwModule):
@override
def hwDeclr(self):
self.a = HwIOSignal()
self.b = HwIOSignal()
self.c = HwIOSignal()._m()
@override
def hwImpl(self):
# results in c = b
CodeBlock(
self.c(self.a),
self.c(self.b),
)
[docs]
class BlockStm_complete_override1(BlockStm_complete_override0):
@override
def hwImpl(self):
# results in
# c = a
# if b:
# c = 0
CodeBlock(
self.c(self.a),
If(self.b,
self.c(0),
)
)
[docs]
class BlockStm_complete_override2(BlockStm_complete_override0):
@override
def hwImpl(self):
# results in c = a
CodeBlock(
If(self.b,
self.c(0),
),
self.c(self.a),
)
[docs]
class BlockStm_nop_val_optimized_out(BlockStm_complete_override0):
@override
def hwDeclr(self):
addClkRstn(self)
BlockStm_complete_override0.hwDeclr(self)
@override
def hwImpl(self):
r = self._reg("r")
CodeBlock(
If(self.b,
r(self.a),
),
self.c(self.a),
)
[docs]
class BlockStm_nop_val(BlockStm_nop_val_optimized_out):
@override
def hwDeclr(self):
BlockStm_nop_val_optimized_out.hwDeclr(self)
self.c1 = HwIOSignal()._m()
@override
def hwImpl(self):
r = self._reg("r")
CodeBlock(
If(self.b,
r(self.a),
),
self.c(self.a),
)
self.c1(r)
if __name__ == "__main__":
from hwt.synth import to_rtl_str
# m = BlockStm_complete_override0()
# print(to_rtl_str(m))
m = BlockStm_nop_val()
print(to_rtl_str(m))
# m = BlockStm_complete_override2()
# print(to_rtl_str(m))