# 测试平台说明文档 (TB.sv) ## 1. 概述 本测试平台用于验证 `da4008_chip_top` 芯片的数字功能。通过 SPI 接口配置芯片内部寄存器,并通过 LVDS 接口输入数据帧,观察芯片输出的并行数据(MSB_OUT/LSB_OUT)以及经过后处理的波形数据。测试平台包含时钟生成、复位控制、驱动器模型、待测芯片实例化以及数据采集逻辑。 ## 2. 主要模块及功能 ### 2.1 时钟生成 - **clk**:周期 1.536 ns,用于芯片主时钟。 - **clk_40g**:周期 0.024 ns,用于高速数据采集(后处理模块采样时钟)。 两个时钟均由 `clock_tb` 模块实例化产生。 ### 2.2 复位信号 - `rst_n`:低有效复位,初始为 0,延迟 20 ns 后置为 1。 ### 2.3 配置文件读取 测试平台通过读取临时文件获取配置和数据的路径: - `CASE_TEMP = "../../case_temp.txt"`:存储 SPI 配置文件路径。 - `DATA_TEMP = "../../data_temp.txt"`:存储输出数据文件路径。 - `LVDS_FILE = "../../../../case/lvds/0305/lvds.txt"`:LVDS 输入数据文件路径。 在 `initial` 块中读取这些路径,并存入 `CONFIG_FILE` 和 `DATA_O_FILE` 字符串变量。 ### 2.4 接口及驱动器 - **SPI 接口**:`spi_if` 模块实例化为 `spi_bus`,包含 `sclk`、`mosi`、`miso`、`csn` 信号。通过 `virtual spi_if vif` 传递。 - **LVDS 接口**:`lvds_if` 模块实例化为 `lvds_bus`,包含 `data`、`valid`、`clk` 信号。通过 `virtual lvds_if lvds_vif` 传递。 - **SPI 驱动器**:`spi_driver` 类对象 `my_drv`,负责从 `CONFIG_FILE` 读取配置序列并驱动 SPI 总线,同时将读取的结果写入 `DATA_O_FILE`。 - **LVDS 驱动器**:`lvds_driver` 类对象 `lvds_drv`,负责从 `LVDS_FILE` 读取数据帧并驱动 LVDS 总线。先发送训练序列(`train_count = 100`),然后发送加扰数据帧。 ### 2.5 测试流程 1. 初始化复位和驱动器对象。 2. 释放复位后,LVDS 驱动器发送训练序列和数据帧。 3. 首次调用 `my_drv.do_drive(file_path)` 将 SPI 配置写入芯片(同时可能回读并保存)。 4. 拉高 `start` 信号两个周期,启动芯片内部同步。 5. 等待 30,000 ns 后再次调用 `do_drive` 保存数据。 6. 重复步骤 4-5 两次,共三次数据采集。 7. 仿真结束(`$finish`)。 ### 2.6 待测芯片实例化 `da4008_chip_top` 例化为 `U_da4008_chip_top`,连接信号包括: - SPI 接口:`PI_sclk`, `PI_csn`, `PI_mosi`, `PO_miso` - 中断:`PO_irq` - 同步信号:`PI_sync_in` (start), `PO_sync_out` - 时钟:`clk` - LVDS 输入:`lvds_data`, `lvds_valid`, `lvds_clk` - DAC 输出总线:`MSB_OUT[63:0]`, `LSB_OUT[63:0]`, `MSB_DUM[63:0]`, `DEM_VLD` - 各类配置端口(电流、时钟、P2S 等) ### 2.7 后处理模块 - **DEM_Reverse_64CH**:将 `MSB_OUT` 和 `LSB_OUT` 合并并反向排列,输出 64 路 8 位数据 `data_out[63:0]` 及有效信号 `vld_out`。 - 使用 `clk_40g` 将 `data_out` 和 `vld_out` 打一拍得到 `data_out_r` 和 `vld_out_r`。 - 计数器 `cnt_c`:在 `vld_out_r` 有效时递增(0~63 循环),用于轮询选择当前通道数据。 - `cs_wave`:根据 `cnt_c` 选择对应通道的 `data_out_r`,并将最高位取反(可能是为了满足特定输出格式),输出 8 位波形数据。 ### 2.8 波形记录 使用 `$fsdbAutoSwitchDumpfile` 和 `$fsdbDumpvars` 记录 FSDB 格式波形,支持 MDA 转储,便于调试。 ## 3. 文件依赖 - `../../rtl/define/chip_define.v`:芯片定义文件。 - `../../model/SPI_DRIVER.sv`:SPI 驱动器模型。 - `../../model/LVDS_DRIVER.sv`:LVDS 驱动器模型。 - `clock_tb` 时钟发生模块。 - `spi_if`、`lvds_if` SPI接口文件。 - `DEM_Reverse_64CH` DEM解码模块。 ## 4. 仿真控制 通过修改 `case_temp.txt` 和 `data_temp.txt` 可指定不同的配置文件和输出文件。LVDS 数据文件路径固定为 `LVDS_FILE`,可根据需要修改。 ## 5. 注意事项 - 仿真时间单位/精度为 1ns/1ps。 - 驱动器的具体实现未在此文件中给出,需确保相关模型正确。 - 多次调用 `my_drv.do_drive` 可能用于在不同时刻捕获芯片内部状态。 - `cs_wave` 的生成方式暗示了数据采集的时序要求,需保证 `clk_40g` 与芯片输出时钟的同步关系。 --- 以上为该测试平台的结构与功能说明,可作为仿真环境的使用参考。