MyHDL:此上下文中不支持对象类型

2024-09-29 22:29:31 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试将此代码转换为Verilog:

from myhdl import always_comb
from myhdl import modbv
from myhdl import Signal
from myhdl import concat
from myhdl import toVerilog

var0 = modbv(15)[12:]
var1 = modbv(15)[12:]
var2 = modbv(15)[12:]
var3 = modbv(15)[12:]
a = modbv(0)[3:]
b = modbv(1)[3:]
c = modbv(2)[3:]
d = modbv(3)[3:]
e = concat(d, c, b, a)


def qwe(sel, out_data):
    @always_comb
    def hdl():
        if sel == a:
            out_data.next = var0
        elif sel == b:
            out_data.next = var1
        elif sel == c:
            out_data.next = var2
        elif sel == d:
            out_data.next = var3
        else:
            out_data.next = e

    return hdl


sel = Signal(modbv(0)[3:])
output = Signal(modbv(0)[12:])

toVerilog(qwe, sel, output)

但是,我得到了以下错误:

^{pr2}$

将变量移到qwe函数内可以,但我需要这些变量在外部,因为我需要访问另一个模块中的那些“常量”。在

有人能解释一下我为什么会犯这个错误吗?我该怎么做?在

谢谢。在


Tags: fromimportdatasignaloutalwaysnextcomb
1条回答
网友
1楼 · 发布于 2024-09-29 22:29:31

你必须使用信号在模块之间进行通信。发电机只能对信号敏感。特别是,always_comb修饰符推断出的敏感度列表只包含信号。在

顺便说一句,我很困惑你为什么要提到“常数”。如果需要常量,只需使用普通整数。像intbvmodbv这样的类型是可变类型,不打算表示常量。在

相关问题 更多 >

    热门问题