Synopsys PCIe VIP(2) Shadow Memory、后门读写和调试方法

发布时间:2026/7/16 23:51:09
Synopsys PCIe VIP(2) Shadow Memory、后门读写和调试方法 Unified VIPSynopsys的PCIe agent VIP由sv类和hdl module两部分组成hdl模型又可以分为 Existing 模型和 Unified 模型从verdi打开可以看到差别。简单地说Existing模型通过全局define配置而Unified模型通过parameter配置还多了interface所以Unified模型更加灵活。VIP配置类中也将Existing模型称为single instance model。看似Unified中没有target、requester、driver和port的hdl module但实际都在m_ser中serdes模式下generate if例化名所以实现差别不大。Existing VIPExisting VIP中的HDL module通过全局define配置因为没有interface和DUT只能以信号形式连接同时不同接口和速率实例化的模型也不一样如下列举。所以缺点是会在一些多样配置或多link场景使用受限。Existing VIP的示例在VIP 2018版本还有后续版本就被删掉了。svt_pcie_device_agent_serdes_x16_8g_hdl.sv svt_pcie_device_agent_serdes_x16_hdl.sv svt_pcie_device_agent_serdes_x32_8g_hdl.sv svt_pcie_device_agent_serdes_x32_hdl.sv svt_pcie_device_agent_pma_x16_8g_hdl.sv svt_pcie_device_agent_mpipe_x16_8g_hdl.sv svt_pcie_device_agent_spipe_x16_8g_hdl.svUnified VIP1Unified VIP特点• Unified VIP使用单一的module模型svt_pcie_single_port_device_agent_hdl模型通过parameter配置不需要全局define。• Unified VIP使用单一的接口svt_pcie_if。2Unified VIP参数简单列举部分参数参数即svt_pcie_single_port_device_agent_hdl的parameter。parameter描述SVT_PCIE_UI_PCIE_SPEC_VER协议版本SVT_PCIE_UI_PIPE_SPEC_VERPIPE协议版本SVT_PCIE_UI_NUM_PHYSICAL_LANES最大支持lane数量SVT_PCIE_UI_DISPLAY_NAMEHDL module例化名symbol log用SVT_PCIE_UI_ENABLE_SHADOW_M EMORY_CHECKING使能checkSVT_PCIE_UI_MON_PHY_INTERFACE_TYPE接口类型支持serdes、PMA、PIPESVT_PCIE_UI_DEVICE_IS_ROOT1RC 0EPGlobal Shadow Memory自动检查示例环境中可以看到和RC、EP同级还包含Global Shadow Memory可以理解为PCIE总线空间的存储模型会记录memory write和configuration write类型的写TLP包然后对TLP读数据进行自动检查。Shadow Memory和Agent VIP相似同样包含uvm和HDL两部分例化HDL的同时要通过宏定义指定hierarchy路径。define EXPERTIO_PCIESVC_GLOBAL_SHADOW_PATH test_top.global_shadow0 pciesvc_global_shadow #( .DISPLAY_NAME( global_shadow0. ) ) global_shadow0();后门读写实际上RC、EP Agent VIP也有自己的target memory存储模型所以总共是3个存储模型这3个模型都可以后门读写。例如RC发起1次memory write那可以通过对Shadow Memory做后门读也可以通过对EP的target memory做后门读然后进行比对。后门读写可以通过VIP HDL部分的task实现下为RC、EP和Shadow Memory读写示例。bit [31:0] addr 32h2000_0000; bit [31:0] wdata 32h1234_5678; bit [31:0] byte_enable 4hf; bit [31:0] rdata; bit [31:0] status; test_top.endpoint0.mem_target0.Write(addr, byte_enable, wdata, status); test_top.endpoint0.mem_target0.Read(addr, byte_enable, rdata, status); test_top.global_shadow0.MemWrite(addr, byte_enable, wdata, status); test_top.global_shadow0.MemRead(addr, byte_enable, rdata, status);后门读写也可以通过VIP的uvm部分的sequence实现相关sequence可以参考svt_pcie_mem_target_service_sequence_collection.svp调试方法波形信号VIP module模型中包含ascii格式的信号用于调试路径在test_top.root0.port0.tl0/dl0/pl0.ascii*这个是Existing模型示例Unified模型port0路径有差别但也能从port0再找到这些信号。1TL层TL层可以看到TLP包的类型。信号名描述ascii_rx_tlp_fc_type接收TLP flow control类型例如P、NP、CPLascii_rx_tlp_type接收TLP类型 对应字段fmttypeascii_rx_tlp_vc接收TLP虚拟通道号ascii_rx_tlp_xld接收TLP transaction ID对应字段Requester ID16bitTag10bitascii_tx_tlp_fc_type发送TLP flow control类型ascii_tx_tlp_type发送TLP类型ascii_tx_tlp_vc发送TLP虚拟通道号ascii_tx_tlp_xld发送TLP transaction ID2DL层列举部分DL层调试信号可以看到流量控制初始化的DLLP包和传递的TLP包。信号名描述ascii_tx_tlp_type发送 TLP包 类型ascii_tx_tlp_seq_num发送 TLP包 DL层加的序号ascii_tx_tlp_ei_code发送 TLP包有错误注入ascii_tx_dllp_type发送 DLLP包 类型ascii_tx_dllp_seq_num发送 DLLP包 序号ascii_tx_dllp_credit_vc发送 DLLP包 虚拟通道号ascii_tx_dllp_credit_data_value发送 DLLP包 流量控制数据缓存数值ascii_tx_dllp_credit_hdr_value发送 DLLP包 流量控制包头缓存数值ascii_dlcmsm_stateDL层状态机ascii_aspm_state低功耗状态机ascii_pm_state电源状态机3PL层列举部分PL层调试信号数据以symbol形式表示。可以看到poll.cfg阶段下发送COMPAD…D5.2 symbol即1个TS2序列。信号名描述ascii_ltssm_tx_state发送LTSSM状态机这个信号在include文件里要全文件搜索ascii_ltssm_rx_state接收LTSSM状态机ascii_lanen_tx_data发送数据n为0~31ascii_lanen_rx_data接收数据n为0~31