PyGears 不生成输出 HDL 文件

PyGears is not generating output HDL files

这是我 运行 的代码,它不会生成输出 HDL 文件:

from pygears import gear
from pygears.typing import Ufixp, Uint
from pygears.sim import call
from pygears.lib import drv, collect


@gear
def gain(din: Uint[8], *, val) -> Uint[8]:
    return din * Ufixp[0, 8](val)

res = []

drv_din = drv(t=Uint[8],seq=[3,2,5])

gain(drv_din, val=0.5, __sim__='verilator') \
    | collect(result=res)

PyGears 仅在仿真需要时或通过 hdlgen() 函数直接指示这样做时才会生成 HDL 文件(参见下面的示例)。在您的情况下,您确实指定了 gain 模块应该使用 Verilator HDL 模拟器进行模拟,但您从未调用模拟器来执行。换句话说,您需要在脚本末尾调用 sim() 函数,您应该像这样导入:from pygears import sim

但是,当 PyGears 没有指定用于存储文件的文件夹时,它会自动在 OS 的临时文件夹中创建一个(Ubuntu 为 /tmp)。为了生成脚本的本地文件,您应该通过 sim() 函数的 resdir 参数指定它:

from pygears import gear
from pygears.typing import Ufixp, Uint
from pygears.sim import sim
from pygears.lib import drv, collect


@gear
def gain(din: Uint[8], *, val) -> Uint[8]:
    return din * Ufixp[0, 8](val)


res = []

drv_din = drv(t=Uint[8], seq=[3, 2, 5])

gain(drv_din, val=0.5, __sim__='verilator') \
    | collect(result=res)

sim(resdir='./output')

另一方面,如果您只对 HDL 文件感兴趣,那么您不需要 运行 仿真,您可以直接调用 hdlgen()(在前面的例子):

from pygears import gear, Intf
from pygears.typing import Ufixp, Uint
from pygears.hdl import hdlgen


@gear
def gain(din: Uint[8], *, val) -> Uint[8]:
    return din * Ufixp[0, 8](val)


gain(Intf(Uint[8]), val=0.5)

hdlgen('/gain', outdir='./output')

请注意我是如何删除所有验证组件(drv()collect() 等)的,因为我没有使用此脚本模拟任何内容。这只是为了提供一个最小的示例,并且 hdlgen() 可以在第一个示例中调用,所有验证组件都存在。