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

📄 pci_exp_expect_tasks.v

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