Palladium 事务级实战 · 01 从信号级 SA 划出事务边界

保留 4×8 FIFO,以相同输入与逐字节结果建立迁移基线;先决定什么留在软件,什么进入硬件。

先修知识完成 Palladium FIFO 六章基础课程,理解同步 FIFO、非阻塞赋值与 VALID/READY。

适用环境本地 Python 3 + Icarus Verilog;目标参考 WXE 24.05 ISR5 / Xcelium 配套环境。

验证状态13 项本地 RTL 场景、6 项测量校验测试通过;Cadence 编译、Palladium 映射与设备性能尚未实测。

本文目录迁移的是交互边界,保留的是功能契约建立可以重跑的信号级基线按数据所有权划分软硬件工作故障练习:改成 task 后运行仍然很慢

迁移的是交互边界,保留的是功能契约

信号级 SA 中,软件测试平台经常参与逐拍驱动和观察;事务级加速把一段可独立完成的引脚操作交给硬件侧 transactor。这里保持原来的 4×8 FIFO 不变,将一组字节的写入、等待 full、读出及结果收集封装为一次 exchange。两种驱动的周期安排不同,验收要求是数据与顺序一致,不要求波形逐周期相同。

软件每批交互,硬件逐拍执行;本地层次调用只验证语义,不模拟物理通信链路。软件 host生成批次 / scoreboard接口 task固定参数 / 阻塞返回硬件 engine逐拍握手 / 收集原 FIFO4 深度 × 8 位先明确完成条件,再跨越软硬件边界
软件每批交互,硬件逐拍执行;本地层次调用只验证语义,不模拟物理通信链路。(原创示意,非器件引脚图;窄屏可横向滑动)

建立可以重跑的信号级基线

先保存原 FIFO 与原驱动的结果,再引入新驱动。实验采用确定性字节序列 (17×序号+3) mod 256,共 64 字节;每个批大小的 CSV 必须与信号级基线逐笔相等。不能只比较最后一个字节或 PASS 字符串,否则丢失、重复和乱序可能互相抵消。测试脚本在临时目录独立构建,并保存源码摘要及场景结果。

  1. 安装并记录 Python / Icarus 版本

    预期与判定:两个可执行程序和 vvp 均可找到

  2. 解压工程,在根目录运行 test.py

    预期与判定:13 个正向与故障注入场景通过

  3. 检查 baseline 和 batch16 结果

    预期与判定:基线 64 字节;batch16 为 4 次调用、116 个 ACTIVE 周期

  4. 运行测量校验测试

    预期与判定:6 项通过;只验证统计器,不代表设备测量

在解压后的 palladium-tba 目录执行;需要 iverilog、vvp 和 Python 3。

bash
python3 test.py
python3 measure.test.py
cat results/local-validation.json

按数据所有权划分软硬件工作

随机化、文件读写、参考模型、CSV 输出与结果判定留在软件;FIFO 时钟、复位执行、每拍流控、读延迟处理和响应保持放在硬件侧。软件可以等待一次事务完成,但不应再为了打印 count 而每拍读取跨边界信号。本工程将本地逐拍响应稳定性监视器放在条件编译区,目标 host 编译定义 PALLADIUM_HOST 时移除它。

工程契约与验收证据
项目规定 / 观察结果
软件 tb_host构造固定向量、检查 id / 长度 / 状态 / 每个字节
硬件 fifo_link + batch_engine调用转握手、逐拍执行、收集响应
时钟 clk_gen#5 为语言级模型,目标依赖 +iscDelay 转换
本地 CSV 一致功能证据;不是实际 SA/TBA 设备加速比

实验包中的实际源码;本地 Icarus 已验证。商业工具脚本为待目标环境验证的参考。

systemverilog
module hw_top #(parameter HOLD=0);
 wire clk;
 clk_gen cg(clk);
 fifo_link #(.HOLD(HOLD)) link(clk);
 batch_engine engine(clk,link.rst,link.req_valid,link.req_ready,link.req_id,
 link.req_len,link.req_data,link.rsp_valid,link.rsp_ready,link.rsp_id,
 link.rsp_len,link.rsp_status,link.rsp_data,link.rsp_cycles);
endmodule

故障练习:改成 task 后运行仍然很慢

接口改名不等于减少同步。若 host 每个字节调用一次,或者背景监视器持续跨边界读取信号,仍会产生频繁交互。先检查调用次数及软件中的时钟等待,再在真实设备上采样通信与运行时间;不要为了提升表面吞吐而关闭逐字节结果检查,性能比较必须使用相同有效工作量。

完成检查

  • 原 FIFO 源码未改变,CSV 逐笔一致。
  • 能够指出每一项软件和硬件职责。
  • 没有把本地层次 task 调用描述为已运行的 Palladium TBA。

延伸阅读与来源

本文为黄河电子原创教学说明。产品命令与支持范围请以实际安装版本的官方文档为准。

继续阅读

硬件仿真

首次使用前的工程检查清单

准备版本、输入和模型,减少第一次编译的无效往返。

10 分钟
硬件仿真

如何选择 SA/ICE 及交互方式

根据测试环境所在位置与目标接口要求选择运行流程。

11 分钟
硬件仿真

完成最小设计的编译运行

把第一次平台运行拆为有检查点的五个阶段。

10 分钟