@@ -346,6 +346,9 @@ def __neg__(self):
346
346
def __pos__ (self ):
347
347
return Uplus (self )
348
348
349
+ def __abs__ (self ):
350
+ return Abs (self )
351
+
349
352
def __getitem__ (self , r ):
350
353
if isinstance (r , slice ):
351
354
size = self .bit_length ()
@@ -1134,7 +1137,12 @@ def eval(self):
1134
1137
class Unot (_UnaryLogicalOperator ):
1135
1138
1136
1139
def eval (self ):
1137
- return ~ self .right .eval ()
1140
+ right = self .right .eval ()
1141
+ try :
1142
+ v = ~ right
1143
+ except :
1144
+ v = Ulnot (right )
1145
+ return v
1138
1146
1139
1147
1140
1148
class Uand (_UnaryLogicalOperator ):
@@ -1322,6 +1330,9 @@ def _implement(self, m, seq, svalid=None, senable=None):
1322
1330
1323
1331
m .Assign (data (rdata ))
1324
1332
1333
+ def eval (self ):
1334
+ return self
1335
+
1325
1336
1326
1337
class _SpecialOperator (_Operator ):
1327
1338
latency = 1
@@ -1668,6 +1679,81 @@ def _implement(self, m, seq, svalid=None, senable=None):
1668
1679
m .Instance (inst , self .name ('lut' ), ports = ports )
1669
1680
1670
1681
1682
+ class Complement2 (_SpecialOperator ):
1683
+
1684
+ def __init__ (self , var ):
1685
+ _SpecialOperator .__init__ (self , var )
1686
+ self .op = vtypes .Complement2
1687
+
1688
+ def _set_attributes (self ):
1689
+ self .width = self .var .bit_length ()
1690
+ self .point = self .var .get_point ()
1691
+ self .signed = self .var .get_signed ()
1692
+
1693
+ @property
1694
+ def var (self ):
1695
+ return self .args [0 ]
1696
+
1697
+ @var .setter
1698
+ def var (self , var ):
1699
+ self .args [0 ] = var
1700
+
1701
+ def eval (self ):
1702
+ var = self .var .eval ()
1703
+ ret = Complement2 (var )
1704
+ return ret
1705
+
1706
+
1707
+ class Abs (_SpecialOperator ):
1708
+
1709
+ def __init__ (self , var ):
1710
+ _SpecialOperator .__init__ (self , var )
1711
+ self .op = vtypes .Abs
1712
+
1713
+ def _set_attributes (self ):
1714
+ self .width = self .var .bit_length ()
1715
+ self .point = self .var .get_point ()
1716
+ self .signed = self .var .get_signed ()
1717
+
1718
+ @property
1719
+ def var (self ):
1720
+ return self .args [0 ]
1721
+
1722
+ @var .setter
1723
+ def var (self , var ):
1724
+ self .args [0 ] = var
1725
+
1726
+ def eval (self ):
1727
+ var = self .var .eval ()
1728
+ ret = abs (var )
1729
+ return ret
1730
+
1731
+
1732
+ class Sign (_SpecialOperator ):
1733
+
1734
+ def __init__ (self , var ):
1735
+ _SpecialOperator .__init__ (self , var )
1736
+ self .op = vtypes .Sign
1737
+
1738
+ def _set_attributes (self ):
1739
+ self .width = self .var .bit_length ()
1740
+ self .point = self .var .get_point ()
1741
+ self .signed = self .var .get_signed ()
1742
+
1743
+ @property
1744
+ def var (self ):
1745
+ return self .args [0 ]
1746
+
1747
+ @var .setter
1748
+ def var (self , var ):
1749
+ self .args [0 ] = var
1750
+
1751
+ def eval (self ):
1752
+ var = self .var .eval ()
1753
+ ret = Sign (var )
1754
+ return ret
1755
+
1756
+
1671
1757
class _Delay (_UnaryOperator ):
1672
1758
1673
1759
def __init__ (self , right ):
0 commit comments