1
0
mirror of https://github.com/myhdl/myhdl.git synced 2025-01-24 21:52:56 +08:00

initial VHDL support commit

This commit is contained in:
jand 2006-06-21 19:50:12 +00:00
parent fa4c961844
commit 5a18828ea6
5 changed files with 1111 additions and 2 deletions

View File

@ -53,12 +53,16 @@ class _PosedgeWaiterList(_WaiterList):
self.sig = sig self.sig = sig
def _toVerilog(self): def _toVerilog(self):
return "posedge %s" % self.sig._name return "posedge %s" % self.sig._name
def _toVHDL(self):
return "rising_edge(%s)" % self.sig._name
class _NegedgeWaiterList(_WaiterList): class _NegedgeWaiterList(_WaiterList):
def __init__(self, sig): def __init__(self, sig):
self.sig = sig self.sig = sig
def _toVerilog(self): def _toVerilog(self):
return "negedge %s" % self.sig._name return "negedge %s" % self.sig._name
def _toVHDL(self):
return "falling_edge(%s)" % self.sig._name
def posedge(sig): def posedge(sig):

View File

@ -116,6 +116,10 @@ from _instance import instance
from _enum import enum, EnumType, EnumItemType from _enum import enum, EnumType, EnumItemType
from _traceSignals import traceSignals from _traceSignals import traceSignals
from _toVerilog._convert import toVerilog from _toVerilog._convert import toVerilog
try:
from _toVHDL._convert import toVHDL
except:
toVHDL = None
__all__ = ["bin", __all__ = ["bin",
"concat", "concat",
@ -140,6 +144,7 @@ __all__ = ["bin",
"EnumItemType", "EnumItemType",
"traceSignals", "traceSignals",
"toVerilog", "toVerilog",
"toVHDL"
] ]

View File

@ -0,0 +1 @@

1095
myhdl/_toVHDL/_convert.py Normal file

File diff suppressed because it is too large Load Diff

View File

@ -41,6 +41,7 @@ from myhdl._unparse import _unparse
from myhdl._cell_deref import _cell_deref from myhdl._cell_deref import _cell_deref
from myhdl._always_comb import _AlwaysComb from myhdl._always_comb import _AlwaysComb
from myhdl._always import _Always from myhdl._always import _Always
from myhdl._delay import delay
from myhdl._toVerilog import _error, _access, _kind, _context, \ from myhdl._toVerilog import _error, _access, _kind, _context, \
_ToVerilogMixin, _Label _ToVerilogMixin, _Label
from myhdl._extractHierarchy import _isMem, _UserDefinedVerilog from myhdl._extractHierarchy import _isMem, _UserDefinedVerilog
@ -481,6 +482,8 @@ class _AnalyzeVisitor(_ToVerilogMixin):
node.obj = int() node.obj = int()
elif f in (posedge , negedge): elif f in (posedge , negedge):
node.obj = _EdgeDetector() node.obj = _EdgeDetector()
elif f is delay:
node.obj = delay(0)
elif f in myhdlObjects: elif f in myhdlObjects:
pass pass
elif f in builtinObjects: elif f in builtinObjects:
@ -728,7 +731,8 @@ class _AnalyzeVisitor(_ToVerilogMixin):
self.refStack.pop() self.refStack.pop()
y = node.body.nodes[0] y = node.body.nodes[0]
if node.test.obj == True and \ if node.test.obj == True and \
isinstance(y, astNode.Yield): isinstance(y, astNode.Yield) and \
not isinstance(self.getObj(y.value), delay):
node.kind = _kind.ALWAYS node.kind = _kind.ALWAYS
self.require(node, node.else_ is None, "while-else not supported") self.require(node, node.else_ is None, "while-else not supported")
self.labelStack.pop() self.labelStack.pop()
@ -743,7 +747,7 @@ class _AnalyzeVisitor(_ToVerilogMixin):
if not type(n.obj) in (Signal, _EdgeDetector): if not type(n.obj) in (Signal, _EdgeDetector):
self.raiseError(node, _error.UnsupportedYield) self.raiseError(node, _error.UnsupportedYield)
else: else:
if not type(n.obj) in (Signal, _EdgeDetector): if not type(n.obj) in (Signal, _EdgeDetector, delay):
self.raiseError(node, _error.UnsupportedYield) self.raiseError(node, _error.UnsupportedYield)