Consistent names
This commit is contained in:
parent
47d321cd75
commit
7456195775
16
README
16
README
|
@ -213,11 +213,11 @@ Assignments
|
||||||
-----------
|
-----------
|
||||||
Assignments are represented with the _Assign object. Since using it
|
Assignments are represented with the _Assign object. Since using it
|
||||||
directly would result in a cluttered syntax, the preferred technique for
|
directly would result in a cluttered syntax, the preferred technique for
|
||||||
assignments is to use the be() method provided by objects that can have a
|
assignments is to use the eq() method provided by objects that can have a
|
||||||
value assigned to them. They are signals, and their combinations with the
|
value assigned to them. They are signals, and their combinations with the
|
||||||
slice and concatenation operators.
|
slice and concatenation operators.
|
||||||
As an example, the statement:
|
As an example, the statement:
|
||||||
a[0].be(b)
|
a[0].eq(b)
|
||||||
is equivalent to:
|
is equivalent to:
|
||||||
_Assign(_Slice(a, 0, 1), b)
|
_Assign(_Slice(a, 0, 1), b)
|
||||||
|
|
||||||
|
@ -237,15 +237,15 @@ For convenience, there is also a Elif() method.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
If(tx_count16 == 0,
|
If(tx_count16 == 0,
|
||||||
tx_bitcount.be(tx_bitcount + 1),
|
tx_bitcount.eq(tx_bitcount + 1),
|
||||||
If(tx_bitcount == 8,
|
If(tx_bitcount == 8,
|
||||||
self.tx.be(1)
|
self.tx.eq(1)
|
||||||
).Elif(tx_bitcount == 9,
|
).Elif(tx_bitcount == 9,
|
||||||
self.tx.be(1),
|
self.tx.eq(1),
|
||||||
tx_busy.be(0)
|
tx_busy.eq(0)
|
||||||
).Else(
|
).Else(
|
||||||
self.tx.be(tx_reg[0]),
|
self.tx.eq(tx_reg[0]),
|
||||||
tx_reg.be(Cat(tx_reg[1:], 0))
|
tx_reg.eq(Cat(tx_reg[1:], 0))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
from migen.fhdl.structure import *
|
from migen.fhdl.structure import *
|
||||||
from migen.fhdl.structure import _Operator
|
from migen.fhdl.structure import _Operator, _Slice, _Assign, _StatementList
|
||||||
|
|
||||||
class Namespace:
|
class Namespace:
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
|
@ -33,16 +33,16 @@ def list_signals(node):
|
||||||
elif isinstance(node, _Operator):
|
elif isinstance(node, _Operator):
|
||||||
l = list(map(list_signals, node.operands))
|
l = list(map(list_signals, node.operands))
|
||||||
return set().union(*l)
|
return set().union(*l)
|
||||||
elif isinstance(node, Slice):
|
elif isinstance(node, _Slice):
|
||||||
return list_signals(node.value)
|
return list_signals(node.value)
|
||||||
elif isinstance(node, Cat):
|
elif isinstance(node, Cat):
|
||||||
l = list(map(list_signals, node.l))
|
l = list(map(list_signals, node.l))
|
||||||
return set().union(*l)
|
return set().union(*l)
|
||||||
elif isinstance(node, Replicate):
|
elif isinstance(node, Replicate):
|
||||||
return list_signals(node.v)
|
return list_signals(node.v)
|
||||||
elif isinstance(node, Assign):
|
elif isinstance(node, _Assign):
|
||||||
return list_signals(node.l) | list_signals(node.r)
|
return list_signals(node.l) | list_signals(node.r)
|
||||||
elif isinstance(node, StatementList):
|
elif isinstance(node, _StatementList):
|
||||||
l = list(map(list_signals, node.l))
|
l = list(map(list_signals, node.l))
|
||||||
return set().union(*l)
|
return set().union(*l)
|
||||||
elif isinstance(node, If):
|
elif isinstance(node, If):
|
||||||
|
@ -58,16 +58,16 @@ def list_signals(node):
|
||||||
def list_targets(node):
|
def list_targets(node):
|
||||||
if isinstance(node, Signal):
|
if isinstance(node, Signal):
|
||||||
return {node}
|
return {node}
|
||||||
elif isinstance(node, Slice):
|
elif isinstance(node, _Slice):
|
||||||
return list_targets(node.value)
|
return list_targets(node.value)
|
||||||
elif isinstance(node, Cat):
|
elif isinstance(node, Cat):
|
||||||
l = list(map(list_targets, node.l))
|
l = list(map(list_targets, node.l))
|
||||||
return set().union(*l)
|
return set().union(*l)
|
||||||
elif isinstance(node, Replicate):
|
elif isinstance(node, Replicate):
|
||||||
return list_targets(node.v)
|
return list_targets(node.v)
|
||||||
elif isinstance(node, Assign):
|
elif isinstance(node, _Assign):
|
||||||
return list_targets(node.l)
|
return list_targets(node.l)
|
||||||
elif isinstance(node, StatementList):
|
elif isinstance(node, _StatementList):
|
||||||
l = list(map(list_targets, node.l))
|
l = list(map(list_targets, node.l))
|
||||||
return set().union(*l)
|
return set().union(*l)
|
||||||
elif isinstance(node, If):
|
elif isinstance(node, If):
|
||||||
|
@ -92,7 +92,7 @@ def list_inst_outs(i):
|
||||||
def is_variable(node):
|
def is_variable(node):
|
||||||
if isinstance(node, Signal):
|
if isinstance(node, Signal):
|
||||||
return node.variable
|
return node.variable
|
||||||
elif isinstance(node, Slice):
|
elif isinstance(node, _Slice):
|
||||||
return is_variable(node.value)
|
return is_variable(node.value)
|
||||||
elif isinstance(node, Cat):
|
elif isinstance(node, Cat):
|
||||||
arevars = list(map(is_variable, node.l))
|
arevars = list(map(is_variable, node.l))
|
||||||
|
|
|
@ -76,7 +76,7 @@ class Value:
|
||||||
|
|
||||||
def __getitem__(self, key):
|
def __getitem__(self, key):
|
||||||
if isinstance(key, int):
|
if isinstance(key, int):
|
||||||
return Slice(self, key, key+1)
|
return _Slice(self, key, key+1)
|
||||||
elif isinstance(key, slice):
|
elif isinstance(key, slice):
|
||||||
start = key.start or 0
|
start = key.start or 0
|
||||||
stop = key.stop or self.bv.width
|
stop = key.stop or self.bv.width
|
||||||
|
@ -84,19 +84,19 @@ class Value:
|
||||||
stop = self.bv.width
|
stop = self.bv.width
|
||||||
if key.step != None:
|
if key.step != None:
|
||||||
raise KeyError
|
raise KeyError
|
||||||
return Slice(self, start, stop)
|
return _Slice(self, start, stop)
|
||||||
else:
|
else:
|
||||||
raise KeyError
|
raise KeyError
|
||||||
|
|
||||||
def eq(self, r):
|
def eq(self, r):
|
||||||
return Assign(self, r)
|
return _Assign(self, r)
|
||||||
|
|
||||||
class _Operator(Value):
|
class _Operator(Value):
|
||||||
def __init__(self, op, operands):
|
def __init__(self, op, operands):
|
||||||
self.op = op
|
self.op = op
|
||||||
self.operands = list(map(_cst, operands))
|
self.operands = list(map(_cst, operands))
|
||||||
|
|
||||||
class Slice(Value):
|
class _Slice(Value):
|
||||||
def __init__(self, value, start, stop):
|
def __init__(self, value, start, stop):
|
||||||
self.value = value
|
self.value = value
|
||||||
self.start = start
|
self.start = start
|
||||||
|
@ -155,12 +155,12 @@ class Signal(Value):
|
||||||
|
|
||||||
# statements
|
# statements
|
||||||
|
|
||||||
class Assign:
|
class _Assign:
|
||||||
def __init__(self, l, r):
|
def __init__(self, l, r):
|
||||||
self.l = l
|
self.l = l
|
||||||
self.r = _cst(r)
|
self.r = _cst(r)
|
||||||
|
|
||||||
class StatementList:
|
class _StatementList:
|
||||||
def __init__(self, l=None):
|
def __init__(self, l=None):
|
||||||
if l is None: l = []
|
if l is None: l = []
|
||||||
self.l = l
|
self.l = l
|
||||||
|
@ -168,15 +168,15 @@ class StatementList:
|
||||||
class If:
|
class If:
|
||||||
def __init__(self, cond, *t):
|
def __init__(self, cond, *t):
|
||||||
self.cond = cond
|
self.cond = cond
|
||||||
self.t = StatementList(t)
|
self.t = _StatementList(t)
|
||||||
self.f = StatementList()
|
self.f = _StatementList()
|
||||||
|
|
||||||
def Else(self, *f):
|
def Else(self, *f):
|
||||||
_insert_else(self, StatementList(f))
|
_insert_else(self, _StatementList(f))
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def Elif(self, cond, *t):
|
def Elif(self, cond, *t):
|
||||||
_insert_else(self, StatementList([If(cond, *t)]))
|
_insert_else(self, _StatementList([If(cond, *t)]))
|
||||||
return self
|
return self
|
||||||
|
|
||||||
def _insert_else(obj, clause):
|
def _insert_else(obj, clause):
|
||||||
|
@ -189,7 +189,7 @@ def _insert_else(obj, clause):
|
||||||
|
|
||||||
def _sl(x):
|
def _sl(x):
|
||||||
if isinstance(x, list):
|
if isinstance(x, list):
|
||||||
return StatementList(x)
|
return _StatementList(x)
|
||||||
else:
|
else:
|
||||||
return x
|
return x
|
||||||
|
|
||||||
|
@ -199,15 +199,15 @@ class Default:
|
||||||
class Case:
|
class Case:
|
||||||
def __init__(self, test, *cases):
|
def __init__(self, test, *cases):
|
||||||
self.test = test
|
self.test = test
|
||||||
self.cases = [(c[0], StatementList(c[1:])) for c in cases if not isinstance(c[0], Default)]
|
self.cases = [(c[0], _StatementList(c[1:])) for c in cases if not isinstance(c[0], Default)]
|
||||||
self.default = None
|
self.default = None
|
||||||
for c in cases:
|
for c in cases:
|
||||||
if isinstance(c[0], Default):
|
if isinstance(c[0], Default):
|
||||||
if self.default is not None:
|
if self.default is not None:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
self.default = StatementList(c[1:])
|
self.default = _StatementList(c[1:])
|
||||||
if self.default is None:
|
if self.default is None:
|
||||||
self.default = StatementList()
|
self.default = _StatementList()
|
||||||
|
|
||||||
#
|
#
|
||||||
|
|
||||||
|
|
|
@ -1,7 +1,7 @@
|
||||||
from functools import partial
|
from functools import partial
|
||||||
|
|
||||||
from migen.fhdl.structure import *
|
from migen.fhdl.structure import *
|
||||||
from migen.fhdl.structure import _Operator
|
from migen.fhdl.structure import _Operator, _Slice, _Assign, _StatementList
|
||||||
from migen.fhdl.convtools import *
|
from migen.fhdl.convtools import *
|
||||||
|
|
||||||
def _printsig(ns, s):
|
def _printsig(ns, s):
|
||||||
|
@ -31,7 +31,7 @@ def _printexpr(ns, node):
|
||||||
else:
|
else:
|
||||||
raise TypeError
|
raise TypeError
|
||||||
return "(" + r + ")"
|
return "(" + r + ")"
|
||||||
elif isinstance(node, Slice):
|
elif isinstance(node, _Slice):
|
||||||
if node.start + 1 == node.stop:
|
if node.start + 1 == node.stop:
|
||||||
sr = "[" + str(node.start) + "]"
|
sr = "[" + str(node.start) + "]"
|
||||||
else:
|
else:
|
||||||
|
@ -47,13 +47,13 @@ def _printexpr(ns, node):
|
||||||
raise TypeError
|
raise TypeError
|
||||||
|
|
||||||
def _printnode(ns, level, node):
|
def _printnode(ns, level, node):
|
||||||
if isinstance(node, Assign):
|
if isinstance(node, _Assign):
|
||||||
if is_variable(node.l):
|
if is_variable(node.l):
|
||||||
assignment = " = "
|
assignment = " = "
|
||||||
else:
|
else:
|
||||||
assignment = " <= "
|
assignment = " <= "
|
||||||
return "\t"*level + _printexpr(ns, node.l) + assignment + _printexpr(ns, node.r) + ";\n"
|
return "\t"*level + _printexpr(ns, node.l) + assignment + _printexpr(ns, node.r) + ";\n"
|
||||||
elif isinstance(node, StatementList):
|
elif isinstance(node, _StatementList):
|
||||||
return "".join(list(map(partial(_printnode, ns, level), node.l)))
|
return "".join(list(map(partial(_printnode, ns, level), node.l)))
|
||||||
elif isinstance(node, If):
|
elif isinstance(node, If):
|
||||||
r = "\t"*level + "if (" + _printexpr(ns, node.cond) + ") begin\n"
|
r = "\t"*level + "if (" + _printexpr(ns, node.cond) + ") begin\n"
|
||||||
|
|
Loading…
Reference in New Issue