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

📄 pci_exp_expect_tasks.v

📁 已经在xilinx的ML555开发板上实现的PCIEx4的设计
💻 V
📖 第 1 页 / 共 4 页
字号:
      $display("[%t] : Received MEMWR64 --- 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_) &&           (last_dw_be == last_dw_be_) && (first_dw_be == first_dw_be_) &&           (address == address_))        begin          // find matching header then compare payload          for (i_ = 0; i_ < payload_len; i_ = i_ + 1)          begin            check_byte = 1;            if (i_ < 4) // apply first_dw_be            begin              if (first_dw_be[i_])                check_byte = 1;              else                check_byte = 0;            end else if (i_ > (payload_len - 5)) // apply last_dw_be            begin              if (last_dw_be[4 - (payload_len - i_)])                check_byte = 1;              else                check_byte = 0;            end            if(check_byte && `EXPECT_MEMWR64_PAYLOAD[i_] != frame_store_rx[16 + i_]) //find mismatch            begin              $fdisplay(error_file_ptr, "[%t] : Found payload mismatch in received MEMWR64 - Tag 0x%h: \n", $time, tag_);              $fdisplay(error_file_ptr, "Expected:");              for (i_ = 0; i_ < payload_len; i_ = i_ + 1)                $fdisplay(error_file_ptr,"\t %0x", `EXPECT_MEMWR64_PAYLOAD[i_]);              $fdisplay(error_file_ptr, "Received:");              for (i_ = 0; i_ < payload_len; i_ = i_ + 1)                $fdisplay(error_file_ptr,"\t %0x", frame_store_rx[16+i_]);              $fdisplay(error_file_ptr, "");              expect_status = 1'b0;              i_ = 5000;            end          end          //find matching frame          if(i_ == payload_len)            expect_status = 1'b1;        end        else // header mismatches, error out        begin          $fdisplay(error_file_ptr, "[%t] : Found header mismatch in received MEMWR64 - 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", last_dw_be);          $fdisplay(error_file_ptr, "\t First DW byte-enable: 0x%h", first_dw_be);          $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", last_dw_be_);          $fdisplay(error_file_ptr, "\t First DW byte-enable: 0x%h", first_dw_be_);          $fdisplay(error_file_ptr, "\t Address: 0x%h", address_);          $fdisplay(error_file_ptr, "");          expect_status = 1'b0;        end      end    end  endendtask// Please note that the following io tasks can be only used if the customer has a mechanism for allowing// the customer design to generate io write or io read tlps received by the dsport rx port./************************************************************Task : TSK_EXPECT_IOWRITEInputs : td, ep, requested_id, tag, firstDwBe, address, dataOutputs : status 0-Failed 1-SuccessfulDescription : Expecting a TLP from Rx side with matching              td, ep, requested_id, tag, firstDwBe, address, and 32 bit data*************************************************************/task TSK_EXPECT_IOWRITE;  input          td;  input          ep;  input   [15:0] requester_id;  input   [7:0]  tag;  input   [3:0]  firstDwBe;  input   [31:0] address; // note that low bits [1:0] are not used  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   [31:0] address_; // note that the bottom two bits are not used in comparison  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_iowr; //wait for a rcvd_iowr event      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];            address_ = (frame_store_rx[8]);      address_ = (address_ << 8) | frame_store_rx[9];      address_ = (address_ << 8) | frame_store_rx[10];      address_ = (address_ << 8) | frame_store_rx[11];            $display("[%t] : Received IO 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_) &&                      (address[31:2] == address_[31:2]))        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 IO 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 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_IOWRITE timeout. IO WRITE TLP never received or tag mismatch");          $finish;        end    end   join  end // 1stendtask/************************************************************Task : TSK_EXPECT_IOREADInputs : td, ep, requested_id, tag, firstDwBe, addressOutputs : status 0-Failed 1-SuccessfulDescription : Expecting a TLP from Rx side with matching              td, ep, requested_id, tag, firstDwBe, and address*************************************************************/task TSK_EXPECT_IOREAD;  input          td;  input          ep;  input   [15:0] requester_id;  input   [7:0]  tag;  input   [3:0]  firstDwBe;  input   [31:0] address; // note that low bits [1:0] are not used  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   [31:0] address_; // note that the bottom two bits are not used in comparison  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;    j_ = 1000;        wait_for_next = 1'b1; //haven't found any matching tag yet   fork    while(wait_for_next)    begin      @ rcvd_iord; //wait for a rcvd_iord 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];      lastDwBe_ = frame_store_rx[7] >>4;      firstDwBe_ = frame_store_rx[7];            address_ = (frame_store_rx[8]);      address_ = (address_ << 8) | frame_store_rx[9];      address_ = (address_ << 8) | frame_store_rx[10];      address_ = (address_ << 8) | frame_store_rx[11];            $display("[%t] : Received IO READ 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_) &&                      (address[31:2] == address_[31:2]))        begin                    expect_status = 1'b1;        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);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -