亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關(guān)于我們
? 蟲蟲下載站

?? tb_prog.sv

?? SDRAM 控制器 Verilog實現(xiàn)
?? SV
字號:
//
// Project      : High-Speed SDRAM Controller with adaptive bank management and command pipeline
// 
// Project Nick : HSSDRC
// 
// Version      : 1.0-beta 
//  
// Revision     : $Revision: 1.1 $ 
// 
// Date         : $Date: 2008-03-06 13:54:00 $ 
// 
// Workfile     : tb_prog.sv
// 
// Description  : testbench program for all cases
// 
// HSSDRC is licensed under MIT License
// 
// Copyright (c) 2007-2008, Denis V.Shekhalev (des00@opencores.org) 
// 
// Permission  is hereby granted, free of charge, to any person obtaining a copy of
// this  software  and  associated documentation files (the "Software"), to deal in
// the  Software  without  restriction,  including without limitation the rights to
// use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
// the  Software, and to permit persons to whom the Software is furnished to do so,
// subject to the following conditions:
// 
// The  above  copyright notice and this permission notice shall be included in all
// copies or substantial portions of the Software.
// 
// THE  SOFTWARE  IS  PROVIDED  "AS  IS",  WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
// IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
// FOR  A  PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
// COPYRIGHT  HOLDERS  BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
// IN  AN  ACTION  OF  CONTRACT,  TORT  OR  OTHERWISE,  ARISING  FROM, OUT OF OR IN
// CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
//



`include "hssdrc_timescale.vh"
`include "hssdrc_define.vh"
`include "hssdrc_timing.vh"
`include "tb_define.svh"

`include "message_class.sv"

`include "hssdrc_driver_class.sv"
`include "hssrdc_bandwidth_monitor_class.sv"
`include "hssrdc_scoreboard_class.sv"

`include "sdram_transaction_class.sv"

`include "sdram_tread_class.sv"
`include "sdram_agent_class.sv"

program tb_prog (interface sys_if);

  // agent <-> driver mailbox
  sdram_tr_mbx      agent2drv_mbx;
  sdram_tr_ack_mbx  drv2agent_mbx;

  // message service
  message_class msg;

  // test program -> agent mailbox
  sdram_tr_mbx agent_write_mbx;
  sdram_tr_mbx agent_read_mbx;

  // transaction agent class
  sdram_agent_class   agent;

  // virtual sdram treads
  sdram_tread_class   tread;

  // driver to uut
  hssrdc_driver_class             driver;

  // driver callbacks
  hssdrc_bandwidth_monitor_class  bandwidth_mon;
  hssdrc_scoreboard_class         scoreboard;

  event scoreboard_event;
  event bandwidth_mon_event; 

  initial begin

    agent2drv_mbx     = new (8);
    drv2agent_mbx     = new (8);

    agent_write_mbx   = new (8);
    agent_read_mbx    = new (8);

    // init objects
    msg           = new ("tb_hssdrc.log");

    driver        = new (sys_if, agent2drv_mbx, drv2agent_mbx);

    agent         = new (agent2drv_mbx, drv2agent_mbx, agent_write_mbx, agent_read_mbx);

    tread         = new ;

    bandwidth_mon = new (sys_if, bandwidth_mon_event);

    scoreboard    = new (msg, scoreboard_event);

    driver.run();

    agent.run_write_read ();

    // calibrate bandwidth monitor 
    
    bandwidth_mon.count_mbps_mfactor(1000);

    // disable debug process inside sdram model

    force tb_top.sdram_chip.Debug = 0;

    wait (sys_if.reset == 1'b0);

    wait (sys_if.cb.ready == 1'b1);

    msg.note ("Program start");

`ifdef HSSDRC_NOT_SHARE_ACT_COMMAND
    msg.note ("Controller use HSSDRC_NOT_SHARE_ACT_COMMAND macros");
`endif 

`ifdef HSSDRC_SHARE_ONE_DECODER
    msg.note ("Controller use HSSDRC_SHARE_ONE_DECODER macros");
`endif 

`ifdef HSSDRC_SHARE_NONE_DECODER
    msg.note ("Controller use HSSDRC_SHARE_NONE_DECODER macros");
`endif 

    //test(-1,-1); // simple_debug_test
    //test(0,0);   // linear_test
    test(1,1);   // random_test 
    //test(2,2);   // bandwidth_measurement 

    agent.stop_write_read();

    driver.stop();

    msg.stop();

    $stop;
    $finish (2);

  end

  //
  // 
  //

  task test (input int start_task, end_task);
    int task_num;

    sdram_transaction_class write_tr;
    sdram_transaction_class read_tr;

    sdram_transaction_class rand_tr;
    sdram_transaction_class tr;

    int err;

    int         tr_burst;
    tr_type_e_t tr_type;
    int         tr_id;
    int         tr_chid;
    int         tr_num;

    bit tread_end;
    int next_cola;

    sdram_tread_state_s_t tread_state;  // selected tread state
    int                   tread_num;    // selected tread num

    string log_str;
  begin

    for (task_num = start_task; task_num <= end_task; task_num++)
    begin
      //
      // Task -1 : manualy checking write/read transactions 
      // 
      if (task_num == -1) begin : simple_debug_test

        msg.note ($psprintf("test %0d : simple debug test", task_num));

        //
        // test for debug only 
        // 

        tr = new (0, cTR_WRITE_LOCKED, .ba(0), .rowa(0), .cola(0), .burst(3));
        tr.GetLinearPacket();          
        agent.SetTransaction(tr); 
        
        tr = new (0, cTR_WRITE_LOCKED, .ba(0), .rowa(0), .cola(0), .burst(4));
        tr.GetLinearPacket();          
        agent.SetTransaction(tr); 

        tr = new (0, cTR_READ_LOCKED, .ba(0), .rowa(0), .cola(0), .burst(4), .chid(1));
        tr.GetLinearPacket();          
        agent.SetTransaction(tr); 
        
//      tr = new (0, cTR_READ, .ba(0), .rowa(1), .cola(0), .burst(2));
//      tr.GetLinearPacket();
//      agent.SetTransaction(tr);

        tr = new (0, cTR_REFR_LOCKED, .ba(0), .rowa(0));
        agent.SetTransaction(tr); 

        repeat (10) @(sys_if.cb);
      end : simple_debug_test

      //
      // Task 0 : linear write -> read with linear data (random burst only)
      //

      else if (task_num == 0) begin : linear_test

        msg.note ($psprintf("test %0d : linear write -> read with linear data", task_num));

        //
        // test for correctness. set scoreboard callbacks
        //

        driver.cbs = {};
        scoreboard.start();
        driver.cbs.push_back(scoreboard);

        driver.random_delay_mode = 1;
        //
        // transaction generator
        //

        tread.Init();

        msg.note ($psprintf("test %0d start_task with number of treads is %0d", task_num, tread.active_tread_state.num()));

        for (tread_num = 0; tread_num < tread.active_tread_state.num(); tread_num++) begin

          //
          // get tread state
          //

          tread_state = tread.active_tread_state [tread_num];

          msg.note ($psprintf("start tread %0d" , tread_num));

          //
          // full tread transaction
          //

          tr_num = 0;

          do begin
            //
            // generate transaction
            //
            tr_id     = tread_num;
            tr_type   = cTR_WRITE;
            tr_burst  = tread.GetBurst (tread_state);
            tr_chid   = tread_state.ba;

            write_tr = new (tr_id, tr_type, tread_state.ba, tread_state.rowa, tread_state.cola, tr_burst, tr_chid);
            write_tr.GetLinearPacket();

            read_tr = new write_tr;
            read_tr.tr_type = cTR_READ;
            //
            // set transaction
            //
            #10;
            agent_write_mbx.put (write_tr);
            #10;
            agent_read_mbx.put  (read_tr);
            //
            // update tread state
            //
            tr_num++;

            next_cola = tread_state.cola + tr_burst;

            tread_end = (next_cola >= cColaMaxValue);

            tread_state.cola = next_cola;

          end
          while (tread_end != 1);

          msg.note ($psprintf("done tread %0d. number of tread transactions %0d", tread_num, tr_num));

        end

        //
        // wait compare done
        //

        do
          @(scoreboard_event);
        while (agent.read_tr_done_num != scoreboard.checked_tr_num);

        msg.note ($psprintf("test%0d done. Number of errors = %0d", task_num, scoreboard.check_err_num));

      end : linear_test

      //
      // Task 1 : random write -> read with random data, rowa, ba, burst, linear cola 
      //

      else if (task_num == 1) begin : random_test

        msg.note ($psprintf("test %0d : random write -> read with random data", task_num));

        //
        // test for correctness. set scoreboard callbacks
        //

        driver.cbs = {};
        scoreboard.start();
        driver.cbs.push_back(scoreboard);

        driver.random_delay_mode = 1;

        //
        // transaction generator
        //

        tread.Init();

        msg.note ($psprintf("test %0d start_task with number of treads is %0d", task_num, tread.active_tread_state.num()));

        tr_num = 0;

        do begin

          //
          // select tread
          //

          assert (tread.randomize()) else $error ("generate tread selection error");

          tread_num   = tread.curr_tread_num;

          tread_state = tread.active_tread_state [tread_num];

          //
          // generate transaction
          //

          tr_burst  = tread.GetBurst (tread_state);
          tr_type   = cTR_WRITE;
          tr_id     = tread_num;
          tr_chid   = tread_state.ba;

          write_tr = new (tr_id, tr_type, tread_state.ba, tread_state.rowa, tread_state.cola, tr_burst, tr_chid);
          //write_tr.GetLinearPacket();
          write_tr.GetRandomPacket();

          read_tr = new write_tr;
          read_tr.tr_type = cTR_READ;
          //
          // set transaction
          //
          #10;
          agent_write_mbx.put (write_tr);
          #10;
          agent_read_mbx.put  (read_tr);
          //
          // update tread state
          //
          tr_num++;

          next_cola = tread_state.cola + tr_burst;

          tread_end = (next_cola >= cColaMaxValue);

          tread_state.cola = next_cola;

          tread.active_tread_state [tread_num] = tread_state;
          //
          // if tread end kill it
          //
          if (tread_end) begin
            tread.active_tread_state.delete   (tread_num);
            tread.disable_tread_num.push_back (tread_num);  // random pointer constrain update
            msg.note ($psprintf("done tread %0d", tread_num));
          end

          if (tr_num > cTransactionMaxValue) break;

          if (tr_num % cTransactionLogPeriod == 0)
            msg.note($psprintf("transaction done %0d", tr_num));

        end
        while (tread.active_tread_state.num() != 0);

        //
        // wait compare done
        //

        do
          @(scoreboard_event);
        while (agent.read_tr_done_num != scoreboard.checked_tr_num);

        msg.note ($psprintf("test%0d done. Number of errors = %0d", task_num, scoreboard.check_err_num));

      end : random_test

      //
      // Task 2 : bandwidth measurement 
      //

      else if (task_num == 2) begin : bandwidth_measurement 

        msg.note ($psprintf("test %0d : access bandwidth measurement", task_num));

        //
        // test for perfromance. set bandwidth monitor callbacks, no random delay mode 
        //

        driver.cbs = {};        
        driver.cbs.push_back(bandwidth_mon);

        driver.random_delay_mode = 0;

        //
        // generate transactions
        // 
        foreach ( test_mode [t] ) begin : test_mode_cycle

          msg.note ($psprintf("test %0d start %0s test mode", task_num, test_mode_name[test_mode[t]]));

          foreach (burst_mode [b]) begin : burst_cycle

            foreach (address_mode [a] ) begin : address_cycle 
          
              time start_time; 
              string str; 

              tr_num = 0; 
              start_time = $time;

              //
              // init tr.generator 
              // 

              rand_tr = new;
              rand_tr.burst_random_mode   = burst_mode [b];
              rand_tr.address_random_mode = address_mode [a];

              bandwidth_mon.start();

              do begin 

                assert ( rand_tr.randomize() ) else begin 
                  $error("test %0d : random transaction generate error", task_num);                  
                  $stop; 
                end 

                if ( test_mode[t].write_mode) begin 
                  write_tr          = new rand_tr; 
                  write_tr.id       = tr_num++;
                  write_tr.tr_type  = cTR_WRITE;

                  agent.SetTransaction(write_tr);
                end 

                if ( test_mode[t].read_mode) begin 
                  read_tr         = new rand_tr;
                  read_tr.id      = tr_num++;
                  read_tr.tr_type = cTR_READ;

                  agent.SetTransaction(read_tr);
                end 

                if (tr_num % cTransactionLogPeriod == 0)
                  msg.note($psprintf("task %0d transaction done %0d", task_num, tr_num));

              end 
              while (($time - start_time) < cPerfomanceInterval);

              //
              // syncronize output for measure
              // 
              do 
                @(bandwidth_mon_event); 
              while (tr_num != bandwidth_mon.measured_tr_num); 

              //
              // stop measure 
              //
              bandwidth_mon.stop();

              //
              // logs 
              // 

              str = $psprintf("task %0d done. %0s mode bandwith : %0s and %0s is :\n", task_num, 
                test_mode_name[test_mode[t]], address_mode_name [address_mode[a]], burst_mode_name [burst_mode[b]]);

              if (test_mode [t].write_mode)
                str = {str, $psprintf("\t\twrite bandwidth %0f MBps, %0f %% maximum ram bandwidth\n", 
                  bandwidth_mon.write_bandwidth, bandwidth_mon.write_bandwidth_percent)};

              if (test_mode [t].read_mode) 
                str = {str, $psprintf("\t\t read bandwidth %0f MBps, %0f %% maximum ram bandwidth\n", 
                  bandwidth_mon.read_bandwidth, bandwidth_mon.read_bandwidth_percent)};

              if (test_mode [t].read_mode & test_mode [t].write_mode) 
                str = {str, $psprintf("\t\tram bandwidth %0f MBps, %0f %% maximum ram bandwidth\n", 
                  bandwidth_mon.bandwidth, bandwidth_mon.bandwidth_percent)};

              msg.note(str); 
              
            end : address_cycle 

          end : burst_cycle 

        end : test_mode_cycle

        
      end : bandwidth_measurement

    end

    msg.note ("all test done");

    repeat (100) @(sys_if.cb);
  end

  endtask



endprogram 

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
免费在线观看不卡| 国产一区999| 国产精品对白交换视频| 欧美卡1卡2卡| 91丨九色丨黑人外教| 久久精品99国产精品| 亚洲影院免费观看| 国产精品久久久久久妇女6080| 欧美大片一区二区| 欧美剧在线免费观看网站| 91免费观看国产| 国产iv一区二区三区| 国产真实乱偷精品视频免| 丝袜国产日韩另类美女| 亚洲美女一区二区三区| 欧美国产精品v| 久久婷婷成人综合色| 日韩欧美一级在线播放| 制服.丝袜.亚洲.中文.综合| 色狠狠色噜噜噜综合网| 97精品国产露脸对白| 高清不卡在线观看av| 国产一区二区三区免费| 激情亚洲综合在线| 日韩国产精品久久久久久亚洲| 亚洲五码中文字幕| 一二三四区精品视频| 亚洲精品成人天堂一二三| 亚洲欧美综合网| 国产精品国模大尺度视频| 国产欧美日韩精品a在线观看| 久久久精品人体av艺术| 久久夜色精品国产欧美乱极品| 日韩一区二区三区四区五区六区| 欧美午夜宅男影院| 欧美日韩在线电影| 欧美日韩国产首页| 欧美一区二区三区视频免费| 3atv一区二区三区| 日韩欧美国产系列| 精品福利av导航| 久久嫩草精品久久久久| 国产欧美日韩麻豆91| 中文字幕在线观看一区| 亚洲色图另类专区| 亚洲丰满少妇videoshd| 日韩精品午夜视频| 麻豆国产91在线播放| 国产精品亚洲第一区在线暖暖韩国| 狠狠久久亚洲欧美| 成人免费视频caoporn| 色综合天天综合网天天看片| 一本久久综合亚洲鲁鲁五月天| 91搞黄在线观看| 欧美乱妇23p| 久久精品亚洲麻豆av一区二区| 中文字幕中文字幕在线一区 | 日韩欧美视频在线| 亚洲精品一区二区三区香蕉| 国产蜜臀97一区二区三区| 国产精品久久久久久久久晋中| 一区二区三区蜜桃| 日本欧美韩国一区三区| 国产精品一区二区黑丝| 色偷偷一区二区三区| 欧美日韩成人在线一区| 精品国产免费视频| 亚洲啪啪综合av一区二区三区| 亚洲成av人在线观看| 经典三级在线一区| 一本色道久久综合亚洲aⅴ蜜桃| 欧美精品丝袜中出| 久久精品一区四区| 亚洲国产日日夜夜| 国产美女视频一区| 欧美午夜一区二区| 久久久久久久久久电影| 亚洲一区二区视频| 国产在线视视频有精品| 在线视频你懂得一区二区三区| 日韩精品一区二| 一区二区久久久久久| 麻豆精品视频在线观看视频| 91视频在线观看| 精品国产自在久精品国产| 亚洲黄色免费网站| 国产精品资源在线观看| 欧美日韩一区精品| 国产精品毛片大码女人| 蜜臀av一区二区| 欧美亚洲丝袜传媒另类| 亚洲国产精品成人综合| 另类中文字幕网| 欧美色网站导航| 国产精品久久午夜| 国产又粗又猛又爽又黄91精品| 欧美伊人久久久久久午夜久久久久| 国产日韩欧美不卡| 美女视频黄久久| 欧美日韩小视频| 亚洲欧美综合另类在线卡通| 激情另类小说区图片区视频区| 在线看国产一区二区| 国产日韩欧美高清在线| 精品一区二区三区影院在线午夜| 欧美性猛交一区二区三区精品| 国产精品久久午夜夜伦鲁鲁| 久久精品国产亚洲a| 欧美日韩三级视频| 一区二区三区国产| www.亚洲色图.com| 国产欧美综合色| 69精品人人人人| 久久精品一二三| 免费成人美女在线观看| 欧美日韩综合在线免费观看| 中文字幕日韩av资源站| 国产凹凸在线观看一区二区| 欧美精品一区二区高清在线观看| 香蕉加勒比综合久久| 色狠狠一区二区三区香蕉| 国产精品人妖ts系列视频| 精东粉嫩av免费一区二区三区| 日韩女优电影在线观看| 亚洲mv在线观看| 欧美精品日韩综合在线| 亚洲影视在线观看| 中文字幕一区二区三区四区不卡| 久久国产精品第一页| 精品美女被调教视频大全网站| 蜜臀精品一区二区三区在线观看 | 在线这里只有精品| 日韩毛片高清在线播放| 99国产精品一区| 亚洲天堂a在线| 色狠狠av一区二区三区| 日本网站在线观看一区二区三区| 欧美三区在线观看| 日韩精品一二区| 日韩欧美一二三| 国产麻豆视频精品| 国产欧美日韩麻豆91| 成人av午夜电影| 亚洲欧美日韩一区二区三区在线观看| 91一区二区在线| 亚洲成人一区二区| 777欧美精品| 国产精品中文有码| 欧美激情综合在线| 色女孩综合影院| 亚洲国产精品一区二区www在线 | 国产午夜一区二区三区| 国产成人精品免费一区二区| 亚洲视频一区在线| 欧洲av一区二区嗯嗯嗯啊| 婷婷久久综合九色国产成人| 26uuu国产在线精品一区二区| 福利电影一区二区| 亚洲另类色综合网站| 欧美理论在线播放| 国产精一品亚洲二区在线视频| 国产精品国产三级国产普通话三级| 91国偷自产一区二区三区观看| 香蕉乱码成人久久天堂爱免费| 精品日韩在线一区| gogogo免费视频观看亚洲一| 亚洲chinese男男1069| 精品国内二区三区| 99久久精品国产毛片| 日韩成人伦理电影在线观看| 中文字幕精品在线不卡| 99精品欧美一区二区三区小说| 日韩影院免费视频| 中文字幕不卡在线观看| 欧美日韩成人在线| 国产白丝精品91爽爽久久| 亚洲一级二级三级| 久久蜜臀中文字幕| 欧美最新大片在线看 | 欧美精品日韩一本| 国产99久久久久久免费看农村| 亚洲综合在线五月| 久久久综合九色合综国产精品| 91视频国产资源| 久久99久久久久久久久久久| 亚洲三级在线免费观看| 精品国产人成亚洲区| 欧洲激情一区二区| 国产69精品久久777的优势| 日韩影院精彩在线| 国产精品美女一区二区| 日韩免费视频一区| 91麻豆文化传媒在线观看| 国产裸体歌舞团一区二区| 五月天中文字幕一区二区| 日韩一区欧美一区| www成人在线观看| 日韩一区二区精品| 精品视频一区二区三区免费| 东方aⅴ免费观看久久av|