第二章:测试环境搭建——硬件平台与软件工具链

好,咱们直接进入正题。测试环境搭建,说白了就是给你的芯片测试搭个台子。台子搭不好,后面所有数据都是扯淡。我在项目中见过太多人,上来就怼着芯片测,结果环境噪声比信号还大,折腾三天发现是探头没接地——这种坑,我踩过不止一次。

2.1 硬件平台:三大件缺一不可

硬件平台我习惯分成三块:FPGA开发板示波器误码仪。这三样东西,就像厨师手里的刀、砧板、锅,少一样你都做不出菜。

2.1.1 FPGA开发板——你的芯片替身

工业通信芯片还没流片回来怎么办?用FPGA搭一个原型。我个人习惯选Xilinx的Kintex-7或Artix-7系列,性价比高,资源够用。你想想看,如果选个太冷门的FPGA,后面调试时连个参考设计都找不到,那才叫痛苦。

核心要点:FPGA开发板要预留足够的IO口,至少要有4路SMA接口用于高速信号测试。我建议板上自带USB转UART,方便打印调试信息。

我在项目中遇到过一件事:有一次选了个便宜的FPGA板,结果发现差分对数量不够,硬生生把4路LVDS信号挤到2路上,最后时序怎么都跑不通。嗯,从那以后我再也不在开发板上省钱。

2.1.2 示波器——你的眼睛

示波器这东西,带宽和采样率是硬指标。测工业通信芯片,我建议至少1GHz带宽、5GSa/s采样率。为什么?因为很多工业协议(比如EtherCAT、PROFINET)的边沿速率很快,带宽不够你看到的波形全是假的。

信号类型 推荐带宽 采样率
低速串口(UART、SPI) 200MHz 1GSa/s
工业以太网(100Mbps) 500MHz 2.5GSa/s
千兆以太网/高速串行 1GHz以上 5GSa/s以上

小技巧:测差分信号时,记得用差分探头。我曾经用两个单端探头看差分波形,结果共模噪声把信号淹没了,查了整整一天才发现问题。

2.1.3 误码仪——最诚实的裁判

误码仪是测通信质量的金标准。示波器能告诉你波形好不好看,但只有误码仪能告诉你数据对不对。我常用的误码仪是安立或泰克的,支持PRBS7/15/31码型。

这里有个坑:误码仪的时钟必须和DUT同步。我曾经犯过一个低级错误——误码仪和FPGA板各用各的晶振,结果测出来的误码率高达10^-3,吓得我差点以为芯片废了。后来发现是时钟不同步导致的采样点偏移。

警告:误码仪测试前,一定要先做自环测试。把误码仪的TX直接连到RX,确认仪器本身没问题,再接入DUT。这是最基本的操作,但很多人会跳过。

2.2 软件工具链:从逻辑到协议的全覆盖

硬件搭好了,软件就是你的大脑。我习惯把软件工具链分成三层:逻辑层(Vivado)协议层(Wireshark)自动化层(Python)

2.2.1 Vivado——FPGA的编译器

Vivado是Xilinx的官方工具,用来写RTL代码、综合、布局布线、生成比特流。我个人习惯用Vivado 2019.1版本,稳定,bug少。新版本功能多,但有时候会引入一些莫名其妙的时序问题。

写代码时,我建议用Block Design的方式搭系统。把IP核拖出来,连线,比自己手写AXI总线快得多。但要注意:IP核的配置一定要和芯片手册一致。我见过有人把DDR3的时序参数配错了,结果跑起来数据全是乱的。

// 一个简单的Vivado Tcl脚本示例
# 创建工程
create_project -part xc7k325tffg900-2 test_project

# 添加源文件
add_files -norecurse ./src/top.v
add_files -norecurse ./src/uart_rx.v

# 运行综合
synth_design -top top

# 布局布线
place_design
route_design

# 生成比特流
write_bitstream -force ./output/top.bit

2.2.2 Wireshark——协议分析神器

Wireshark是用来抓网络包的。工业通信芯片最终要跑协议栈,比如EtherCAT、PROFINET、Modbus TCP。这些协议的数据包长什么样?用Wireshark一看便知。

我建议在FPGA里集成一个以太网MAC核,然后把PHY芯片的MDIO接口引出来。这样Wireshark就能抓到FPGA和外部设备之间的所有通信数据。有一次我调试一个PROFINET从站,发现设备一直连不上主站。用Wireshark一抓,发现是MAC地址配置错了——这种问题,看波形是看不出来的。

关键设置:Wireshark里要开启"Promiscuous Mode"(混杂模式),否则只能抓到发给本机的包。另外,记得设置过滤条件,比如"eth.type == 0x88a4"(EtherCAT的以太网类型),不然数据太多看不过来。

2.2.3 Python脚本——自动化测试的灵魂

手动测试?太慢了。我习惯用Python写自动化测试脚本。主要用三个库:pySerial(串口通信)、scapy(构造网络包)、pandas(数据分析)。

举个例子,测试一个UART接口的误码率,手动发数据再收数据,1000个包你得测到什么时候?用Python脚本,5分钟搞定。

# Python自动化测试脚本示例
import serial
import time
import random

# 配置串口
ser = serial.Serial(
    port='COM3',
    baudrate=115200,
    timeout=1
)

# 发送测试数据
test_data = bytes([random.randint(0, 255) for _ in range(1000)])
ser.write(test_data)

# 接收回传数据
time.sleep(0.5)
recv_data = ser.read(1000)

# 计算误码率
error_count = sum(1 for a, b in zip(test_data, recv_data) if a != b)
ber = error_count / len(test_data)

print(f"误码率: {ber:.2e}")

# 关闭串口
ser.close()

我的习惯:Python脚本里一定要加日志功能。每次测试自动生成一个带时间戳的log文件,方便后面回溯。我曾经靠一个log文件,找到了一个只在特定温度下才会出现的间歇性故障。

2.3 环境搭建的避坑指南

最后,我总结几个常见的坑,都是我用真金白银换来的教训:

  • 接地问题:所有仪器共地。示波器、误码仪、FPGA板的地线要连在一起。我曾经因为地线没接好,测出来的眼图全是毛刺。
  • 信号完整性:高速信号线尽量短,不要用杜邦线。我建议用SMA转SMA的射频线,或者至少用排线加屏蔽。
  • 电源稳定性:FPGA板要用线性电源,别用开关电源。开关电源的纹波会耦合到信号里,导致误码率偏高。
  • 软件版本兼容:Vivado、Wireshark、Python的版本要匹配。我遇到过Vivado 2020.1生成的比特流在某个老版FPGA上跑不起来的情况。

好了,环境搭建就讲到这里。下一章咱们开始讲具体的测试用例设计——怎么测、测什么、结果怎么看。到时候我会拿一个真实的EtherCAT从站芯片案例来拆解。