gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 18:46:16 28 4
gpt4 key购买 nike

编辑:只有当我从 iPython notebook 内部运行代码时才会发生这种情况。 。它在常规 .py 文件中运行良好

我刚刚开始学习 myHDL,但使用 @instance 或 @always_comb 生成器时遇到编译错误,如下所示:

TypeError: compile() expected string without null bytes

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

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)

给出堆栈跟踪:

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

有什么线索可以说明我做错了什么吗?

最佳答案

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

这是说明问题的代码片段:

enter image description here

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

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)

关于python - iPython 笔记本中 myHDL 手册中基本示例的 AST 编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451398/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com