PyGears TypeError: [0], cannot saturate 'Int[10]' to a different base type 'Fixp[8, 16]'
PyGears TypeError: [0], cannot saturate 'Int[10]' to a different base type 'Fixp[8, 16]'
我正在尝试制作一个名为 Neuron 的简单模块。思路是将输入的像素值乘以权重,然后累加。累加后,要将结果加到偏置值上,再送回输出。
代码如下,我遇到的错误是这个:
TypeError: [0], cannot saturate 'Int[10]' to a different base type
'Fixp[8, 16]' when resolving return type "type_saturate(data, t,
limits)"
from pygears import gear, Intf
from pygears.typing import Queue, Tuple, Fixp
from pygears.lib import mul, accum, qround, saturate, queuemap, add
from pygears.hdl import hdlgen
@gear
def neuron (din: Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]], *, bias):
return din \
| queuemap(f=mul) \
| accum(init=Fixp[8, 32](0)) \
| add(Fixp[8,32](bias)) \
| qround \
| saturate(t=Fixp[8, 16])
neuron(Intf(Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]]),bias=3)
hdlgen('/neuron',outdir='./temp_mlp')
模块 qround
作为生产者连接到 saturate
模块,qround
模块以整数格式输出数据,在您的示例中 Int[10]
作为错误提示。 saturate
模块只能对相同基类型的数据类型进行操作,即它可以饱和 Int
到更小的 Int
,或者 Fixp
到更小的 Fixp
.
我猜你想要一个 Int[8]
输出,因为你已经使用了 qround
from pygears import gear, Intf
from pygears.typing import Queue, Tuple, Fixp, Int
from pygears.lib import mul, accum, qround, saturate, queuemap, add
from pygears.hdl import hdlgen
@gear
def neuron (din: Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]], *, bias):
return din \
| queuemap(f=mul) \
| accum(init=Fixp[8, 32](0)) \
| add(Fixp[8,32](bias)) \
| qround \
| saturate(t=Int[8])
neuron(Intf(Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]]),bias=3)
hdlgen('/neuron',outdir='./temp_mlp')
我正在尝试制作一个名为 Neuron 的简单模块。思路是将输入的像素值乘以权重,然后累加。累加后,要将结果加到偏置值上,再送回输出。
代码如下,我遇到的错误是这个:
TypeError: [0], cannot saturate 'Int[10]' to a different base type 'Fixp[8, 16]' when resolving return type "type_saturate(data, t, limits)"
from pygears import gear, Intf
from pygears.typing import Queue, Tuple, Fixp
from pygears.lib import mul, accum, qround, saturate, queuemap, add
from pygears.hdl import hdlgen
@gear
def neuron (din: Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]], *, bias):
return din \
| queuemap(f=mul) \
| accum(init=Fixp[8, 32](0)) \
| add(Fixp[8,32](bias)) \
| qround \
| saturate(t=Fixp[8, 16])
neuron(Intf(Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]]),bias=3)
hdlgen('/neuron',outdir='./temp_mlp')
模块 qround
作为生产者连接到 saturate
模块,qround
模块以整数格式输出数据,在您的示例中 Int[10]
作为错误提示。 saturate
模块只能对相同基类型的数据类型进行操作,即它可以饱和 Int
到更小的 Int
,或者 Fixp
到更小的 Fixp
.
我猜你想要一个 Int[8]
输出,因为你已经使用了 qround
from pygears import gear, Intf
from pygears.typing import Queue, Tuple, Fixp, Int
from pygears.lib import mul, accum, qround, saturate, queuemap, add
from pygears.hdl import hdlgen
@gear
def neuron (din: Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]], *, bias):
return din \
| queuemap(f=mul) \
| accum(init=Fixp[8, 32](0)) \
| add(Fixp[8,32](bias)) \
| qround \
| saturate(t=Int[8])
neuron(Intf(Queue[Tuple[Fixp[4, 16], Fixp[4, 16]]]),bias=3)
hdlgen('/neuron',outdir='./temp_mlp')