PyGears TypeMatchError: [0], Incomplete type: Tuple[Fixp[32], Fixp[32]]
PyGears TypeMatchError: [0], Incomplete type: Tuple[Fixp[32], Fixp[32]]
我在 PyGears 中处理简单模块时遇到问题。我想进行简单的添加操作,然后进行舍入和饱和。我得到的错误是:
File "/home/stefan/Test/test.py", line 15, in
drv(t=Tuple[Fixp[32], Fixp[32]], seq=[Tuple[3,2]]) \ TypeMatchError: [0], Incomplete type: Tuple[Fixp[32], Fixp[32]]
- when resolving return type "t"
- when instantiating "drv"
我的代码如下:
from pygears import gear
from pygears.typing import Fixp, Tuple
from pygears.lib import add, qround, saturate, drv, collect
from pygears.sim import sim, cosim
@gear
def adder(data: Tuple[Fixp[32], Fixp[32]]):
return add(data[0],data[1]) \
| qround(fract=22) \
| saturate(t=Fixp[10, 32])
########## VERIFICATION ENV ##########
res = []
drv(t=Tuple[Fixp[32], Fixp[32]], seq=[Tuple[3,2]]) \
| adder() \
| float \
| collect(result=res)
cosim('test.py','verilator','./home/stefan/Test')
sim()
print(res)
我在这里看到三个问题:
- 第一个问题是您错误地定义了 Fixp。您还应该提及整数部分需要多少位。因此,您应该将其定义为 Fixp[10,32]
- add运算后的输出为Q11.33格式,因此通过舍入运算去除22位没有意义。如果您想保留所有 22 个小数位,请删除 qround 并保持 saturate 不变。但我建议四舍五入到 21 位并饱和到 saturate(11,32)
- 你不需要cosim
考虑到所有这些,工作代码应该看起来像这样
from pygears import gear
from pygears.typing import Fixp, Tuple
from pygears.lib import add, qround, saturate, drv, collect
from pygears.sim import sim
@gear
def adder(data: Tuple[Fixp[10, 32], Fixp[10, 32]]):
return add(data[0],data[1]) \
| qround (fract=21) \
| saturate(t=Fixp[11, 32])
########## VERIFICATION ENV ##########
res = []
sequence = [Tuple[3,2.222356],Tuple[3,3.12]]
drv(t=Tuple[Fixp[10, 32], Fixp[10, 32]], seq=sequence) \
| adder() \
| float \
| collect(result=res)
sim()
print(res)
我在 PyGears 中处理简单模块时遇到问题。我想进行简单的添加操作,然后进行舍入和饱和。我得到的错误是:
File "/home/stefan/Test/test.py", line 15, in drv(t=Tuple[Fixp[32], Fixp[32]], seq=[Tuple[3,2]]) \ TypeMatchError: [0], Incomplete type: Tuple[Fixp[32], Fixp[32]]
- when resolving return type "t"
- when instantiating "drv"
我的代码如下:
from pygears import gear
from pygears.typing import Fixp, Tuple
from pygears.lib import add, qround, saturate, drv, collect
from pygears.sim import sim, cosim
@gear
def adder(data: Tuple[Fixp[32], Fixp[32]]):
return add(data[0],data[1]) \
| qround(fract=22) \
| saturate(t=Fixp[10, 32])
########## VERIFICATION ENV ##########
res = []
drv(t=Tuple[Fixp[32], Fixp[32]], seq=[Tuple[3,2]]) \
| adder() \
| float \
| collect(result=res)
cosim('test.py','verilator','./home/stefan/Test')
sim()
print(res)
我在这里看到三个问题:
- 第一个问题是您错误地定义了 Fixp。您还应该提及整数部分需要多少位。因此,您应该将其定义为 Fixp[10,32]
- add运算后的输出为Q11.33格式,因此通过舍入运算去除22位没有意义。如果您想保留所有 22 个小数位,请删除 qround 并保持 saturate 不变。但我建议四舍五入到 21 位并饱和到 saturate(11,32)
- 你不需要cosim
考虑到所有这些,工作代码应该看起来像这样
from pygears import gear
from pygears.typing import Fixp, Tuple
from pygears.lib import add, qround, saturate, drv, collect
from pygears.sim import sim
@gear
def adder(data: Tuple[Fixp[10, 32], Fixp[10, 32]]):
return add(data[0],data[1]) \
| qround (fract=21) \
| saturate(t=Fixp[11, 32])
########## VERIFICATION ENV ##########
res = []
sequence = [Tuple[3,2.222356],Tuple[3,3.12]]
drv(t=Tuple[Fixp[10, 32], Fixp[10, 32]], seq=sequence) \
| adder() \
| float \
| collect(result=res)
sim()
print(res)