📄 pci_exp_expect_tasks.v
字号:
$fdisplay(error_file_ptr, "\t EP: %h", ep); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr); $fdisplay(error_file_ptr, "\t Length: 0x%h", length); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag); $fdisplay(error_file_ptr, "\t Last DW Byte Enable: 0x%h", lastDwBe); $fdisplay(error_file_ptr, "\t 1st DW Byte Enable: 0x%h", firstDwBe); $fdisplay(error_file_ptr, "\t Address: 0x%h", address); $fdisplay(error_file_ptr, "Received:"); $fdisplay(error_file_ptr, "\t Traffic Class: 0x%h", traffic_class_); $fdisplay(error_file_ptr, "\t TD: %h", td_); $fdisplay(error_file_ptr, "\t EP: %h", ep_); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr_); $fdisplay(error_file_ptr, "\t Length: 0x%h", length_); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id_); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag_); $fdisplay(error_file_ptr, "\t Last DW Byte Enable: 0x%h", lastDwBe_); $fdisplay(error_file_ptr, "\t 1st DW Byte Enable: 0x%h", firstDwBe_); $fdisplay(error_file_ptr, "\t Address: 0x%h", address_); $fdisplay(error_file_ptr, ""); expect_status = 1'b0; end end end // while begin // time out task function and return 0 if tlp never received and/or tag never matches while (j_ && wait_for_next) begin `TX_TASKS.TSK_TX_CLK_EAT(1); j_ = j_ - 1; end if (wait_for_next) begin $display("Failure: TSK_EXPECT_IOREAD timeout. IO READ TLP never received or tag mismatch"); $finish; end end join end //1stendtask// Please note that the following task, TSK_EXPECT_TYPE0_CONFIGURATION_WRITE, should not be exported// to the customer because all the current express cores currently consume all Type 0 configuration// accesses. This means that this task will always time out since a type 0 config tlp will never// be received at the rx trn interface. This function is being included for completeness and in case// a future release of an express core passes type 0 configuration writes through the express core // and on to the customer rx application.// Also note that this function has not been tested completely due to the restrictions indicated above./************************************************************Task : TSK_EXPECT_TYPE0_CONFIGURATION_WRITEInputs : td, ep, requested_id, tag, firstDwBe, , dataOutputs : status 0-Failed 1-SuccessfulDescription : Expecting a TLP from Rx side with matching td, ep, requested_id, tag, firstDwBe, , and 32 bit data*************************************************************/task TSK_EXPECT_TYPE0_CONFIGURATION_WRITE; input td; input ep; input [15:0] requester_id; input [7:0] tag; input [3:0] firstDwBe; input [7:0] busNumber; input [4:0] deviceNumber; input [2:0] functionNumber; input [3:0] extRegNumber; input [5:0] registerNumber; input [31:0] data; output expect_status; reg [2:0] traffic_class; reg [1:0] attr; reg [9:0] length; reg [3:0] lastDwBe; reg [2:0] traffic_class_; reg td_; reg ep_; reg [1:0] attr_; reg [9:0] length_; reg [15:0] requester_id_; reg [7:0] tag_; reg [3:0] lastDwBe_; reg [3:0] firstDwBe_; reg [7:0] busNumber_; reg [4:0] deviceNumber_; reg [2:0] functionNumber_; reg [3:0] extRegNumber_; reg [5:0] registerNumber_; reg [7:0] write_payload[0:3]; reg [3:0] byte_enabled; integer i_; reg wait_for_next; integer j_; begin // following assignments are required for io header traffic_class = 3'b000; attr = 2'b00; length = 10'b00_0000_0001; lastDwBe = 4'b0000; write_payload[0] = data[31:24]; write_payload[1] = data[23:16]; write_payload[2] = data[15:8]; write_payload[3] = data[7:0]; j_ = 1000; wait_for_next = 1'b1; //haven't found any matching tag yet fork while(wait_for_next) begin @ rcvd_cfgwr0; //wait for a rcvd_cfgwr0 event *** currently this event will never occur byte_enabled = 4'h0; traffic_class_ = frame_store_rx[1] >> 4; td_ = frame_store_rx[2] >> 7; ep_ = frame_store_rx[2] >> 6; attr_ = frame_store_rx[2] >> 4; length_ = frame_store_rx[2]; length_ = (length_ << 8) | (frame_store_rx[3]); requester_id_= {frame_store_rx[4], frame_store_rx[5]}; tag_= frame_store_rx[6]; lastDwBe_ = frame_store_rx[7] >>4; firstDwBe_ = frame_store_rx[7]; busNumber_ = frame_store_rx[8]; deviceNumber_ = frame_store_rx[9] >> 3; functionNumber_ = frame_store_rx[9]; extRegNumber_ = frame_store_rx[10]; registerNumber_ = frame_store_rx[11] >> 2; $display("[%t] : Received TYPE 0 CFG WRITE TLP --- Tag 0x%h", $realtime, tag_); if(tag == tag_) //find matching tag begin wait_for_next = 1'b0; if((traffic_class == traffic_class_) && (td === td_) && (ep == ep_) && (attr == attr_) && (length == length_) && (requester_id == requester_id_) && (lastDwBe == lastDwBe_) && (firstDwBe == firstDwBe_) && (busNumber == busNumber_) && (deviceNumber == deviceNumber_) && (functionNumber == functionNumber_) && (extRegNumber == extRegNumber_) && (registerNumber == registerNumber_)) begin // find matching header then compare payload expect_status = 1'b1; //assume that we will succeed byte_enabled = firstDwBe; for (i_ = 0; i_ < 4; i_ = i_ + 1) begin if (byte_enabled[3] && expect_status) if (write_payload[i_] != frame_store_rx[12 + i_]) //find mismatch begin $fdisplay(error_file_ptr, "[%t] : Found payload mismatch in TYPE 0 WRITE DATA - Tag 0x%h: \n", $time, tag_); $fdisplay(error_file_ptr, "Expected:"); for (i_ = 0; i_ < 4; i_ = i_ + 1) $fdisplay(error_file_ptr,"\t %0x", write_payload[i_]); $fdisplay(error_file_ptr, "Received:"); for (i_ = 0; i_ < 4; i_ = i_ + 1) $fdisplay(error_file_ptr,"\t %0x", frame_store_rx[12+i_]); $fdisplay(error_file_ptr, ""); expect_status = 1'b0; end byte_enabled = byte_enabled << 1; end end else // header mismatches, error out begin $fdisplay(error_file_ptr, "[%t] : Found header mismatch in received CPLD - Tag 0x%h: \n", $time, tag_); $fdisplay(error_file_ptr, "Expected:"); $fdisplay(error_file_ptr, "\t Traffic Class: 0x%h", traffic_class); $fdisplay(error_file_ptr, "\t TD: %h", td); $fdisplay(error_file_ptr, "\t EP: %h", ep); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr); $fdisplay(error_file_ptr, "\t Length: 0x%h", length); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag); $fdisplay(error_file_ptr, "\t Last DW Byte Enable: 0x%h", lastDwBe); $fdisplay(error_file_ptr, "\t 1st DW Byte Enable: 0x%h", firstDwBe); $fdisplay(error_file_ptr, "\t Bus Number: 0x%h", busNumber); $fdisplay(error_file_ptr, "\t Device Number: 0x%h", deviceNumber); $fdisplay(error_file_ptr, "\t Function Number: 0x%h", functionNumber); $fdisplay(error_file_ptr, "\t Ext Reg Number: 0x%h", extRegNumber); $fdisplay(error_file_ptr, "\t Register Number: 0x%h", registerNumber); $fdisplay(error_file_ptr, "Received:"); $fdisplay(error_file_ptr, "\t Traffic Class: 0x%h", traffic_class_); $fdisplay(error_file_ptr, "\t TD: %h", td_); $fdisplay(error_file_ptr, "\t EP: %h", ep_); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr_); $fdisplay(error_file_ptr, "\t Length: 0x%h", length_); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id_); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag_); $fdisplay(error_file_ptr, "\t Last DW Byte Enable: 0x%h", lastDwBe_); $fdisplay(error_file_ptr, "\t 1st DW Byte Enable: 0x%h", firstDwBe_); $fdisplay(error_file_ptr, "\t Bus Number: 0x%h", busNumber_); $fdisplay(error_file_ptr, "\t Device Number: 0x%h", deviceNumber_); $fdisplay(error_file_ptr, "\t Function Number: 0x%h", functionNumber_); $fdisplay(error_file_ptr, "\t Ext Reg Number: 0x%h", extRegNumber_); $fdisplay(error_file_ptr, "\t Register Number: 0x%h", registerNumber_); $fdisplay(error_file_ptr, ""); expect_status = 1'b0; end end end // while begin // time out task function and return 0 if tlp never received and/or tag never matches while (j_ && wait_for_next) begin `TX_TASKS.TSK_TX_CLK_EAT(1); j_ = j_ - 1; end if (wait_for_next) begin $display("Failure: TSK_EXPECT_TYPE0_CONFIGURATION_WRITE timeout. CFG TYPE 0 WRITE TLP never received"); $finish; end end join end // 1stendtask/************************************************************Task : TSK_EXPECT_INTRInputs : traffic_class, td, ep, attr, length, Message Type, Message Code, Address High,Address LowOutputs : status 0-Failed 1-SuccessfulDescription : Expecting a memory write (32-bit address) TLP from Rx side with matching header fields and payload*************************************************************/task TSK_EXPECT_INTR; input [2:0] traffic_class; input td; input ep; input [1:0] attr; input [9:0] length; input [15:0] requester_id; input [7:0] tag; input [2:0] message_type; input [7:0] message_code; output expect_status; reg [2:0] traffic_class_; reg td_; reg ep_; reg [1:0] attr_; reg [9:0] length_; reg [15:0] requester_id_; reg [7:0] tag_; reg [2:0] message_type_; reg [7:0] message_code_; integer payload_len; reg wait_for_next; reg check_byte; begin wait_for_next = 1'b1; //haven't found any matching tag yet while(wait_for_next) begin @ rcvd_msg; //wait for a rcvd_memwr event traffic_class_ = frame_store_rx[1] >> 4; td_ = frame_store_rx[2] >> 7; ep_ = frame_store_rx[2] >> 6; attr_ = frame_store_rx[2] >> 4; length_ = frame_store_rx[2]; length_ = (length_ << 8) | (frame_store_rx[3]); requester_id_= {frame_store_rx[4], frame_store_rx[5]}; tag_= frame_store_rx[6]; message_type_= frame_store_rx[0]; message_code_= frame_store_rx[7]; payload_len = (length << 2); if (payload_len==0) payload_len = 4096; $display("[%t] : Received Message with no Data --- Tag 0x%h, message_type 0x%h", $realtime, tag_,message_type_ ); if((tag == tag_) && (message_type == message_type_)) //find matching tag and message_type begin wait_for_next = 1'b0; if((traffic_class == traffic_class_) && (td === td_) && (ep == ep_) && (attr == attr_) && (length == length_) && (requester_id == requester_id_) && (message_type == message_type_) && (message_code == message_code_) ) begin $display("[%t] : Interrupt received as expected. type[0x%h], code[0x%h]", $realtime, message_type_,message_code_); expect_status = 1'b1; end else // header mismatches, error out begin $fdisplay(error_file_ptr, "[%t] : Found header mismatch in received MEMWR - Tag 0x%h: \n", $time, tag_); $fdisplay(error_file_ptr, "Expected:"); $fdisplay(error_file_ptr, "\t Traffic Class: 0x%h", traffic_class); $fdisplay(error_file_ptr, "\t TD: %h", td); $fdisplay(error_file_ptr, "\t EP: %h", ep); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr); $fdisplay(error_file_ptr, "\t Length: 0x%h", length); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag); $fdisplay(error_file_ptr, "\t message_type: 0x%h", message_type); $fdisplay(error_file_ptr, "\t message_code: 0x%h", message_code); $fdisplay(error_file_ptr, "Received:"); $fdisplay(error_file_ptr, "\t Traffic Class: 0x%h", traffic_class_); $fdisplay(error_file_ptr, "\t TD: %h", td_); $fdisplay(error_file_ptr, "\t EP: %h", ep_); $fdisplay(error_file_ptr, "\t Attributes: 0x%h", attr_); $fdisplay(error_file_ptr, "\t Length: 0x%h", length_); $fdisplay(error_file_ptr, "\t Requester ID: 0x%h", requester_id_); $fdisplay(error_file_ptr, "\t Tag: 0x%h", tag_); $fdisplay(error_file_ptr, "\t message_type: 0x%h", message_type_); $fdisplay(error_file_ptr, "\t message_code: 0x%h", message_code_); $fdisplay(error_file_ptr, ""); expect_status = 1'b0; end end end endendtask
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -