|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
本帖最后由 oscillator_cn1 于 2013-5-16 10:49 编辑
各位:
最近正在用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既没办法加一,也没办法清零,为什么会这样呢?我该如何修改呢?
用[code] 后代码全变成一行了,重新编辑了一下,去掉了【code】【/code】 |
|