|
|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?注册
×
各位:
今天突然遇到一个简单的基本问题,但是会导致设计很大的错误。就是在systemverilog的task中使用非阻塞赋值的问题。
我在写一个task,当valid为高的时候,采集总线上的id信号,并根据id去查id对应的transfer,根据该transfer的延时参数来给出ready信号。那么问题来了:
刚开始我是这样写的:
- @(posedge vif.axi_clock iff(vif.axi_rst_n))
- if(vif.rvalid) begin
- id = vif.RID;
- $display("receive r_id=%h @ %t",id,$time);
- ......
- end
复制代码
然后波形出来一看,有点不对,rvalid是在1550ns时刻拉高,本来应该这个时候就采集到id的,但是打印出来的却是在1570ns的时候才采集到id的值(时钟周期20ns)。所以我就想应该使用"<=",结果ncvlog报错NOAUTO,难道systemverilog的task中不能使用非阻塞赋值么,应该不会吧,应该是我没用对,所以,我想问问各位,这种情况我应该怎么修改我的代码? |
|