Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/apache-flex/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
System verilog 如何在邮箱系统verilog中使用get函数_System Verilog - Fatal编程技术网

System verilog 如何在邮箱系统verilog中使用get函数

System verilog 如何在邮箱系统verilog中使用get函数,system-verilog,System Verilog,我是systemverilog的初学者,我试图编写一个复杂的代码,用于比较两个邮箱 它在模拟中给了我这些误差 //包裹代码 包装类型 类型定义结构{ int-pid; }包 endpackage //主代码 module mbox; import types::*;

我是systemverilog的初学者,我试图编写一个复杂的代码,用于比较两个邮箱 它在模拟中给了我这些误差

//包裹代码
包装类型
类型定义结构{ 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邮箱中获取数据,并在比较功能中比较它们。我给出的答案符合您的要求。