新聞中心

EEPW首頁 > 測(cè)試測(cè)量 > 設(shè)計(jì)應(yīng)用 > 編寫高效的測(cè)試設(shè)計(jì)(testbenches)

編寫高效的測(cè)試設(shè)計(jì)(testbenches)

作者: 時(shí)間:2008-06-26 來源:電子開發(fā)網(wǎng) 收藏

  Data_in_t[6] =10’b1111011111;

本文引用地址:http://butianyuan.cn/article/84843.htm

  Data_in_t[7] =10’b1110111111;

  Data_in_t[8] =10’b1101111111;

  Data_in_t[9] =10’b1011111111;

  Data_in_t[10]=10’b0111111111;

  Data_in_t[11]=10’b1111111110;

  Data_in_t[12]=10’b1111111110;

  Data_in_t[13]=10’b1111111101;

  Data_in_t[14]=10’b1111111011;

  Data_in_t[15]=10’b1111110111;

  Data_in_t[16]=10’b1111101111;

  Data_in_t[17]=10’b1111011111;

  Data_in_t[18]=10’b1110111111;

  Data_in_t[19]=10’b1101111111;

  Data_in_t[20]=10’b1011111111;

  Data_in_t[21]=10’b0111111111;

  Data_in_t[22]=10’b1111111110;

  Data_in_t[23]=10’b1111111110;

  Data_in_t[24]=10’b1111111101;

  Data_in_t[25]=10’b1111111011;

  end

  reg GSR;

  assign glbl.GSR = GSR;

  initial begin

  GSR = 1;

  // ///////////////////////////////

  // Wait till Global Reset Finished

  // ///////////////////////////////

  #100 GSR = 0;

  end

  // ////////////////

  // Create the clock

  // ////////////////

  initial begin

  tbclk = 0;

  // Wait till Global Reset Finished, then cycle clock

  #100 forever #60 tbclk = ~tbclk;

  end

  initial begin

  // //////////////////////////

  // Initialize All Input Ports

  // //////////////////////////

  tbreset = 1;

  tbstrtstop = 1;

  // /////////////////////

  // Apply Design Stimulus

  // /////////////////////

  #240 tbreset = 0;

  tbstrtstop = 0;

  #5000 tbstrtstop = 1;

  #8125 tbstrtstop = 0;

  #500 tbstrtstop = 1;

  #875 tbreset = 1;

  #375 tbreset = 0;

  #700 tbstrtstop = 0;

  #550 tbstrtstop = 1;

  // /////////////////////////////////////////////////////

  // simulation must be halted inside an initial statement

  // /////////////////////////////////////////////////////

  // #100000 $stop;

  end

  integer i,errors;

  ///////////////////////////////////////////////////////////////////

  ///////////////

  // Block below compares the expected vs. actual results

  // at every negative clock edge.

  /////////////////////////////////////////////////////////// ////////
  ///////////////

  always @ (posedge tbclk)

  begin

  if (tbstrtstop)

  begin

  i = 0;

  errors = 0;

  end

  else

  begin

  for (i = 1; i <= cycles; i = i + 1)

  begin

  @(negedge tbclk)

  // check result at negedge

  $display("Time%d ns; TBSTRTSTOP=%b; Reset=%h; Expected

  TenthsOut=%b; Actual TenthsOut=%b", $stime, tbstrtstop, tbreset,

  Data_in_t[i], tbtenthsout);

  if ( tbtenthsout !== Data_in_t[i] )

  begin

  $display(" ------ERROR. A mismatch has occurred-----");

  errors = errors + 1;

  end

  end

  if (errors == 0)

  $display("Simulation finished Successfully.");

  else if (errors > 1)

  $display("%0d ERROR! See log above for details.",errors);

  else

  $display("ERROR! See log above for details.");

  #100 $stop;

  end

  end

  endmodule

  這種簡(jiǎn)單的自較驗(yàn)設(shè)計(jì)可以轉(zhuǎn)換到任何場(chǎng)合----當(dāng)然,預(yù)期的輸出值和信號(hào)的名字在重用時(shí)是需要更改的。如果不需要每個(gè)時(shí)鐘沿檢查,需要的話可以修改for-loop結(jié)構(gòu)。

  如果仿真成功,下圖的信息就會(huì)在顯示終端上顯示:


上一頁 1 2 3 4 下一頁

關(guān)鍵詞: 測(cè)試 HLL

評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