微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 微电子和IC设计 > IC验证交流 > 关于AMBA测试的问题(在给slave时序时怎么写task)

关于AMBA测试的问题(在给slave时序时怎么写task)

时间:10-02 整理:3721RD 点击:
小弟弟刚刚在做一个关于amba接口的项目,接口是AHB和APB;在做这个模块验证的时候,写AMBA的BFM时遇到了如下问题:
我把AHB的的读写分别封装成task,如下
1.
task ahb_write;
input[31:0] ahb_addr;
input[31:0] ahb_data;
begin
wait(hreaydout)
@(posedge hclk)
hsel<=1'b1;
hwrite<=1'b1;
.
.
.
haddr<=ahb_addr;
#clk_cly hwdata<=ahb_data;
end
endtask
2.
task ahb_write;
input[31:0] ahb_addr;
input[31:0] ahb_data;
begin
wait(hreaydout)
@(posedge hclk)
hsel<=1'b1;
hwrite<=1'b1;
.
.
.
haddr<=ahb_addr;
@(posedge hclk)
hwdata<=ahb_data;
end
endtask
在第一个task中,能够正常的给时序,就是一个周期地址跳变一次,同时满足数据比地址晚一个时钟;
但是在第二个task中,要两个周期,地址才能跳变一次,不满足AHB的时序要求;
我分析的是,在第二task中,因为是用了两个@(posedge hclk),等待两个HCLK的上升沿来触发,所以是两个;
但是有个疑惑,就是在第一个task中,在第一个hclk的上升沿到来的时候,触发task中的begin..end快,开始执行,在最后给hwdata,赋值的时候,延时了一个cycle,那么第二个hclk的上升沿,是怎么能保证被@(posedge hclk)给采样到的?
同时在构建APB的task的时候,PENABLE信号时怎么赋值

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top