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

📄 pci_exp_usrapp_com.v

📁 已经在xilinx的ML555开发板上实现的PCIEx4的设计
💻 V
📖 第 1 页 / 共 2 页
字号:
    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 + -