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

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

?? can_testbench.v

?? USB_I2C_MAC_FPGA_Code.rar
?? V
?? 第 1 頁 / 共 4 頁
字號:
      end

    for (i=0; i<64; i=i+1)
      begin
        can_testbench.i_can_top.i_can_bsp.i_can_fifo.fifo[i] = 0;
      end

    $display("(%0t) Fifo initialized", $time);
  end
endtask
*/
/*
task read_overrun_info;
  input [4:0] start_addr;
  input [4:0] end_addr;
  integer i;
  begin
    for (i=start_addr; i<=end_addr; i=i+1)
      begin
        $display("len[0x%0x]=0x%0x", i, can_testbench.i_can_top.i_can_bsp.i_can_fifo.length_info[i]);
        $display("overrun[0x%0x]=0x%0x\n", i, can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun_info[i]);
      end
  end
endtask
*/

task fifo_info;   // Displaying how many packets and how many bytes are in fifo. Not working when wr_info_pointer is smaller than rd_info_pointer.
  begin
      $display("(%0t) Currently %0d bytes in fifo (%0d packets)", $time, can_testbench.i_can_top.i_can_bsp.i_can_fifo.fifo_cnt, 
      (can_testbench.i_can_top.i_can_bsp.i_can_fifo.wr_info_pointer - can_testbench.i_can_top.i_can_bsp.i_can_fifo.rd_info_pointer));
end
endtask


task read_register;
  input [7:0] reg_addr;

  `ifdef CAN_WISHBONE_IF
    begin
      wait (wb_free);
      wb_free = 0;
      @ (posedge wb_clk_i);
      #1; 
      cs_can = 1;
      wb_adr_i = reg_addr;
      wb_cyc_i = 1;
      wb_stb_i = 1;
      wb_we_i = 0;
      wait (wb_ack_o);
      $display("(%0t) Reading register [%0d] = 0x%0x", $time, wb_adr_i, wb_dat_o);
      @ (posedge wb_clk_i);
      #1; 
      wb_adr_i = 'hz;
      wb_cyc_i = 0;
      wb_stb_i = 0;
      wb_we_i = 'hz;
      cs_can = 0;
      wb_free = 1;
    end
  `else
    begin
      wait (port_free);
      port_free = 0;
      @ (posedge clk);
      #1;
      cs_can = 1;
      @ (negedge clk);
      #1;
      ale_i = 1;
      port_0_en = 1;
      port_0_o = reg_addr;
      @ (negedge clk);
      #1;
      ale_i = 0;
      #90;            // 73 - 103 ns
      port_0_en = 0;
      rd_i = 1;
      #158;
      $display("(%0t) Reading register [%0d] = 0x%0x", $time, can_testbench.i_can_top.addr_latched, port_0_i);
      #1;
      rd_i = 0;
      cs_can = 0;
      port_free = 1;
    end
  `endif
endtask


task write_register;
  input [7:0] reg_addr;
  input [7:0] reg_data;

  `ifdef CAN_WISHBONE_IF
    begin
      wait (wb_free);
      wb_free = 0;
      @ (posedge wb_clk_i);
      #1; 
      cs_can = 1;
      wb_adr_i = reg_addr;
      wb_dat_i = reg_data;
      wb_cyc_i = 1;
      wb_stb_i = 1;
      wb_we_i = 1;
      wait (wb_ack_o);
      @ (posedge wb_clk_i);
      #1; 
      wb_adr_i = 'hz;
      wb_dat_i = 'hz;
      wb_cyc_i = 0;
      wb_stb_i = 0;
      wb_we_i = 'hz;
      cs_can = 0;
      wb_free = 1;
    end
  `else
    begin
      wait (port_free);
      port_free = 0;
      @ (posedge clk);
      #1;
      cs_can = 1;
      @ (negedge clk);
      #1;
      ale_i = 1;
      port_0_en = 1;
      port_0_o = reg_addr;
      @ (negedge clk);
      #1;
      ale_i = 0;
      #90;            // 73 - 103 ns
      port_0_o = reg_data;
      wr_i = 1;
      #158;
      wr_i = 0;
      port_0_en = 0;
      cs_can = 0;
      port_free = 1;
    end
  `endif
