Consistent names

This commit is contained in:
Sebastien Bourdeauducq 2011-12-21 22:57:07 +01:00
parent 47d321cd75
commit 7456195775
4 changed files with 34 additions and 34 deletions

16
README
View File

@ -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))
) )
) )

View File

@ -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))

View File

@ -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()
# #

View File

@ -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"