03. テストベンチトップ

テストベンチトップは、

  • 下位にmaster, slaveをインスタンス
  • クロックやリセットを生成
  • Grantを生成
  • masterモデルのコマンドtaskをcall

の構成です。接続記述は省略記述を用いています。

--- tb_top.sv ---module tb_top; logic clk, rstz; logic req,gnt,trans,write,ready; logic [31:0] addr,wdata,rdata;
master_bfm master ( .clk, .rstz, .req, .gnt, .trans, .write, .addr, .wdata, .rdata, .ready );
slave_bfm slave ( .clk, .rstz, .trans, .write, .addr, .wdata, .rdata, .ready );
task gen_clk; forever begin #50 clk <= ~clk; end endtask
task gen_gnt; forever begin while(req!==1'b1) @(posedge clk); repeat (2) @(posedge clk); gnt <= 1'b1; @(posedge clk); gnt <= 1'b0; @(posedge clk); end endtask
initial begin bit [31:0] this_rdata; $display("run start"); clk <= 1'b1; rstz <= 1'b1; gnt <= 1'b0; #100 fork gen_clk; gen_gnt; join_none #20 rstz <= 1'b0; #100; master.write_issue(32'h0000_0000, $random); master.write_issue(32'h0000_1000, $random); master.write_issue(32'h0000_2000, $random); master.write_issue(32'h0000_3000, $random); master.read_issue(32'h0000_0000, this_rdata); master.read_issue(32'h0000_1000, this_rdata); master.read_issue(32'h0000_2000, this_rdata); master.read_issue(32'h0000_3000, this_rdata); master.read_issue(32'h0000_4000, this_rdata);///未初期化領域へのリード $finish; end
endmodule