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

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? can_testbench.v

?? 基于FPGA的can 總線設計
?? V
?? 第 1 頁 / 共 4 頁
字號:

// synopsys translate_off
`include "timescale.v"
// synopsys translate_on
`include "can_defines.v"
`include "can_testbench_defines.v"

module can_testbench();



parameter Tp = 1;
parameter BRP = 2*(`CAN_TIMING0_BRP + 1);


`ifdef CAN_WISHBONE_IF
  reg         wb_clk_i;
  reg         wb_rst_i;
  reg   [7:0] wb_dat_i;
  wire  [7:0] wb_dat_o;
  reg         wb_cyc_i;
  reg         wb_stb_i;
  reg         wb_we_i;
  reg   [7:0] wb_adr_i;
  wire        wb_ack_o;
  reg         wb_free;
`else
  reg         rst_i;
  reg         ale_i;
  reg         rd_i;
  reg         wr_i;
  wire  [7:0] port_0;
  wire  [7:0] port_0_i;
  reg   [7:0] port_0_o;
  reg         port_0_en;
  reg         port_free;
`endif


reg         cs_can;
reg         clk;
reg         rx;
wire        tx;
wire        irq;
wire        clkout;

wire        rx_and_tx;

integer     start_tb;
reg   [7:0] tmp_data;
reg         delayed_tx;
reg         tx_bypassed;
reg         extended_mode;



// Instantiate can_top module
can_top i_can_top
( 
`ifdef CAN_WISHBONE_IF
  .wb_clk_i(wb_clk_i),
  .wb_rst_i(wb_rst_i),
  .wb_dat_i(wb_dat_i),
  .wb_dat_o(wb_dat_o),
  .wb_cyc_i(wb_cyc_i),
  .wb_stb_i(wb_stb_i),
  .wb_we_i(wb_we_i),
  .wb_adr_i(wb_adr_i),
  .wb_ack_o(wb_ack_o),
`else
  .rst_i(rst_i),
  .ale_i(ale_i),
  .rd_i(rd_i),
  .wr_i(wr_i),
  .port_0_io(port_0),
`endif
  .cs_can_i(cs_can),
  .clk_i(clk),
  .rx_i(rx_and_tx),
  .tx_o(tx),
  .irq_on(irq),
  .clkout_o(clkout)
);


`ifdef CAN_WISHBONE_IF
  // Generate wishbone clock signal 10 MHz
  initial
  begin
    wb_clk_i=0;
    forever #50 wb_clk_i = ~wb_clk_i;
  end
`endif


`ifdef CAN_WISHBONE_IF
`else
  assign port_0_i = port_0;
  assign port_0 = port_0_en? port_0_o : 8'hz;
`endif


// Generate clock signal 24 MHz
initial
begin
  clk=0;
  forever #21 clk = ~clk;
end


initial
begin
  start_tb = 0;
  cs_can = 0;
  rx = 1;
  extended_mode = 0;
  tx_bypassed = 0;

  `ifdef CAN_WISHBONE_IF
    wb_dat_i = 'hz;
    wb_cyc_i = 0;
    wb_stb_i = 0;
    wb_we_i = 'hz;
    wb_adr_i = 'hz;
    wb_free = 1;
    wb_rst_i = 1;
    #200 wb_rst_i = 0;
    #200 start_tb = 1;
  `else
    rst_i = 1'b0;
    ale_i = 1'b0;
    rd_i  = 1'b0;
    wr_i  = 1'b0;
    port_0_o = 8'h0;
    port_0_en = 0;
    port_free = 1;
    rst_i = 1;
    #200 rst_i = 0;
    #200 start_tb = 1;
  `endif
end




// Generating delayed tx signal (CAN transciever delay)
always
begin
  wait (tx);
  repeat (4*BRP) @ (posedge clk);   // 4 time quants delay
  #1 delayed_tx = tx;
  wait (~tx);
  repeat (4*BRP) @ (posedge clk);   // 4 time quants delay
  #1 delayed_tx = tx;
end

//assign rx_and_tx = rx & delayed_tx;   FIX ME !!!
assign rx_and_tx = rx & (delayed_tx | tx_bypassed);   // When this signal is on, tx is not looped back to the rx.


