各位:
最近正在用UVM搭建仿真环境。在写monitor时候遇到一点问题,嗯,我写的是monitor接收一幅图像的数据,但是不知道该图像的大小。因此,需要根据interface中的hs和vs来给line_cnt和pix_cnt进行清零,加一操作。本来我想的是“valid有效时采集数据”,“hs的上升沿时line_cnt加一”,“vs的上升沿,line_cnt和pix_cnt均清零”这三件事可并行进行。代码如下:
task run_phase(uvm_phase phase);
wait(!vif.vdo_rst);
`uvm_info(get_type_name(),"Detected Reset Done",UVM_LOW)
fork
forever begin
@(posedge vif.vdo_clk iff(vif.vdo_rst))
if(vif.valid) begin
my.r[pix_cnt]=vif.r;
my.g[pix_cnt]=vif.g;
my.b[pix_cnt]=vif.b;
pix_cnt++;
end
end
forever begin
@(posedge vif.hs)
pix_cnt++;
end
forever begin
@(posedge vif.vs)
pix_cnt=0;
line_cnt=0;
end
join
endtask
运行的结果是pix_cnt能够正常进行加一操作,但是没办法清零,line_cnt既没办法加一,也没办法清零,为什么会这样呢?我该如何修改呢?