📄 pci_exp_usrapp_com.v
字号:
//-- 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 + -