Skip to content

Commit 884063d

Browse files
committed
Merge branch 'rc-1.5.4'
2 parents 2005e16 + a79f49e commit 884063d

File tree

5 files changed

+115
-9
lines changed

5 files changed

+115
-9
lines changed

examples/thread_memcpy_ipcore/test_thread_memcpy_ipcore.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@
88
99
reg uut_CLK;
1010
reg uut_RST;
11-
wire [8-1:0] uut_led;
1211
wire [32-1:0] uut_maxi_awaddr;
1312
wire [8-1:0] uut_maxi_awlen;
1413
wire uut_maxi_awvalid;
@@ -40,12 +39,11 @@
4039
wire uut_saxi_rvalid;
4140
reg uut_saxi_rready;
4241
43-
blinkled
42+
memcpy
4443
uut
4544
(
4645
.CLK(uut_CLK),
4746
.RST(uut_RST),
48-
.led(uut_led),
4947
.maxi_awaddr(uut_maxi_awaddr),
5048
.maxi_awlen(uut_maxi_awlen),
5149
.maxi_awvalid(uut_maxi_awvalid),
@@ -978,11 +976,10 @@
978976
979977
980978
981-
module blinkled
979+
module memcpy
982980
(
983981
input CLK,
984982
input RST,
985-
output reg [8-1:0] led,
986983
output reg [32-1:0] maxi_awaddr,
987984
output reg [8-1:0] maxi_awlen,
988985
output reg maxi_awvalid,

examples/thread_memcpy_ipcore/thread_memcpy_ipcore.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,10 +14,9 @@
1414

1515

1616
def mkMemcpy():
17-
m = Module('blinkled')
17+
m = Module('memcpy')
1818
clk = m.Input('CLK')
1919
rst = m.Input('RST')
20-
led = m.OutputReg('led', 8, initval=0)
2120

2221
datawidth = 32
2322
addrwidth = 10

veriloggen/core/vtypes.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -283,6 +283,9 @@ def __pos__(self):
283283
def __invert__(self):
284284
raise TypeError('Not allowed operation.')
285285

286+
def __abs__(self):
287+
raise TypeError('Not allowed operation.')
288+
286289
def __getitem__(self, r):
287290
raise TypeError('Not allowed operation.')
288291

@@ -361,6 +364,9 @@ def __pos__(self):
361364
def __invert__(self):
362365
return Unot(self)
363366

367+
def __abs__(self):
368+
return Abs(self)
369+
364370
def __getitem__(self, r):
365371
if isinstance(r, slice):
366372
size = self._len()
@@ -1745,6 +1751,24 @@ def Mux(condition, true_value, false_value):
17451751
return Cond(condition, true_value, false_value)
17461752

17471753

1754+
def Complement2(var):
1755+
if isinstance(var, (int, bool, float)):
1756+
return abs(var)
1757+
1758+
return Unot(var) + Int(1)
1759+
1760+
1761+
def Abs(var):
1762+
return Mux(Sign(var), Complement2(var), var)
1763+
1764+
1765+
def Sign(var):
1766+
if isinstance(var, (int, bool, float)):
1767+
return var < 0
1768+
1769+
return var < Int(0, signed=True)
1770+
1771+
17481772
class Sensitive(VeriloggenNode):
17491773

17501774
def __init__(self, name):

veriloggen/stream/stypes.py

Lines changed: 87 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -346,6 +346,9 @@ def __neg__(self):
346346
def __pos__(self):
347347
return Uplus(self)
348348

349+
def __abs__(self):
350+
return Abs(self)
351+
349352
def __getitem__(self, r):
350353
if isinstance(r, slice):
351354
size = self.bit_length()
@@ -1134,7 +1137,12 @@ def eval(self):
11341137
class Unot(_UnaryLogicalOperator):
11351138

11361139
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
11381146

11391147

11401148
class Uand(_UnaryLogicalOperator):
@@ -1322,6 +1330,9 @@ def _implement(self, m, seq, svalid=None, senable=None):
13221330

13231331
m.Assign(data(rdata))
13241332

1333+
def eval(self):
1334+
return self
1335+
13251336

13261337
class _SpecialOperator(_Operator):
13271338
latency = 1
@@ -1668,6 +1679,81 @@ def _implement(self, m, seq, svalid=None, senable=None):
16681679
m.Instance(inst, self.name('lut'), ports=ports)
16691680

16701681

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+
16711757
class _Delay(_UnaryOperator):
16721758

16731759
def __init__(self, right):

veriloggen/utils/VERSION

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
1.5.3
1+
1.5.4

0 commit comments

Comments
 (0)