微波EDA网,见证研发工程师的成长!
首页 > 研发问答 > 嵌入式设计讨论 > FPGA,CPLD和ASIC > testbench和RTL之间的时序问题

testbench和RTL之间的时序问题

时间:10-02 整理:3721RD 点击:
module apb_task();
reg [31:0] rd_data;
task apb_read();
input [31:0] addr;
output [31:0] data;
begin
  @(posedge CLK)
  begin
    PSEL     <= 1'b1;
    PWRITE <= 1'b0;
    PADDR  <= addr;
  end
  @(posedge CLK);
  begin
    PENABLE <= 1'b1;
  end
  @(posedge CLK)
  begin
     data <= PRDATA;   //data=PRDATA;这里出现问题?
     PSEL <= 1'b0;
     PENABLE <= 1'b0;
  end
end
endtaask

initial
begin
rd_data <= 32'h0;
apb_rd(32'h5,rd_data);
end
endmodule
为什么用非阻塞赋值返回的rd_data是xx(但是看波形,task内的data都是对的,就是rd_data是x),而用阻塞赋值是正确的值。

改为:
initial
begin

apb_rd(32'h5);
end
endmodule
然后,直接查看data试试

你是问这个,我是这么理解的
阻塞赋值是顺序赋值,所以你会看到最终值,即apb_rd(32'h5,rd_data);
而非阻塞赋值是同时,rd_data <= 32'h0;和apb_rd(32'h5,rd_data);同时赋值给rd_data,所以出现x态。

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

网站地图

Top