Pygears - 实例化组件时未解析的数组参数
Pygears - Unresolved array argument when instantianting component
我正在尝试实现和模拟一个简单的加法器组件,将输入值加倍。下面是我的代码。
from pygears.typing import Uint
from pygears.hdl import *
from pygears.sim import sim
from pygears.lib import drv
@gear
def add(x):
return x + x
@gear
async def collect(din, result):
async with din as val:
result.append(val)
result = []
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add() | collect(result=result)
hdlgen('/adder', outdir='sv/adder_svlib')
sim('/adder')
尝试 运行 这段代码后,出现以下错误:
File "test.py", line 34, in <module>
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add() | collect(result=result)
GearArgsNotSpecified: [0], Unresolved argument "[]" connected to the input "result"
- when instantiating "collect"
为什么这个争论没有得到解决?我在“回声”示例中看到了类似的实现,其中在函数 wav_echo_sim 中将一个空数组传递给收集装置以存储值。
提前谢谢你。
PyGears 中有两种类型的齿轮(函数)参数:
- 接口 - 可以使用位置或关键字(命名)参数指定,并且
- compile-time 参数 - 需要声明为 keyword-only
在您的示例中,collect
齿轮需要 Python 列表作为 result
参数,但 result
参数未声明为 keyword-only ,因此 PyGears 期望在那里获得一个接口,因此出现错误消息。您的装备应声明如下(注意两个参数之间的星号“*”):
@gear
async def collect(din, *, result):
async with din as val:
result.append(val)
换句话说,接口和 non-interface 参数应该用星号“*”分隔。
接下来,您的 hdlgen 调用将不起作用,因为没有名为“adder”的齿轮实例。我猜您想为 add
齿轮实例生成 HDL 文件。默认情况下,实例与齿轮定义函数同名,因此在您的情况下,实例将被命名为“add”。您可以像这样显式指定实例名称:
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add(name="adder") | collect(result=result)
或将 hdlgen
指定的路径更改为:
hdlgen('/add', outdir='sv/adder_svlib')
最后,sim
调用的第一个参数是应放置仿真工件(如波形、生成的 HDL 文件、日志...)的目录路径,因此您应该“ =19=]
- 留空 - 在这种情况下将使用临时文件夹,或者
- 指定有效的绝对或相对路径
我正在尝试实现和模拟一个简单的加法器组件,将输入值加倍。下面是我的代码。
from pygears.typing import Uint
from pygears.hdl import *
from pygears.sim import sim
from pygears.lib import drv
@gear
def add(x):
return x + x
@gear
async def collect(din, result):
async with din as val:
result.append(val)
result = []
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add() | collect(result=result)
hdlgen('/adder', outdir='sv/adder_svlib')
sim('/adder')
尝试 运行 这段代码后,出现以下错误:
File "test.py", line 34, in <module>
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add() | collect(result=result)
GearArgsNotSpecified: [0], Unresolved argument "[]" connected to the input "result"
- when instantiating "collect"
为什么这个争论没有得到解决?我在“回声”示例中看到了类似的实现,其中在函数 wav_echo_sim 中将一个空数组传递给收集装置以存储值。
提前谢谢你。
PyGears 中有两种类型的齿轮(函数)参数:
- 接口 - 可以使用位置或关键字(命名)参数指定,并且
- compile-time 参数 - 需要声明为 keyword-only
在您的示例中,collect
齿轮需要 Python 列表作为 result
参数,但 result
参数未声明为 keyword-only ,因此 PyGears 期望在那里获得一个接口,因此出现错误消息。您的装备应声明如下(注意两个参数之间的星号“*”):
@gear
async def collect(din, *, result):
async with din as val:
result.append(val)
换句话说,接口和 non-interface 参数应该用星号“*”分隔。
接下来,您的 hdlgen 调用将不起作用,因为没有名为“adder”的齿轮实例。我猜您想为 add
齿轮实例生成 HDL 文件。默认情况下,实例与齿轮定义函数同名,因此在您的情况下,实例将被命名为“add”。您可以像这样显式指定实例名称:
drv(t=Uint[16], seq=[0, 1, 2, 3]) | add(name="adder") | collect(result=result)
或将 hdlgen
指定的路径更改为:
hdlgen('/add', outdir='sv/adder_svlib')
最后,sim
调用的第一个参数是应放置仿真工件(如波形、生成的 HDL 文件、日志...)的目录路径,因此您应该“ =19=]
- 留空 - 在这种情况下将使用临时文件夹,或者
- 指定有效的绝对或相对路径