endtask


task read_receive_buffer;
  integer i;
  begin
    $display("\n\n(%0t)", $time);
    if(extended_mode)   // Extended mode
      begin
        for (i=8'd16; i<=8'd28; i=i+1)
          read_register(i);
        if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
          $display("\nWARNING: Above packet was received with overrun.");
      end
    else
      begin
        for (i=8'd20; i<=8'd29; i=i+1)
          read_register(i);
        if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.overrun)
          $display("\nWARNING: Above packet was received with overrun.");
      end
  end
endtask


task release_rx_buffer_command;
  begin
    write_register(8'd1, 8'h4);
    $display("(%0t) Rx buffer released.", $time);
  end
endtask


task tx_request_command;
  begin
    write_register(8'd1, 8'h1);
    $display("(%0t) Tx requested.", $time);
  end
endtask


task tx_abort_command;
  begin
    write_register(8'd1, 8'h2);
    $display("(%0t) Tx abort requested.", $time);
  end
endtask


task clear_data_overrun_command;
  begin
    write_register(8'd1, 8'h8);
    $display("(%0t) Data overrun cleared.", $time);
  end
endtask


task self_reception_request_command;
  begin
    write_register(8'd1, 8'h10);
    $display("(%0t) Self reception requested.", $time);
  end
endtask


task test_synchronization;
  begin
    // Hard synchronization
    #1 rx=0;
    repeat (2*BRP) @ (posedge clk);
    repeat (8*BRP) @ (posedge clk);
    #1 rx=1;
    repeat (10*BRP) @ (posedge clk);
  
    // Resynchronization on time
    #1 rx=0;
    repeat (10*BRP) @ (posedge clk);
    #1 rx=1;
    repeat (10*BRP) @ (posedge clk);
  
    // Resynchronization late
    repeat (BRP) @ (posedge clk);
    repeat (BRP) @ (posedge clk);
    #1 rx=0;
    repeat (10*BRP) @ (posedge clk);
    #1 rx=1;
  
    // Resynchronization early
    repeat (8*BRP) @ (posedge clk);   // two frames too early
    #1 rx=0;
    repeat (10*BRP) @ (posedge clk);
    #1 rx=1;
    repeat (10*BRP) @ (posedge clk);
  end
endtask


task send_bit;
  input bit;
  integer cnt;
  begin
    #1 rx=bit;
    repeat ((`CAN_TIMING1_TSEG1 + `CAN_TIMING1_TSEG2 + 3)*BRP) @ (posedge clk);
  end
endtask