// Main testbench
initial
begin
  wait(start_tb);

  // Set bus timing register 0
  write_register(8'd6, {`CAN_TIMING0_SJW, `CAN_TIMING0_BRP});

  // Set bus timing register 1
  write_register(8'd7, {`CAN_TIMING1_SAM, `CAN_TIMING1_TSEG2, `CAN_TIMING1_TSEG1});


  // Set Clock Divider register
  extended_mode = 1'b0;
  write_register(8'd31, {extended_mode, 3'h0, 1'b0, 3'h0});   // Setting the normal mode (not extended)


  // Set Acceptance Code and Acceptance Mask registers (their address differs for basic and extended mode
/*
  // Set Acceptance Code and Acceptance Mask registers
  write_register(8'd16, 8'ha6); // acceptance code 0
  write_register(8'd17, 8'hb0); // acceptance code 1
  write_register(8'd18, 8'h12); // acceptance code 2
  write_register(8'd19, 8'h30); // acceptance code 3
  write_register(8'd20, 8'h0); // acceptance mask 0
  write_register(8'd21, 8'h0); // acceptance mask 1
  write_register(8'd22, 8'h00); // acceptance mask 2
  write_register(8'd23, 8'h00); // acceptance mask 3
*/

  // Set Acceptance Code and Acceptance Mask registers
  write_register(8'd4, 8'he8); // acceptance code
  write_register(8'd5, 8'h0f); // acceptance mask
  
  #10;
  repeat (1000) @ (posedge clk);
  
  // Switch-off reset mode
  write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});

  repeat (BRP) @ (posedge clk);   // At least BRP clocks needed before bus goes to dominant level. Otherwise 1 quant difference is possible
                                  // This difference is resynchronized later.

  // After exiting the reset mode sending bus free
  repeat (11) send_bit(1);

//  test_synchronization;       // test currently switched off
//  test_empty_fifo_ext;        // test currently switched off
//  test_full_fifo_ext;         // test currently switched off
//  send_frame_ext;             // test currently switched off
//  test_empty_fifo;            // test currently switched off
  test_full_fifo;             // test currently switched on
//  send_frame;                 // test currently switched off
//  bus_off_test;               // test currently switched off
//  forced_bus_off;             // test currently switched off
//  send_frame_basic;           // test currently switched off
//  send_frame_extended;        // test currently switched off
//  self_reception_request;       // test currently switched off
//  manual_frame_basic;         // test currently switched off
//  manual_frame_ext;           // test currently switched off

  $display("CAN Testbench finished !");
  $stop;
end


task forced_bus_off;    // Forcing bus-off by writinf to tx_err_cnt register
  begin

    // Switch-on reset mode
    write_register(8'd0, {7'h0, `CAN_MODE_RESET});

    // Set Clock Divider register
    write_register(8'd31, {1'b1, 7'h0});    // Setting the extended mode (not normal)

    // Write 255 to tx_err_cnt register - Forcing bus-off
    write_register(8'd15, 255);

    // Switch-off reset mode
    write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});

//    #1000000;
    #2500000;


    // Switch-on reset mode
    write_register(8'd0, {7'h0, `CAN_MODE_RESET});

    // Write 245 to tx_err_cnt register
    write_register(8'd15, 245);

    // Switch-off reset mode
    write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});

    #1000000;


  end
endtask   // forced_bus_off


