4. FIFO测试环境搭建:Python环境准备、cocotb库安装、DUT接口定义
好了,咱们正式开始动手。这一章,说白了就是先把“战场”打扫干净。你想想看,写测试激励就像炒菜,锅碗瓢盆都没摆好,菜谱再牛也白搭。
我个人习惯,在开始任何验证项目之前,先把环境搞利索。这能省掉后面90%的“哎呀怎么跑不起来”的烦恼。咱们的目标很明确:让Python能跑,让cocotb能调,让DUT的接口能被咱们“看见”。
4.1 Python环境准备
为什么选Python?因为快。写脚本快,调试快,社区资源也丰富。我见过有人用Perl写测试,那代码维护起来...嗯,不提也罢。
首先,你得有个Python。我建议用3.8以上版本。为什么?cocotb对3.6的支持已经不太好了,而且新语法用着确实香。
我的推荐配置:
- Python 3.8 或 3.10(稳定,兼容性好)
- pip 21.0+(包管理工具)
- virtualenv 或 conda(环境隔离,强烈建议)
检查一下你的Python版本:
python3 --version
pip3 --version
如果版本太低,去官网下载一个。别用系统自带的Python,容易搞乱。我在项目中遇到过,有人直接用系统Python装包,结果把系统工具搞崩了...后来重装了系统。
避坑指南: 我曾经因为没做环境隔离,导致两个项目依赖的cocotb版本冲突。一个要1.7,一个要1.9,折腾了一下午。从那以后,每个项目我都用virtualenv。
创建虚拟环境的命令很简单:
python3 -m venv fifo_env
source fifo_env/bin/activate # Linux/Mac
# 或者 Windows 下:
# fifo_env\Scripts\activate
看到命令行前面多了个 (fifo_env) 就对了。这时候你装什么包都不会影响系统环境。
4.2 cocotb库安装
cocotb,全称是 Coroutine-based Co-simulation Testbench。说白了,就是用Python的协程来驱动仿真。它不像传统的SystemVerilog UVM那么重,写起来轻快多了。
安装cocotb,一行命令搞定:
pip install cocotb
如果你想用最新的开发版(有时候有bug修复),也可以从GitHub装:
pip install git+https://github.com/cocotb/cocotb.git
装完之后,验证一下:
python -c "import cocotb; print(cocotb.__version__)"
如果打印出版本号,恭喜你,环境搭好了。如果报错...嗯,检查一下是不是在虚拟环境里,或者pip是不是指向了正确的Python。
注意: cocotb依赖一个叫 simulator 的东西。你得有Icarus Verilog (iverilog) 或者 Verilator 或者 Questa。咱们这个课程用iverilog,免费又好用。
安装iverilog:
# Ubuntu/Debian
sudo apt-get install iverilog
# macOS
brew install icarus-verilog
# Windows
# 去官网下载安装包,或者用MSYS2
装完跑一下 iverilog -V,看到版本信息就OK。
4.3 DUT接口定义
终于到核心了。咱们要验证的FIFO长什么样?我画了一张图,你看一眼就明白。
这个FIFO的接口,我列个表给你看:
| 信号名 | 方向 | 位宽 | 描述 |
|---|---|---|---|
| clk | 输入 | 1 | 时钟,上升沿触发 |
| rst_n | 输入 | 1 | 异步复位,低电平有效 |
| wr_en | 输入 | 1 | 写使能,高电平有效 |
| wr_data | 输入 | 8 | 写入的数据 |
| rd_en | 输入 | 1 | 读使能,高电平有效 |
| rd_data | 输出 | 8 | 读出的数据 |
| full | 输出 | 1 | 满标志,高电平表示FIFO已满 |
| empty | 输出 | 1 | 空标志,高电平表示FIFO为空 |
这个接口定义,说白了就是咱们和DUT沟通的“语言”。你写测试激励,本质上就是通过控制这些信号,让FIFO干活。
举个例子:你想写一个数据进去,就得在时钟上升沿之前,把 wr_en 拉高,把 wr_data 放好。然后等时钟沿一来,数据就进去了。
嗯,这里要注意:复位信号 rst_n 是低电平有效。我见过有人写测试时,把复位拉高当成复位...结果FIFO根本没复位,跑出来的结果全是乱的。
我的经验: 写测试之前,先把接口时序图画一遍。哪怕画在草稿纸上都行。我每次接手一个新DUT,第一件事就是画时序图。画着画着,你就知道该怎么写了。
好了,环境搭好了,接口也清楚了。下一章咱们就开始写第一个测试用例。别急,先把这些基础打牢。
可可精品资料库