Synopsys PCIe VIP 包含 Existing 和 Unified 例化结构,后者通过参数化配置和interface接口显著提升了灵活性与可复用性。本文继续说明 Global Shadow Memory(TLP 记录与数据比对)、后门读写(HDL 层与 UVM 层访问)以及调试方法(覆盖TL/DL/PL三层),旨在为PCIe验证工程师提供实际配置与调试的直接参考。

例化结构

Synopsys 的 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 VIP

Existing 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.sv

Unified VIP

(1)Unified VIP 特点
• Unified VIP 使用单一的 module 模型(svt_pcie_single_port_device_agent_hdl),模型通过 parameter 配置,不需要全局define。
• Unified VIP 使用单一的接口(svt_pcie_if)。

(2)Unified VIP参数
简单列举部分参数,参数即 svt_pcie_single_port_device_agent_hdl 的 parameter。

parameter 描述
SVT_PCIE_UI_PCIE_SPEC_VER 协议版本
SVT_PCIE_UI_PIPE_SPEC_VER PIPE协议版本
SVT_PCIE_UI_NUM_PHYSICAL_LANES 最大支持lane数量
SVT_PCIE_UI_DISPLAY_NAME HDL module例化名,symbol log用
SVT_PCIE_UI_ENABLE_SHADOW_M EMORY_CHECKING 使能check
SVT_PCIE_UI_MON_PHY_INTERFACE_TYPE 接口类型,支持serdes、PMA、PIPE
SVT_PCIE_UI_DEVICE_IS_ROOT 1:RC 0:EP

Global 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();

后门读写

除了 Global Shadow Memory 存储模型,实际上 RC、EP Agent 也有自己的 target memory 存储模型,所以总共是3个存储模型,这3个模型都可以后门读写。例如 RC 发起1次 memory write,那可以通过对 Shadow Memory 做后门读,也可以通过对 EP 的 target memory 做后门读,然后进行比对。

后门读写可以通过 VIP HDL 部分的 task 实现,下为 RC、EP 和 Shadow Memory 读写示例。

bit [31:0] addr = 32'h2000_0000;
bit [31:0] wdata = 32'h1234_5678;
bit [31:0] byte_enable = 4'hf;
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

调试方法

log文件

默认配置下环境会打印 dl 层传输 log 和 symbol log,下图为传输 log 示例,可以看到上电后首先进行了流量控制 FC 包传输,然后进行了 Mwr32 类型的TLP包传输。
在这里插入图片描述
下图为示例 symbol log ,可以看到 TS 序列的每一个symbol。
在这里插入图片描述

波形信号

VIP module 模型中包含 ascii 格式的信号用于调试,路径在 test_top.root0.port0.tl0/dl0/pl0.ascii*,下面是 Existing 模型示例,Unified 模型 port0 中间路径有差别,但也能从 port0 找到相同信号。

(1)TL层

TL层可以看到TLP包的类型。

信号名 描述
ascii_rx_tlp_fc_type 接收TLP flow control类型,例如P、NP、CPL
ascii_rx_tlp_type 接收TLP类型 ,对应字段fmt+type
ascii_rx_tlp_vc 接收TLP虚拟通道号
ascii_rx_tlp_xld 接收TLP transaction ID,对应字段Requester ID(16bit)+Tag(10bit)
ascii_tx_tlp_fc_type 发送TLP flow control类型
ascii_tx_tlp_type 发送TLP类型
ascii_tx_tlp_vc 发送TLP虚拟通道号
ascii_tx_tlp_xld 发送TLP transaction ID

在这里插入图片描述

(2)DL层
列举部分 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_state DL层状态机
ascii_aspm_state 低功耗状态机
ascii_pm_state 电源状态机

在这里插入图片描述

(3)PL层
列举部分 PL 层调试信号,数据以 symbol 形式表示。可以看到 poll.cfg 阶段下发送 COM+PAD+…+D5.2 symbol(即1个 TS2 序列)。

信号名 描述
ascii_ltssm_tx_state 发送LTSSM状态机(这个信号在`include文件里,要全文件搜索)
ascii_ltssm_rx_state 接收LTSSM状态机
ascii_lanen_tx_data 发送数据,n为0~31
ascii_lanen_rx_data 接收数据,n为0~31

在这里插入图片描述

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