关于SV中mailbox的问题
时间:10-02
整理:3721RD
点击:
下面程序在Questa6.4中运行时,如果没有加#(Transaction),就会报下面的错误:
Cannot assign an unpacked type to a packed type.
请大牛解释一下为什么呢?
谢谢了。
class Transaction;
..................
endclass
class Generator;
mailbox #(Transaction) gen2drv;//Transaction tr;
function new(input mailbox #(Transaction) gen2drv);
this.gen2drv = gen2drv;//this->类一级变量
endfunction
task run;
forever begin
tr = new();//创建事务
assert(tr.randomize);//随机化
gen2drv.put(tr);//送入驱动器
end
endtask
endclass
Cannot assign an unpacked type to a packed type.
请大牛解释一下为什么呢?
谢谢了。
class Transaction;
..................
endclass
class Generator;
mailbox #(Transaction) gen2drv;//Transaction tr;
function new(input mailbox #(Transaction) gen2drv);
this.gen2drv = gen2drv;//this->类一级变量
endfunction
task run;
forever begin
tr = new();//创建事务
assert(tr.randomize);//随机化
gen2drv.put(tr);//送入驱动器
end
endtask
endclass
请问这是运行时的错吗?能够编译对吧
vsim 时出错的
有了transaction的定义,会使得该mailbox的使用在定义的时候就限制在某一类型的class,减少出错机会,a trade off
那这里为什么会出错呢?
如果function new的输入接口中去掉input 这个关键字是不是会比较好?
如果有input 没有类型,是否会直接默认为logic类型?
试试把input去掉,把transaction去掉看看吧
我改这个错 ,改了几天啦
非常感谢
questasim 对SV语法的支持中,针对untype的mailbox是不支持的!