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

时间:2016-02-17 20:52:25

标签: python myhdl

我试图将此代码转换为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)

然而,我收到以下错误:

  File "/usr/lib/python3.5/site-packages/myhdl/conversion/_toVerilog.py", line 474, in raiseError
    raise ToVerilogError(kind, msg, info)
myhdl.ToVerilogError: in file test.py, line 22:
    Object type is not supported in this context: a, <class 'myhdl._modbv.modbv'>

移动qwe函数中的变量是可行的,但我需要外部的那些变量,因为我需要访问那些常量&#39;在另一个模块中。

任何人都可以解释为什么我会收到此错误,我该如何才能使其正常工作?

感谢。

1 个答案:

答案 0 :(得分:1)

您必须使用信号在模块之间进行通信。生成器只能对信号敏感。特别是,Array ( [0] => Array ( [firstDay] => 2013-01-01 00:00:00 [lastDay] => 2013-01-31 23:59:59 ) [1] => Array ( [firstDay] => 2013-02-01 00:00:00 [lastDay] => 2013-02-28 23:59:59 ) [2] => Array ( [firstDay] => 2013-03-01 00:00:00 [lastDay] => 2013-03-31 23:59:59 ) ) 装饰器推断的灵敏度列表仅包含信号。

顺便说一句,我很困惑为什么你提到“常数”。如果你需要常量,只需使用简单的整数。像always_combintbv这样的类型是可变类型,并不用于表示常量。