首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >myHDL笔记本中iPython手册中基本示例的AST编译错误

myHDL笔记本中iPython手册中基本示例的AST编译错误
EN

Stack Overflow用户
提问于 2013-10-18 13:51:46
回答 1查看 572关注 0票数 1

编辑:只有在我从iPython笔记本内部运行代码时才会发生这种情况。它从一个普通的.py文件中运行良好。

我刚刚开始学习myHDL,并且正在使用@instance或@always_comb生成器获得编译错误,如下所示:

TypeError:编译()预期字符串而不带空字节

例如: 3.2信号、端口和并发:

代码语言:javascript
复制
from myhdl import Signal, delay, always, instance, now, Simulation

def ClkDriver(clk, period=20):
    lowTime = int(period/2)
    highTime = period - lowTime

    @instance
    def driveClk():
        while True:
            yield delay(lowTime)
            clk.next = 1
            yield delay(highTime)
            clk.next = 0

    return driveClk

clk = Signal(0)
clkdriver_inst = ClkDriver(clk)

给出堆栈跟踪:

代码语言:javascript
复制
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-47-4252bd2f72e0> in <module>()
     16 
     17 clk = Signal(0)
---> 18 clkdriver_inst = ClkDriver(clk)

<ipython-input-47-4252bd2f72e0> in ClkDriver(clk, period)
      5     highTime = period - lowTime
      6 
----> 7     @instance
      8     def driveClk():
      9         while True:

C:\Python27\lib\site-packages\myhdl\_instance.pyc in instance(genFunc)
     40     if genFunc.func_code.co_argcount > 0:
     41         raise InstanceError(_error.NrOfArgs)
---> 42     return _Instantiator(genFunc)
     43 
     44 class _Instantiator(object):

C:\Python27\lib\site-packages\myhdl\_instance.pyc in __init__(self, genFunc)
     47         self.genfunc = genFunc
     48         self.gen = genFunc()
---> 49         self.waiter = _inferWaiter(self.gen)
     50 

C:\Python27\lib\site-packages\myhdl\_Waiter.pyc in _inferWaiter(gen)
    209     s = inspect.getsource(f)
    210     s = _dedent(s)
--> 211     root = ast.parse(s)
    212     root.symdict = f.f_globals.copy()
    213     root.symdict.update(f.f_locals)

C:\Python27\lib\ast.pyc in parse(source, filename, mode)
     35     Equivalent to compile(source, filename, mode, PyCF_ONLY_AST).
     36     """
---> 37     return compile(source, filename, mode, PyCF_ONLY_AST)
     38 
     39 

TypeError: compile() expected string without null bytes

我做错了什么有什么线索吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-18 14:47:05

这看起来像是myhdl._util._dedent()中unicode支持的一个问题。

下面的片段说明了这个问题:

为了快速修复,我添加了以下代码:

代码语言:javascript
复制
def _dedent(s):
    """Dedent python code string."""
    # RL convert to ascii
    s = s.encode('ascii','ignore')
    result = [t[:2] for t in generate_tokens(StringIO(s).readline)]
    # set initial indent to 0 if any
    if result[0][0] == INDENT:
        result[0] = (INDENT, '')
    return untokenize(result)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19451398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档