我试图将此代码转换为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函数中移动变量可以工作,但我需要将这些变量放在外部,因为我需要访问另一个模块中的那些“常量”。
有人能解释我为什么会犯这个错误吗?我怎样才能让它工作?
谢谢。
发布于 2016-02-18 08:56:39
您必须使用信号在模块之间进行通信。发电机只能对信号敏感。特别是,always_comb装饰器推断的灵敏度列表仅包含信号。
顺便说一句,我不明白你为什么提到“常量”。如果需要常量,只需使用普通的ints即可。像intbv和modbv这样的类型是可变类型,而不是用来表示常量的。
https://stackoverflow.com/questions/35467492
复制相似问题