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

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

?? can_testbench.v

?? 基于FPGA的can 總線設(shè)計
?? 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一区二区三区免费野_久草精品视频
美女mm1313爽爽久久久蜜臀| 欧美日韩第一区日日骚| 91亚洲精华国产精华精华液| 欧美日韩视频在线一区二区| 精品日韩在线观看| 亚洲大片精品永久免费| 国产成人免费视频| 欧美成人官网二区| 日韩不卡一区二区三区| 色老综合老女人久久久| 久久久久亚洲蜜桃| 蜜桃在线一区二区三区| 在线看日韩精品电影| 亚洲视频电影在线| 成人午夜av影视| 久久久久国产成人精品亚洲午夜| 亚洲午夜免费福利视频| 91丨九色丨尤物| 中文字幕高清不卡| 国产精品一区二区在线观看不卡| 欧美电视剧在线看免费| 日韩精品一二区| 欧美日韩三级一区二区| 亚洲在线中文字幕| 欧美在线影院一区二区| 亚洲人妖av一区二区| 不卡视频在线看| 欧美精彩视频一区二区三区| 国产一二三精品| 精品福利在线导航| 麻豆成人综合网| 精品欧美久久久| 国产剧情av麻豆香蕉精品| 久久久久久97三级| 国产成人av一区二区三区在线 | 激情小说亚洲一区| 欧美一级久久久久久久大片| 婷婷六月综合亚洲| 在线电影院国产精品| 午夜久久久久久| 欧美一区二区视频在线观看2020| 午夜激情综合网| 日韩免费高清视频| 韩国av一区二区三区四区| 欧美va亚洲va在线观看蝴蝶网| 精品一区二区免费视频| 久久美女艺术照精彩视频福利播放| 国模套图日韩精品一区二区| 欧美激情在线免费观看| 色综合色狠狠综合色| 亚洲国产一区二区a毛片| 宅男在线国产精品| 国产精品一级片在线观看| 中文字幕在线观看不卡| 欧美三级日韩三级| 国产在线精品一区二区夜色| 欧美极品少妇xxxxⅹ高跟鞋 | 成人不卡免费av| 依依成人综合视频| 欧美一级黄色大片| 东方欧美亚洲色图在线| 一区二区三区美女视频| 欧美一级在线观看| 成人免费视频网站在线观看| 亚洲国产美国国产综合一区二区| 制服丝袜av成人在线看| 成人h版在线观看| 天堂成人免费av电影一区| 国产日韩影视精品| 欧美午夜影院一区| 国产麻豆成人精品| 亚洲午夜视频在线| 亚洲国产精品99久久久久久久久| 精品视频在线视频| 国产mv日韩mv欧美| 美国三级日本三级久久99 | 日韩电影免费在线观看网站| 久久久久久久久伊人| 欧美日韩亚洲综合一区二区三区| 国产一区欧美二区| 亚洲chinese男男1069| 亚洲国产精华液网站w| 日韩欧美区一区二| 欧美视频三区在线播放| www.日本不卡| 另类综合日韩欧美亚洲| 亚洲一区二区在线观看视频| 中文成人av在线| 精品久久人人做人人爱| 3d动漫精品啪啪1区2区免费 | 亚洲欧美色图小说| 国产丝袜美腿一区二区三区| 666欧美在线视频| 色妹子一区二区| 国产成人超碰人人澡人人澡| 精品一区二区三区蜜桃| 天天色综合天天| 一区二区三区欧美亚洲| 国产精品午夜久久| 欧美国产精品一区二区三区| 精品少妇一区二区三区视频免付费 | 在线欧美日韩国产| 99精品欧美一区| 成人精品在线视频观看| 国产成人免费视频网站| 激情都市一区二区| 激情六月婷婷综合| 国产综合久久久久影院| 蜜臀av性久久久久蜜臀aⅴ| 丝袜亚洲另类欧美| 亚洲电影在线播放| 亚洲一区二区视频在线| 亚洲综合色婷婷| 亚洲一区视频在线观看视频| 亚洲尤物在线视频观看| 亚洲综合另类小说| 亚洲国产精品精华液网站| 婷婷国产v国产偷v亚洲高清| 午夜伊人狠狠久久| 天天射综合影视| 麻豆精品视频在线观看视频| 日韩精品电影在线| 久久超级碰视频| 国产成人免费在线观看不卡| 懂色av中文一区二区三区| 成人av片在线观看| 欧美视频在线一区二区三区| 欧美巨大另类极品videosbest | 蜜桃视频在线一区| 国产一区欧美二区| 成人激情免费网站| 色婷婷香蕉在线一区二区| 欧美日韩国产高清一区| 欧美一级日韩一级| 国产欧美1区2区3区| 亚洲色图欧美激情| 午夜精品一区二区三区三上悠亚 | 国产成人亚洲综合a∨婷婷| 成人黄色小视频| 在线看国产一区二区| 91精品国产综合久久蜜臀| 久久久久国色av免费看影院| 中文字幕一区二区三区蜜月 | 国模一区二区三区白浆| 成人av片在线观看| 7777精品伊人久久久大香线蕉超级流畅 | 欧美妇女性影城| 久久久www成人免费毛片麻豆| 中文字幕中文字幕一区二区| 丝袜亚洲另类欧美综合| 国产精品一区专区| 欧美色老头old∨ideo| 欧美成人精品1314www| 亚洲美女精品一区| 久久成人18免费观看| 91污片在线观看| 精品日韩一区二区三区| 亚洲摸摸操操av| 国内成+人亚洲+欧美+综合在线| 色综合久久中文综合久久牛| 精品国产乱码久久久久久老虎| 亚洲免费资源在线播放| 国产米奇在线777精品观看| 欧美私模裸体表演在线观看| 久久午夜色播影院免费高清| 亚洲一区二区三区四区的| 成人一区在线观看| 精品国产亚洲在线| 无码av免费一区二区三区试看| 成人av网站在线观看免费| 亚洲精品在线一区二区| 亚洲国产综合在线| 成人激情小说网站| 久久久综合精品| 美日韩一区二区| 欧美三级三级三级爽爽爽| 成人欧美一区二区三区视频网页| 狠狠色狠狠色综合系列| 91精品国产综合久久国产大片| 亚洲精品免费一二三区| 成人一道本在线| 久久综合狠狠综合久久激情| 日韩电影在线一区二区三区| 91成人在线观看喷潮| 亚洲男人电影天堂| jlzzjlzz亚洲日本少妇| 日本一区二区不卡视频| 国产精品99久久久久久有的能看| 欧美一区二区视频免费观看| 亚洲一区二区美女| 色一情一乱一乱一91av| 国产精品麻豆久久久| 成人看片黄a免费看在线| 国产无人区一区二区三区| 国内精品自线一区二区三区视频| 日韩欧美卡一卡二| 久久超碰97人人做人人爱| 精品剧情在线观看| 国产精品中文字幕日韩精品| 久久久99精品免费观看不卡|