System verilog 如何在邮箱系统verilog中使用get函数
我是systemverilog的初学者,我试图编写一个复杂的代码,用于比较两个邮箱 它在模拟中给了我这些误差 //包裹代码System verilog 如何在邮箱系统verilog中使用get函数,system-verilog,System Verilog,我是systemverilog的初学者,我试图编写一个复杂的代码,用于比较两个邮箱 它在模拟中给了我这些误差 //包裹代码 包装类型 类型定义结构{ int-pid; }包 endpackage //主代码 module mbox; import types::*;
包装类型
类型定义结构{ int-pid;
}包
endpackage
//主代码
module mbox;
import types::*;
//Declare two mailboxes here
mailbox exp_mb = new(256);
mailbox act_mb = new(256);
// This task supplies stimulus to the two mailboxes
task stimulus();
packet stim_pkt;
for (int i = 0; i < 256; i++) begin
stim_pkt.pid = i;
//*** Write stim_pkt to both mailboxes here
exp_mb.put(stim_pkt);
act_mb.put(stim_pkt);
$display("Sending pkt: ",i);
end
endtask
// Add task checker here
task check(input mailbox exp_mb ,act_mb);
bit com;
packet x;
packet y;
for (int i = 0; i < 256; i++) begin
x.pid = exp_mb.get(i) ;
y.pid = act_mb.get(i);
com = compare(x,y);
if (com == 1)
$display ("No Error");
else
$display ("Error in %d", i);
end
endtask
// Add function compare here
function bit unsigned compare (packet a ,b);
if (a.pid == b.pid)
return 1;
else
return 0;
endfunction// Add an initial block to run stimulus & checker tasks simultaneously
initial
begin
fork
stimulus();
check(exp_mb ,act_mb);
join_none
end
endmodule
模块mbox;
导入类型::*;
//在此声明两个邮箱
邮箱exp_mb=new(256);
邮箱act_mb=新(256);
//此任务为两个邮箱提供刺激
任务刺激();
数据包刺激;
对于(int i=0;i<256;i++)开始
stim_pkt.pid=i;
//***将stim_pkt写入此处的两个邮箱
exp_mb.put(刺激套件);
行动计划(刺激计划);
$display(“发送包:”,i);
结束
结束任务
//在此处添加任务检查器
任务检查(输入邮箱exp\u mb、act\u mb);
比特通信;
数据包x;
包y;
对于(int i=0;i<256;i++)开始
x、 pid=exp_mb.get(i);
y、 pid=动作(i);
com=比较(x,y);
如果(com==1)
$display(“无错误”);
其他的
$display(“错误在%d”,i);
结束
结束任务
//在此处添加函数比较
函数位无符号比较(数据包a、b);
如果(a.pid==b.pid)
返回1;
其他的
返回0;
endfunction//添加初始块以同时运行刺激和检查任务
首字母
开始
叉
刺激();
检查(exp\u mb,act\u mb);
加入
结束
端模
错误消息准确地告诉您问题所在。邮箱get()
方法不返回值,而是在其参数中放置一个值
我相信你想要
exp_mb.get(x) ;
act_mb.get(y);
另外,一个好主意是向邮箱中添加类型。随着代码的增长和不同数据包类型的数量的增加,在获取编译错误而不是运行时错误方面将变得非常有用
mailbox #(packet) exp_mb = new(256);
mailbox #(packet) act_mb = new(256);
...
task check(mailbox #(packet) exp_mb ,act_mb);
你好,戴夫!我想从exp_mb和act_mb邮箱中获取数据,并在比较功能中比较它们。我给出的答案符合您的要求。