task receive_frame;           // CAN IP core receives frames
  input mode;
  input remote_trans_req;
  input [28:0] id;
  input  [3:0] length;
  input [14:0] crc;

  reg [117:0] data;
  reg         previous_bit;
  reg         stuff;
  reg         tmp;
  reg         arbitration_lost;
  integer     pointer;
  integer     cnt;
  integer     total_bits;
  integer     stuff_cnt;

  begin

    stuff_cnt = 1;
    stuff = 0;

    if(mode)          // Extended format
      data = {id[28:18], 1'b1, 1'b1, id[17:0], remote_trans_req, 2'h0, length};
    else              // Standard format
      data = {id[10:0], remote_trans_req, 1'b0, 1'b0, length};

    if (~remote_trans_req)
      begin
        if(length)    // Send data if length is > 0
          begin
            for (cnt=1; cnt<=(2*length); cnt=cnt+1)  // data   (we are sending nibbles)
              data = {data[113:0], cnt[3:0]};
          end
      end

    // Adding CRC
    data = {data[104:0], crc[14:0]};


    // Calculating pointer that points to the bit that will be send
    if (remote_trans_req)
      begin
        if(mode)          // Extended format
          pointer = 52;
        else              // Standard format
          pointer = 32;
      end
    else
      begin
        if(mode)          // Extended format
          pointer = 52 + 8 * length;
        else              // Standard format
          pointer = 32 + 8 * length;
      end

    // This is how many bits we need to shift
    total_bits = pointer;

    // Waiting until previous msg is finished before sending another one
    if (arbitration_lost)           //  Arbitration lost. Another node is transmitting. We have to wait until it is finished.
      wait ( (~can_testbench.i_can_top.i_can_bsp.error_frame) & 
             (~can_testbench.i_can_top.i_can_bsp.rx_inter   ) & 
             (~can_testbench.i_can_top.i_can_bsp.tx_state   )
           );
    else                            // We were transmitter of the previous frame. No need to wait for another node to finish transmission.
      wait ( (~can_testbench.i_can_top.i_can_bsp.error_frame) & 
             (~can_testbench.i_can_top.i_can_bsp.rx_inter   )
           );
    arbitration_lost = 0;
    
    send_bit(0);                        // SOF
    previous_bit = 0;

    fork 

    begin
      for (cnt=0; cnt<=total_bits; cnt=cnt+1)
        begin
          if (stuff_cnt == 5)
            begin
              stuff_cnt = 1;
              total_bits = total_bits + 1;
              stuff = 1;
              tmp = ~data[pointer+1];
              send_bit(~data[pointer+1]);
              previous_bit = ~data[pointer+1];
            end
          else
            begin
              if (data[pointer] == previous_bit)
                stuff_cnt <= stuff_cnt + 1;
              else
                stuff_cnt <= 1;
              
              stuff = 0;
              tmp = data[pointer];
              send_bit(data[pointer]);
              previous_bit = data[pointer];
              pointer = pointer - 1;
            end
          if (arbitration_lost)
            cnt=total_bits+1;         // Exit the for loop
        end

        // Nothing send after the data (just recessive bit)
        repeat (13) send_bit(1);         // CRC delimiter + ack + ack delimiter + EOF + intermission= 1 + 1 + 1 + 7 + 3
    end

    begin
      while (mode ? (cnt<32) : (cnt<12))
        begin
          #1 wait (can_testbench.i_can_top.sample_point);
          if (mode)
            begin
              if (cnt<32 & tmp & (~rx_and_tx))
                begin
                  arbitration_lost = 1;
                  rx = 1;       // Only recessive is send from now on.
                end
            end
          else
            begin
              if (cnt<12 & tmp & (~rx_and_tx))
                begin
                  arbitration_lost = 1;
                  rx = 1;       // Only recessive is send from now on.
                end
            end
        end
    end

    join

  end
endtask



// State machine monitor (btl)
always @ (posedge clk)
begin
  if(can_testbench.i_can_top.i_can_btl.go_sync & can_testbench.i_can_top.i_can_btl.go_seg1 | can_testbench.i_can_top.i_can_btl.go_sync & can_testbench.i_can_top.i_can_btl.go_seg2 | 
     can_testbench.i_can_top.i_can_btl.go_seg1 & can_testbench.i_can_top.i_can_btl.go_seg2)
    begin
      $display("(%0t) ERROR multiple go_sync, go_seg1 or go_seg2 occurance\n\n", $time);
      #1000;
      $stop;
    end

  if(can_testbench.i_can_top.i_can_btl.sync & can_testbench.i_can_top.i_can_btl.seg1 | can_testbench.i_can_top.i_can_btl.sync & can_testbench.i_can_top.i_can_btl.seg2 | 
     can_testbench.i_can_top.i_can_btl.seg1 & can_testbench.i_can_top.i_can_btl.seg2)
    begin
      $display("(%0t) ERROR multiple sync, seg1 or seg2 occurance\n\n", $time);
      #1000;
      $stop;
    end
end

/* stuff_error monitor (bsp)
always @ (posedge clk)
begin
  if(can_testbench.i_can_top.i_can_bsp.stuff_error)
    begin
      $display("\n\n(%0t) Stuff error occured in can_bsp.v file\n\n", $time);
      $stop;                                      After everything is finished add another condition (something like & (~idle)) and enable stop
    end
end
*/

//
// CRC monitor (used until proper CRC generation is used in testbench
always @ (posedge clk)
begin
  if (can_testbench.i_can_top.i_can_bsp.rx_ack       &
      can_testbench.i_can_top.i_can_bsp.sample_point & 
      can_testbench.i_can_top.i_can_bsp.crc_err
     )
    $display("*E (%0t) ERROR: CRC error (Calculated crc = 0x%0x, crc_in = 0x%0x)", $time, can_testbench.i_can_top.i_can_bsp.calculated_crc, can_testbench.i_can_top.i_can_bsp.crc_in);
end





/*
// overrun monitor
always @ (posedge clk)
begin
  if (can_testbench.i_can_top.i_can_bsp.i_can_fifo.wr & can_testbench.i_can_top.i_can_bsp.i_can_fifo.fifo_full)
    $display("(%0t)overrun", $time);
end
*/


// form error monitor
always @ (posedge clk)
begin
  if (can_testbench.i_can_top.i_can_bsp.form_err)
    $display("*E (%0t) ERROR: form_error", $time);
end



// acknowledge error monitor
always @ (posedge clk)
begin
  if (can_testbench.i_can_top.i_can_bsp.ack_err)
    $display("*E (%0t) ERROR: acknowledge_error", $time);
end

/*
// bit error monitor
always @ (posedge clk)
begin
  if (can_testbench.i_can_top.i_can_bsp.bit_err)
    $display("*E (%0t) ERROR: bit_error", $time);
end
*/

endmodule

?? 快捷鍵說明

復(fù)制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
欧洲一区二区三区在线| 狠狠色狠狠色综合日日91app| 91美女在线视频| 日韩毛片在线免费观看| 丁香激情综合五月| 亚洲日韩欧美一区二区在线| 欧美在线观看一区| 奇米色一区二区| 欧美精品一区二区精品网| 国模娜娜一区二区三区| 国产目拍亚洲精品99久久精品| 成人精品亚洲人成在线| 一区二区三区成人| 日韩一级二级三级| 国产成人精品免费在线| 亚洲日本乱码在线观看| 欧美老女人第四色| 国产乱妇无码大片在线观看| 亚洲三级小视频| 91麻豆精品国产91久久久| 国产综合色精品一区二区三区| 国产精品久久久久精k8| 欧美日韩在线直播| 国产精品99久久久久久久女警| 亚洲精品视频免费看| 日韩欧美国产一区在线观看| 99精品欧美一区| 日日夜夜精品视频免费| 国产日韩欧美不卡在线| 欧美精品久久一区二区三区| 国产精品亚洲一区二区三区在线| 亚洲欧美韩国综合色| 精品欧美一区二区在线观看| 91蝌蚪国产九色| 久国产精品韩国三级视频| 亚洲精品v日韩精品| 26uuu成人网一区二区三区| 色94色欧美sute亚洲13| 国产丶欧美丶日本不卡视频| 午夜日韩在线电影| 1区2区3区国产精品| 精品国产99国产精品| 欧美在线你懂得| 国产精品一区二区在线播放| 爽好多水快深点欧美视频| 中文字幕一区三区| 26uuu国产电影一区二区| 欧美欧美欧美欧美首页| 91美女视频网站| 国产98色在线|日韩| 日韩av一区二区在线影视| 最新热久久免费视频| 久久久91精品国产一区二区精品 | 国产精品国产自产拍在线| 欧美一级高清片| 欧美天堂亚洲电影院在线播放| 国产成人av一区二区| 美国十次了思思久久精品导航| 亚洲午夜在线视频| 国产精品国产三级国产aⅴ原创| 久久久亚洲欧洲日产国码αv| 欧美电影一区二区| 欧美综合色免费| 色噜噜偷拍精品综合在线| 成人午夜av影视| 国产成人精品三级| 国产一区二区三区黄视频| 美美哒免费高清在线观看视频一区二区 | 日韩国产欧美在线播放| 夜夜精品视频一区二区| 亚洲三级电影网站| 亚洲视频一区在线观看| 国产精品网站在线观看| 国产精品青草综合久久久久99| 国产欧美一区二区三区在线看蜜臀 | 九九视频精品免费| 蜜桃91丨九色丨蝌蚪91桃色| 美腿丝袜一区二区三区| 美国十次了思思久久精品导航| 免费人成黄页网站在线一区二区| 免费成人结看片| 美女高潮久久久| 国精产品一区一区三区mba桃花 | 欧美成人伊人久久综合网| 欧美一二三区在线| 欧美不卡一区二区三区四区| 久久亚洲春色中文字幕久久久| 国产日韩欧美电影| 国产精品高清亚洲| 一区二区在线电影| 伊人夜夜躁av伊人久久| 午夜精品福利久久久| 捆绑紧缚一区二区三区视频| 国产在线视视频有精品| 丰满白嫩尤物一区二区| 一本久久精品一区二区| 欧美二区在线观看| 久久伊99综合婷婷久久伊| 欧美激情一区二区在线| 亚洲精品成人a在线观看| 香蕉成人伊视频在线观看| 九九视频精品免费| 不卡视频在线看| 欧美三级在线看| 精品盗摄一区二区三区| 国产农村妇女精品| 亚洲国产精品欧美一二99| 久久成人精品无人区| 97久久精品人人做人人爽| 911国产精品| 欧美激情一区二区三区不卡| 一区二区三区美女| 久久国产麻豆精品| 97精品国产露脸对白| 欧美一区二区三区在线观看| 国产精品久久一卡二卡| 午夜影院久久久| 国产91高潮流白浆在线麻豆| 欧美日韩一区二区不卡| 国产午夜精品在线观看| 亚洲1区2区3区4区| 国产另类ts人妖一区二区| 欧美自拍偷拍一区| 久久一夜天堂av一区二区三区| 一片黄亚洲嫩模| 国模少妇一区二区三区| 欧美日韩一区高清| 国产精品天天看| 久久99精品视频| 欧美色倩网站大全免费| 国产精品免费网站在线观看| 日本欧美一区二区| 97久久精品人人做人人爽| 久久亚区不卡日本| 午夜欧美在线一二页| 成人aa视频在线观看| 精品国产一区二区三区忘忧草| 亚洲国产精品一区二区久久恐怖片| 丰满白嫩尤物一区二区| 欧美va日韩va| 日本亚洲免费观看| 欧美无人高清视频在线观看| 国产精品麻豆视频| 国产美女视频一区| 欧美成人精精品一区二区频| 亚洲一区二区在线视频| av午夜精品一区二区三区| 2019国产精品| 久久精品国产精品亚洲精品| 8x8x8国产精品| 亚洲成人在线观看视频| 91国产免费观看| 亚洲精品中文在线| 91论坛在线播放| 亚洲视频在线一区二区| 成人一级片网址| 国产精品无遮挡| 粉嫩绯色av一区二区在线观看| 久久久久国产精品人| 精品一区二区久久| www精品美女久久久tv| 麻豆国产精品官网| 欧美一区二区三区免费大片| 亚洲va欧美va人人爽| 欧美日本一区二区三区四区| 亚洲成人在线观看视频| 欧美日韩一区视频| 视频一区二区三区中文字幕| 在线播放91灌醉迷j高跟美女| 亚洲成人1区2区| 欧美一级日韩不卡播放免费| 麻豆精品视频在线观看视频| 日韩免费视频线观看| 久久精品国产成人一区二区三区| 精品少妇一区二区三区视频免付费 | www精品美女久久久tv| 激情丁香综合五月| 久久久777精品电影网影网| 国产91色综合久久免费分享| 国产精品乱码久久久久久| 9色porny自拍视频一区二区| 一区二区三区精品视频| 欧美吞精做爰啪啪高潮| 日韩电影一区二区三区四区| 欧美不卡123| 成人天堂资源www在线| 国产精品视频九色porn| 99久久综合精品| 亚洲国产三级在线| 日韩欧美国产1| 春色校园综合激情亚洲| 亚洲精品v日韩精品| 91精品一区二区三区在线观看| 国产综合色在线| 亚洲日本丝袜连裤袜办公室| 91精品国产91热久久久做人人| 国产精品一区二区无线| 亚洲男人天堂一区| 日韩欧美综合一区| jlzzjlzz欧美大全|