task manual_frame_basic;    // Testbench sends a basic format frame
  begin


    // Switch-on reset mode
    write_register(8'd0, {7'h0, (`CAN_MODE_RESET)});
  
    // Set Acceptance Code and Acceptance Mask registers
    write_register(8'd4, 8'h28); // acceptance code
    write_register(8'd5, 8'hff); // acceptance mask
    
    repeat (100) @ (posedge clk);
    
    // Switch-off reset mode
    write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});

    // After exiting the reset mode sending bus free
    repeat (11) send_bit(1);


    write_register(8'd10, 8'h55); // Writing ID[10:3] = 0x55
    write_register(8'd11, 8'h57); // Writing ID[2:0] = 0x2, rtr = 1, length = 7
    write_register(8'd12, 8'h00); // data byte 1
    write_register(8'd13, 8'h00); // data byte 2
    write_register(8'd14, 8'h00); // data byte 3
    write_register(8'd15, 8'h00); // data byte 4
    write_register(8'd16, 8'h00); // data byte 5
    write_register(8'd17, 8'h00); // data byte 6
    write_register(8'd18, 8'h00); // data byte 7
    write_register(8'd19, 8'h00); // data byte 8

    tx_bypassed = 1;    // When this signal is on, tx is not looped back to the rx.
    
    fork
      begin
//        tx_request_command;
        self_reception_request_command;
      end

      begin
        #2200;


        repeat (1)
        begin
          send_bit(0);  // SOF
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // RTR
          send_bit(0);  // IDE
          send_bit(0);  // r0
          send_bit(0);  // DLC
          send_bit(1);  // DLC
          send_bit(1);  // DLC
          send_bit(1);  // DLC
          send_bit(1);  // CRC
          send_bit(1);  // CRC
          send_bit(0);  // CRC stuff
          send_bit(0);  // CRC 6
          send_bit(0);  // CRC
          send_bit(0);  // CRC
          send_bit(0);  // CRC
          send_bit(1);  // CRC  stuff
          send_bit(0);  // CRC 0
          send_bit(0);  // CRC
          send_bit(1);  // CRC
          send_bit(0);  // CRC
          send_bit(1);  // CRC 5
          send_bit(1);  // CRC
          send_bit(0);  // CRC
          send_bit(1);  // CRC
          send_bit(1);  // CRC b
          send_bit(1);  // CRC DELIM
          send_bit(0);  // ACK
          send_bit(1);  // ACK DELIM
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // EOF
          send_bit(1);  // INTER
          send_bit(1);  // INTER
          send_bit(1);  // INTER
        end // repeat



      end
    
    
    join



    read_receive_buffer;
    release_rx_buffer_command;

    read_receive_buffer;
    release_rx_buffer_command;
    read_receive_buffer;

    #4000000;

  end
endtask   //  manual_frame_basic



task manual_frame_ext;    // Testbench sends an extended format frame
  begin


    // Switch-on reset mode
    write_register(8'd0, {7'h0, (`CAN_MODE_RESET)});

    // Set Clock Divider register
    extended_mode = 1'b1;
    write_register(8'd31, {extended_mode, 7'h0});    // Setting the extended mode
  
    // Set Acceptance Code and Acceptance Mask registers
    write_register(8'd16, 8'ha6); // acceptance code 0
    write_register(8'd17, 8'h00); // acceptance code 1
    write_register(8'd18, 8'h5a); // acceptance code 2
    write_register(8'd19, 8'hac); // acceptance code 3
    write_register(8'd20, 8'h00); // acceptance mask 0
    write_register(8'd21, 8'h00); // acceptance mask 1
    write_register(8'd22, 8'h00); // acceptance mask 2
    write_register(8'd23, 8'h00); // acceptance mask 3
    
    repeat (100) @ (posedge clk);
    
    // Switch-off reset mode
    write_register(8'd0, {7'h0, ~(`CAN_MODE_RESET)});

    // After exiting the reset mode sending bus free
    repeat (11) send_bit(1);


    // Extended frame format
    // Writing TX frame information + identifier + data
    write_register(8'd16, 8'hc5);   // Frame format = 1, Remote transmision request = 1, DLC = 5
    write_register(8'd17, 8'ha6);   // ID[28:21] = a6
    write_register(8'd18, 8'h00);   // ID[20:13] = 00
    write_register(8'd19, 8'h5a);   // ID[12:5]  = 5a
    write_register(8'd20, 8'ha8);   // ID[4:0]   = 15
    // write_register(8'd21, 8'h78); RTR does not send any data
    // write_register(8'd22, 8'h9a);
    // write_register(8'd23, 8'hbc);
    // write_register(8'd24, 8'hde);
    // write_register(8'd25, 8'hf0);
    // write_register(8'd26, 8'h0f);
    // write_register(8'd27, 8'hed);
    // write_register(8'd28, 8'hcb);


    // Enabling IRQ's (extended mode)
    write_register(8'd4, 8'hff);

    // tx_bypassed = 1;    // When this signal is on, tx is not looped back to the rx.
    
    fork
      begin
        tx_request_command;
//        self_reception_request_command;
      end

      begin
        #2400;

        repeat (1)
        begin
          send_bit(0);  // SOF
          send_bit(1);  // ID
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID a
          send_bit(0);  // ID
          send_bit(1);  // ID
          send_bit(1);  // ID
          send_bit(0);  // ID 6
          send_bit(0);  // ID
          send_bit(0);  // ID
          send_bit(0);  // ID 
          send_bit(1);  // RTR
          send_bit(1);  // IDE
          send_bit(0);  // ID 0
          send_bit(0);  // ID 
          send_bit(0);  // ID 
          send_bit(0);  // ID 
          send_bit(0);  // ID 0
          send_bit(1);  // ID stuff
          send_bit(0);  // ID 
          send_bit(1);  // ID 
          send_bit(0);  // ID 
          send_bit(1);  // ID 6
          send_bit(1);  // ID 
          send_bit(0);  // ID 
          send_bit(1);  // ID 
          send_bit(0);  // ID a
          send_bit(1);  // ID 1

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
亚洲高清视频在线| 懂色av一区二区三区免费看| 日本韩国一区二区三区视频| 亚洲欧洲精品天堂一级| jvid福利写真一区二区三区| 中文字幕一区二区三区av| 91丨九色丨蝌蚪富婆spa| 一区二区免费在线| 欧美高清你懂得| 韩国三级中文字幕hd久久精品| 久久精品夜色噜噜亚洲a∨| 国产伦精品一区二区三区免费迷| 国产亚洲一二三区| 欧美私模裸体表演在线观看| 一片黄亚洲嫩模| 91精品免费在线| 国产精品香蕉一区二区三区| 亚洲图片你懂的| 5566中文字幕一区二区电影| 久久99久国产精品黄毛片色诱| 国产精品色噜噜| 欧美日韩一二三| 国产精品一级在线| 亚洲国产综合人成综合网站| 精品少妇一区二区三区日产乱码| 成人小视频在线| 亚洲444eee在线观看| 国产性做久久久久久| 在线欧美日韩国产| 国内成人免费视频| 亚洲一区二区三区三| 久久亚洲综合色一区二区三区| 一本大道综合伊人精品热热| 久久91精品国产91久久小草| 亚洲欧美一区二区久久| 精品久久人人做人人爰| 在线一区二区三区四区| 国产高清一区日本| 日韩影院免费视频| 亚洲欧洲一区二区在线播放| 日韩免费一区二区三区在线播放| 91影院在线观看| 国产精品一区二区不卡| 视频一区中文字幕国产| 亚洲日本护士毛茸茸| 亚洲精品一区二区三区在线观看| 在线观看日韩高清av| 国产成人精品免费网站| 美国欧美日韩国产在线播放| 亚洲一区二区在线免费观看视频 | 99re这里只有精品视频首页| 亚洲成人动漫在线观看| 中文一区在线播放| 亚洲精品一区二区三区蜜桃下载| 精品视频一区二区不卡| 成人激情免费网站| 国产精品一区二区黑丝| 久久精品国产第一区二区三区| 一区二区在线观看视频| 国产精品美女久久久久久久久久久| 欧美成人a视频| 欧美一区二区三区日韩| 欧美午夜电影网| 欧美在线免费播放| 一本一道久久a久久精品| 成人免费不卡视频| 国产·精品毛片| 国产91精品欧美| 国产成人av一区| 国产乱妇无码大片在线观看| 久久99精品国产麻豆婷婷洗澡| 青青草97国产精品免费观看| 亚洲超碰97人人做人人爱| 亚洲国产精品久久久久秋霞影院| 亚洲精品五月天| 一级做a爱片久久| 一区二区三区欧美视频| 一区二区三区中文免费| 亚洲一级片在线观看| 午夜不卡在线视频| 青青草一区二区三区| 美女网站色91| 国产乱色国产精品免费视频| 国产美女在线精品| 成人高清视频免费观看| 色综合天天综合网天天看片| 91黄色在线观看| 欧美日韩黄色影视| 欧美大白屁股肥臀xxxxxx| 精品久久久久久久人人人人传媒 | 91精品在线免费| 日韩精品一区二区三区四区| 精品剧情在线观看| 欧美激情综合五月色丁香 | 欧美老女人第四色| 日韩色视频在线观看| 精品99一区二区| 国产精品婷婷午夜在线观看| 亚洲视频在线一区| 视频在线观看91| 韩国午夜理伦三级不卡影院| 不卡在线视频中文字幕| 在线亚洲欧美专区二区| 欧美一级日韩一级| 日本一区二区三区国色天香| 18欧美乱大交hd1984| 亚洲国产色一区| 国产一区二区h| 色噜噜偷拍精品综合在线| 日韩三级免费观看| 国产精品久久久久久久第一福利| 玉米视频成人免费看| 久久99精品国产.久久久久| 成人夜色视频网站在线观看| 欧美视频一区二| 久久伊99综合婷婷久久伊| 亚洲精品亚洲人成人网| 韩国理伦片一区二区三区在线播放 | 精品久久久久香蕉网| 亚洲欧美另类图片小说| 久久99国产精品久久| 91色视频在线| 26uuu色噜噜精品一区二区| 亚洲免费观看高清| 国产主播一区二区三区| 欧美一区二区三区婷婷月色| 欧美国产乱子伦| 日本亚洲视频在线| 一本色道久久综合狠狠躁的推荐| 欧美成人伊人久久综合网| 亚洲色图欧美偷拍| 国产盗摄精品一区二区三区在线| 精品视频在线免费观看| 国产精品入口麻豆原神| 久久精品久久精品| 欧美美女黄视频| 亚洲美女区一区| 国产精品自产自拍| 欧美一区二区三区日韩视频| 一区二区三区欧美日韩| 不卡的av中国片| 久久久91精品国产一区二区精品| 天堂va蜜桃一区二区三区漫画版| 一本大道久久a久久精二百| 国产日韩欧美一区二区三区综合| 日韩二区三区四区| 欧美日韩高清一区二区三区| 亚洲视频网在线直播| 懂色av噜噜一区二区三区av| 日韩欧美国产一区二区在线播放 | 91在线porny国产在线看| 久久久一区二区三区捆绑**| 麻豆精品一区二区三区| 日韩一区二区在线观看视频播放| 一二三区精品视频| 一本色道久久综合亚洲91| 成人免费一区二区三区在线观看| 国产高清亚洲一区| 久久久久久久久久久久久久久99| 美女视频黄a大片欧美| 欧美理论片在线| 日韩极品在线观看| 欧美美女激情18p| 日韩电影免费在线看| 91精品国产91热久久久做人人| 偷窥国产亚洲免费视频| 欧美另类videos死尸| 日韩经典中文字幕一区| 欧美一区二区在线看| 蜜桃视频一区二区三区在线观看| 欧美一区二区三区免费视频| 日本va欧美va精品发布| 91精品国产美女浴室洗澡无遮挡| 五月开心婷婷久久| 日韩欧美电影一区| 国产美女主播视频一区| 中文字幕二三区不卡| 99精品一区二区三区| 亚洲欧美欧美一区二区三区| 欧美婷婷六月丁香综合色| 亚洲第一二三四区| 欧美疯狂性受xxxxx喷水图片| 日韩黄色免费电影| 亚洲国产精品传媒在线观看| av一区二区三区在线| 亚洲美女屁股眼交3| 欧美日韩国产片| 久久99久久99| 国产精品色哟哟| 欧美无砖专区一中文字| 久久不见久久见中文字幕免费| 欧美国产成人在线| 欧美在线一区二区三区| 麻豆精品国产91久久久久久| 国产亚洲一区字幕| 91久久精品一区二区二区| 午夜av一区二区| 久久精品一区二区| 欧美亚洲高清一区| 国产一区三区三区|