定义了一个apb_read task,为什么task返回 的值晚 一拍 ?
时间:10-02
整理:3721RD
点击:
task apb_read;
input [31:0] addr;
output [31:0] data;
@(posedge CLK);
PSEL<= 1'b1;
PWRITE<=1'b0;
PADDR<=addr;
@(posedge CLK);
PENABLE <= 1'b1;
@(posedge CLK);
data <= PRDATA;
PSEL<=1'b0;
PENABLE<=1'b0;
endtask
module tb_top;
reg [31:0] data;
apn_read(32'h0000_0000,read_data);
endmodule
从 波形 文件上看, task里 的data是对 的 ,但是 read_data是 data的上一拍 的 值 ,这是 为什么 ?task不是 应该 直接 返回data的值吗
input [31:0] addr;
output [31:0] data;
@(posedge CLK);
PSEL<= 1'b1;
PWRITE<=1'b0;
PADDR<=addr;
@(posedge CLK);
PENABLE <= 1'b1;
@(posedge CLK);
data <= PRDATA;
PSEL<=1'b0;
PENABLE<=1'b0;
endtask
module tb_top;
reg [31:0] data;
apn_read(32'h0000_0000,read_data);
endmodule
从 波形 文件上看, task里 的data是对 的 ,但是 read_data是 data的上一拍 的 值 ,这是 为什么 ?task不是 应该 直接 返回data的值吗
prdata 和PSEL无效/PENABLE无效在同一拍了,所以~
如果把PRDATA放到了PENABLE <= 1同一拍就可以了
是task里 的data和apb_read里的read_data不一样 ,read_data是 data上一拍 的值
不知道什么意思,从task里面的状况看,
第一拍是PSEL,~PENABLE,
第二拍是PSEL,PENABLE
第三拍是~PSEL,~PENABLE,DATA。
按照APB协议的话,data回的时机是不对的。
第二拍数据应该已经出来了,第三拍去采,不是应该采到第二拍的吗