Source code for hwtLib.examples.statements.codeBlockStm

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

from hwt.code import If, CodeBlock
from hwt.interfaces.std import Signal
from hwt.interfaces.utils import addClkRstn
from hwt.synthesizer.unit import Unit


[docs]class BlockStm_complete_override0(Unit): def _declr(self): self.a = Signal() self.b = Signal() self.c = Signal()._m() def _impl(self): # results in c = b CodeBlock( self.c(self.a), self.c(self.b), )
[docs]class BlockStm_complete_override1(BlockStm_complete_override0): def _impl(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): def _impl(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): def _declr(self): addClkRstn(self) BlockStm_complete_override0._declr(self) def _impl(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): def _declr(self): BlockStm_nop_val_optimized_out._declr(self) self.c1 = Signal()._m() def _impl(self): r = self._reg("r") CodeBlock( If(self.b, r(self.a), ), self.c(self.a), ) self.c1(r)
if __name__ == "__main__": from hwt.synthesizer.utils import to_rtl_str # u = BlockStm_complete_override0() # print(to_rtl_str(u)) u = BlockStm_nop_val() print(to_rtl_str(u)) # u = BlockStm_complete_override2() # print(to_rtl_str(u))