⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 pci_exp_usrapp_com.v

📁 已经在xilinx的ML555开发板上实现的PCIEx4的设计
💻 V
📖 第 1 页 / 共 2 页
字号:
//-- Copyright(C) 2005 by Xilinx, Inc. All rights reserved.//-- This text contains proprietary, confidential//-- information of Xilinx, Inc., is distributed//-- under license from Xilinx, Inc., and may be used,//-- copied and/or disclosed only pursuant to the terms//-- of a valid license agreement with Xilinx, Inc. This copyright//-- notice must be retained as part of this text at all times.`include "../board_common.v"module pci_exp_usrapp_com ();/* Local variables */reg   [31:0]           rx_file_ptr;reg   [7:0]            frame_store_rx[5119:0];integer                frame_store_rx_idx;reg   [31:0]           tx_file_ptr;reg   [7:0]            frame_store_tx[5119:0];integer                frame_store_tx_idx;reg   [31:0]           log_file_ptr;integer                _frame_store_idx;event                  rcvd_cpld, rcvd_memrd, rcvd_memwr;event                  rcvd_cpl, rcvd_memrd64, rcvd_memwr64;event                  rcvd_msg, rcvd_msgd, rcvd_cfgrd0;event                  rcvd_cfgwr0, rcvd_cfgrd1, rcvd_cfgwr1;event                  rcvd_iord, rcvd_iowr;initial begin  frame_store_rx_idx = 0;  frame_store_tx_idx = 0;  rx_file_ptr = $fopen("rx.dat");  if (!rx_file_ptr) begin    $write("ERROR: Could not open rx.dat.\n");    $finish;  end  tx_file_ptr = $fopen("tx.dat");  if (!tx_file_ptr) begin    $write("ERROR: Could not open tx.dat.\n");    $finish;  endend  /************************************************************  Task : TSK_PARSE_FRAME  Inputs : None  Outputs : None  Description : Parse frame data  *************************************************************/  task TSK_PARSE_FRAME;  input    log_file;  reg   [1:0]   fmt;  reg   [4:0]   type;  reg   [2:0]   traffic_class;  reg     td;  reg      ep;  reg  [1:0]   attr;  reg  [9:0]   length;  reg     payload;  reg  [15:0]   requester_id;  reg  [15:0]   completer_id;  reg  [7:0]   tag;  reg  [7:0]   byte_enables;  reg  [7:0]  message_code;  reg  [31:0]   address_low;  reg  [31:0]   address_high;  reg  [9:0]   register_address;  reg   [2:0]   completion_status;  reg  [31:0]  _log_file_ptr;  integer    _frame_store_idx;  begin  if (log_file == `RX_LOG)    _log_file_ptr = rx_file_ptr;  else    _log_file_ptr = tx_file_ptr;  if (log_file == `RX_LOG) begin    _frame_store_idx = frame_store_rx_idx;    frame_store_rx_idx = 0;  end else begin    _frame_store_idx = frame_store_tx_idx;    frame_store_tx_idx = 0;  end  if (log_file == `RX_LOG) begin    $display("[%t] : TSK_PARSE_FRAME on Receive", $realtime);    end  else begin    $display("[%t] : TSK_PARSE_FRAME on Transmit", $realtime);    end            TSK_DECIPHER_FRAME (fmt, type, traffic_class, td, ep, attr, length, log_file);    // decode the packets received based on fmt and type  casex({fmt, type})    `PCI_EXP_MEM_READ32 : begin      $fdisplay(_log_file_ptr, "[%t] : Memory Read-32 Frame \n", $time);      payload = 0;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);            if (log_file == `RX_LOG)        -> rcvd_memrd;    end    `PCI_EXP_IO_READ : begin      $fdisplay(_log_file_ptr, "[%t] : IO Read Frame \n", $time);      payload = 0;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      if (log_file == `RX_LOG)        -> rcvd_iord;    end    `PCI_EXP_CFG_READ0 : begin      $fdisplay(_log_file_ptr, "[%t] : Config Read Type 0 Frame \n", $time);      payload = 0;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      if (log_file == `RX_LOG)         -> rcvd_cfgrd0;    end    `PCI_EXP_COMPLETION_WO_DATA: begin      $fdisplay(_log_file_ptr, "[%t] : Completion Without Data Frame \n", $time);      payload = 0;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      if (log_file == `RX_LOG)         -> rcvd_cpl;    end    `PCI_EXP_MEM_READ64: begin      $fdisplay(_log_file_ptr, "[%t] : Memory Read-64 Frame \n", $time);      payload = 0;      TSK_4DW(fmt, type, traffic_class, td, ep, attr, length, payload,  _frame_store_idx, _log_file_ptr, log_file);      if (log_file == `RX_LOG)         -> rcvd_memrd64;    end    `PCI_EXP_MSG_NODATA: begin      $fdisplay(_log_file_ptr, "[%t] : Message With No Data Frame \n", $time);      payload = 0;      TSK_4DW(fmt, type, traffic_class, td, ep, attr, length, payload,  _frame_store_idx, _log_file_ptr, log_file);      if (log_file == `RX_LOG)         -> rcvd_msg;    end    `PCI_EXP_MEM_WRITE32: begin      $fdisplay(_log_file_ptr, "[%t] : Memory Write-32 Frame \n", $time);      payload = 1;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_memwr;    end    `PCI_EXP_IO_WRITE: begin      $fdisplay(_log_file_ptr, "[%t] : IO Write Frame \n", $time);      payload = 1;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_iowr;    end    `PCI_EXP_CFG_WRITE0: begin      $fdisplay(_log_file_ptr, "[%t] : Config Write Type 0 Frame \n", $time);      payload = 1;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_cfgwr0;    end    `PCI_EXP_COMPLETION_DATA: begin      $fdisplay(_log_file_ptr, "[%t] : Completion With Data Frame \n", $time);      payload = 1;      TSK_3DW(fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_cpld;    end    `PCI_EXP_MEM_WRITE64: begin      $fdisplay(_log_file_ptr, "[%t] : Memory Write-64 Frame \n", $time);      payload = 1;      TSK_4DW(fmt, type, traffic_class, td, ep, attr, length, payload,  _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_memwr64;    end    `PCI_EXP_MSG_DATA: begin      $fdisplay(_log_file_ptr, "[%t] : Message With Data Frame \n", $time);      payload = 1;      TSK_4DW(fmt, type, traffic_class, td, ep, attr, length, payload,  _frame_store_idx, _log_file_ptr, log_file);      $fdisplay(_log_file_ptr, "\n");      if (log_file == `RX_LOG)         -> rcvd_msgd;    end    default: begin      $fdisplay(_log_file_ptr, "[%t] : Not a valid frame \n", $time);      $display(_log_file_ptr, "[%t] : Received an invalid frame \n", $time);      $finish(2);    end  endcase  end  endtask // TSK_PARSE_FRAME  /************************************************************  Task : TSK_DECIPHER_FRAME  Inputs : None  Outputs : fmt, type, traffic_class, td, ep, attr, length  Description : Deciphers frame  *************************************************************/  task TSK_DECIPHER_FRAME;  output [1:0]   fmt;  output [4:0]   type;  output [2:0]   traffic_class;  output     td;  output     ep;  output [1:0]   attr;  output [9:0]   length;  input    txrx;  begin    fmt = (txrx ? frame_store_tx[0] : frame_store_rx[0]) >> 5;    type = txrx ? frame_store_tx[0] : frame_store_rx[0];

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -