📄 pci_exp_usrapp_com.v
字号:
traffic_class = (txrx ? frame_store_tx[1] : frame_store_rx[1]) >> 4; td = (txrx ? frame_store_tx[2] : frame_store_rx[2]) >> 7; ep = (txrx ? frame_store_tx[2] : frame_store_rx[2]) >> 6; attr = (txrx ? frame_store_tx[2] : frame_store_rx[2]) >> 4; length = (txrx ? frame_store_tx[2] : frame_store_rx[2]); length = (length << 8) | (txrx ? frame_store_tx[3] : frame_store_rx[3]); end endtask // TSK_DECIPHER_FRAME /************************************************************ Task : TSK_3DW Inputs : fmt, type, traffic_class, td, ep, attr, length, payload, _frame_store_idx Outputs : None Description : Gets variables and prints frame *************************************************************/ task TSK_3DW; input [1:0] fmt; input [4:0] type; input [2:0] traffic_class; input td; input ep; input [1:0] attr; input [9:0] length; input payload; input [31:0] _frame_store_idx; input [31:0] _log_file_ptr; input txrx; reg [15:0] requester_id; reg [7:0] tag; reg [7:0] byte_enables; reg [31:0] address_low; reg [15:0] completer_id; reg [9:0] register_address; reg [2:0] completion_status; reg [31:0] dword_data; // this will be used to recontruct bytes of data and sent to tx_app integer _i; begin $fdisplay(_log_file_ptr, "\t Traffic Class: 0x%h", traffic_class); $fdisplay(_log_file_ptr, "\t TD: %h", td); $fdisplay(_log_file_ptr, "\t EP: %h", ep); $fdisplay(_log_file_ptr, "\t Attributes: 0x%h", attr); $fdisplay(_log_file_ptr, "\t Length: 0x%h", length); casex({fmt, type}) `PCI_EXP_CFG_READ0, `PCI_EXP_CFG_WRITE0: begin requester_id = txrx ? {frame_store_tx[4], frame_store_tx[5]} : {frame_store_rx[4], frame_store_rx[5]}; tag = txrx ? frame_store_tx[6] : frame_store_rx[6]; byte_enables = txrx ? frame_store_tx[7] : frame_store_rx[7]; completer_id = {txrx ? frame_store_tx[8] : frame_store_rx[8], txrx ? frame_store_tx[9] : frame_store_rx[9]}; register_address = txrx ? frame_store_tx[10] : frame_store_rx[10]; register_address = (register_address << 8) | (txrx ? frame_store_tx[11] : frame_store_rx[11]); $fdisplay(_log_file_ptr, "\t Requester Id: 0x%h", requester_id); $fdisplay(_log_file_ptr, "\t Tag: 0x%h", tag); $fdisplay(_log_file_ptr, "\t Last and First Byte Enables: 0x%h", byte_enables); $fdisplay(_log_file_ptr, "\t Completer Id: 0x%h", completer_id); $fdisplay(_log_file_ptr, "\t Register Address: 0x%h \n", register_address); if (payload == 1) begin for (_i = 12; _i < _frame_store_idx; _i = _i + 1) begin $fdisplay(_log_file_ptr, "\t 0x%h", txrx ? frame_store_tx[_i] : frame_store_rx[_i]); end end end `PCI_EXP_COMPLETION_WO_DATA, `PCI_EXP_COMPLETION_DATA: begin completer_id = txrx ? {frame_store_tx[4], frame_store_tx[5]} : {frame_store_rx[4], frame_store_rx[5]}; completion_status = txrx ? (frame_store_tx[6] >> 5) : (frame_store_rx[6] >> 5); requester_id = txrx ? {frame_store_tx[8], frame_store_tx[9]} : {frame_store_rx[8], frame_store_rx[9]}; tag = txrx ? frame_store_tx[10] : frame_store_rx[10]; $fdisplay(_log_file_ptr, "\t Completer Id: 0x%h", completer_id); $fdisplay(_log_file_ptr, "\t Completion Status: 0x%h", completion_status); $fdisplay(_log_file_ptr, "\t Requester Id: 0x%h ", requester_id); $fdisplay(_log_file_ptr, "\t Tag: 0x%h \n", tag); if (payload == 1) begin dword_data = 32'h0000_0000; for (_i = 12; _i < _frame_store_idx; _i = _i + 1) begin $fdisplay(_log_file_ptr, "\t 0x%h", txrx ? frame_store_tx[_i] : frame_store_rx[_i]); if (!txrx) begin // if we are called from rx dword_data = dword_data >> 8; // build a dword to send to tx app dword_data = dword_data | {frame_store_rx[_i], 24'h00_0000}; end end `TX_TASKS.TSK_SET_READ_DATA(4'hf,dword_data); // send the data to the tx_app end end // memory reads, io reads, memory writes and io writes default: begin requester_id = txrx ? {frame_store_tx[4], frame_store_tx[5]} : {frame_store_rx[4], frame_store_rx[5]}; tag = txrx ? frame_store_tx[6] : frame_store_rx[6]; byte_enables = txrx ? frame_store_tx[7] : frame_store_rx[7]; address_low = txrx ? frame_store_tx[8] : frame_store_rx[8]; address_low = (address_low << 8) | (txrx ? frame_store_tx[9] : frame_store_rx[9]); address_low = (address_low << 8) | (txrx ? frame_store_tx[10] : frame_store_rx[10]); address_low = (address_low << 8) | (txrx ? frame_store_tx[11] : frame_store_rx[11]); $fdisplay(_log_file_ptr, "\t Requester Id: 0x%h", requester_id); $fdisplay(_log_file_ptr, "\t Tag: 0x%h", tag); $fdisplay(_log_file_ptr, "\t Last and First Byte Enables: 0x%h", byte_enables); $fdisplay(_log_file_ptr, "\t Address Low: 0x%h \n", address_low); if (payload == 1) begin for (_i = 12; _i < _frame_store_idx; _i = _i + 1) begin $fdisplay(_log_file_ptr, "\t 0x%h", (txrx ? frame_store_tx[_i] : frame_store_rx[_i])); end end end endcase end endtask // TSK_3DW /************************************************************ Task : TSK_4DW Inputs : fmt, type, traffic_class, td, ep, attr, length payload, _frame_store_idx Outputs : None Description : Gets variables and prints frame *************************************************************/ task TSK_4DW; input [1:0] fmt; input [4:0] type; input [2:0] traffic_class; input td; input ep; input [1:0] attr; input [9:0] length; input payload; input [31:0] _frame_store_idx; input [31:0] _log_file_ptr; input txrx; reg [15:0] requester_id; reg [7:0] tag; reg [7:0] byte_enables; reg [7:0] message_code; reg [31:0] address_high; reg [31:0] address_low; reg [2:0] msg_type; integer _i; begin $fdisplay(_log_file_ptr, "\t Traffic Class: 0x%h", traffic_class); $fdisplay(_log_file_ptr, "\t TD: %h", td); $fdisplay(_log_file_ptr, "\t EP: %h", ep); $fdisplay(_log_file_ptr, "\t Attributes: 0x%h", attr); $fdisplay(_log_file_ptr, "\t Length: 0x%h", length); requester_id = txrx ? {frame_store_tx[4], frame_store_tx[5]} : {frame_store_rx[4], frame_store_rx[5]}; tag = txrx ? frame_store_tx[6] : frame_store_rx[6]; byte_enables = txrx ? frame_store_tx[7] : frame_store_rx[7]; message_code = txrx ? frame_store_tx[7] : frame_store_rx[7]; address_high = txrx ? frame_store_tx[8] : frame_store_rx[8]; address_high = (address_high << 8) | (txrx ? frame_store_tx[9] : frame_store_rx[9]); address_high = (address_high << 8) | (txrx ? frame_store_tx[10] : frame_store_rx[10]); address_high = (address_high << 8) | (txrx ? frame_store_tx[11] : frame_store_rx[11]); address_low = txrx ? frame_store_tx[12] : frame_store_rx[12]; address_low = (address_low << 8) | (txrx ? frame_store_tx[13] : frame_store_rx[13]); address_low = (address_low << 8) | (txrx ? frame_store_tx[14] : frame_store_rx[14]); address_low = (address_low << 8) | (txrx ? frame_store_tx[15] : frame_store_rx[15]); $fdisplay(_log_file_ptr, "\t Requester Id: 0x%h", requester_id); $fdisplay(_log_file_ptr, "\t Tag: 0x%h", tag); casex({fmt, type}) `PCI_EXP_MEM_READ64, `PCI_EXP_MEM_WRITE64: begin $fdisplay(_log_file_ptr, "\t Last and First Byte Enables: 0x%h", byte_enables); $fdisplay(_log_file_ptr, "\t Address High: 0x%h", address_high); $fdisplay(_log_file_ptr, "\t Address Low: 0x%h \n", address_low); if (payload == 1) begin for (_i = 16; _i < _frame_store_idx; _i = _i + 1) begin $fdisplay(_log_file_ptr, "\t 0x%h", txrx ? frame_store_tx[_i] : frame_store_rx[_i]); end end end `PCI_EXP_MSG_NODATA, `PCI_EXP_MSG_DATA: begin msg_type = type; $fdisplay(_log_file_ptr, "\t Message Type: 0x%h", msg_type); $fdisplay(_log_file_ptr, "\t Message Code: 0x%h", message_code); $fdisplay(_log_file_ptr, "\t Address High: 0x%h", address_high); $fdisplay(_log_file_ptr, "\t Address Low: 0x%h \n", address_low); if (payload == 1) begin for (_i = 16; _i < _frame_store_idx; _i = _i + 1) begin $fdisplay(_log_file_ptr, "\t 0x%h", txrx ? frame_store_tx[_i] : frame_store_rx[_i]); end end end endcase end endtask // TSK_4DW /************************************************************ Task : TSK_READ_DATA Inputs : None Outputs : None Description : Consume clocks. *************************************************************/ task TSK_READ_DATA; input last; input txrx; input [63:0] trn_d; input [3:0] trn_rem; integer _i; reg [7:0] _byte; reg [63:0] _msk; reg [3:0] _rem; begin _msk = 64'hff00000000000000; _rem = last ? ((trn_rem == 8'h0F) ? 4 : 8) : 8; for (_i = 0; _i < _rem; _i = _i + 1) begin _byte = (trn_d & (_msk >> (_i * 8))) >> (((7) - _i) * 8); if (txrx) begin `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_tx[`BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_tx_idx] = _byte; `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_tx_idx = `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_tx_idx + 1; end else begin `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_rx[`BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_rx_idx] = _byte; `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_rx_idx = `BOARD.`XILINX_PCI_EXP_DOWNSTREAM_PORT_INST.com_usrapp.frame_store_rx_idx + 1; end end end endtask // TSK_READ_DATA`include "../dsport/pci_exp_expect_tasks.v"endmodule // pci_exp_usrapp_com
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -