#verilog #vhdl #eda

librstb

用 Rust 编写 HDL 测试平台

2 个版本

0.1.1 2022年7月30日
0.1.0 2021年12月11日

#392 in 测试

GPL-3.0 许可证

120KB
3K SLoC

rstb

rstb - Rust 测试平台库旨在提供一个易于使用的 Rust 接口,用于实现 VPI 或 VHPI 接口的 HDL 模拟器。

它深受 Python 实现的强大且功能丰富的 cocotb 的启发。

为什么要这样做?事实证明 Rust 非常适合这项任务。它

  • 可以轻松与 C
  • 自 2019 年底以来,它支持零成本的 futures 与 async/await 语法,这使得编写测试平台变得非常“人体工程学”和易于推理,
  • 拥有广泛且快速发展的开源软件包生态系统,
  • 并且是一个编译速度快、无需运行时的高速编译语言。

与 Python 相比,Rust 中的测试更详细,编写它们要麻烦一些,因为静态类型和借用检查,但测试执行速度要快得多(以简单的 D-Flipflop 示例为例,速度提高了 80 倍)。

当前功能

  • 通过可等待抽象对象(Trigger)调度模拟回调
  • 运行时管理调度、分支、合并和取消并发任务
  • 遍历模拟对象层次结构
  • 获取和设置模拟对象值
  • 强制/释放信号值
  • 宏,用于轻松嵌入用户级测试
  • 传递/失败测试的方法
  • 合并多个任务
  • 基于基础库的并发断言,包括信号历史查找
  • 为 CI 提供JUnit XML 输出
  • 从命令行启动测试的更便捷方式 -> 查看 rstbrun (GitHub)

功能路线图

  • 添加对真实类型的支持。
  • 向量切片和数组
  • 文档
  • 日志解决方案和一些花哨的输出格式化
  • 在 VHPI 上工作(我无法访问的模拟器不支持它)
  • 支持更多模拟器
  • ...

不在路线图上

  • Windows(尽管不应该是一个大问题)
  • Mentor/Siemens 外语接口

Rstb 支持

创建 Rstb 测试

  • 编写测试(请参阅此项目的示例)
  • 将项目编译为与C兼容的动态库,通过在crate-type = ["cdylib"]添加到Cargo.toml中,就像使用以下示例使用cargo build --release进行编译一样。
  • 使用您喜欢的模拟器运行(见run_questa.sh/run_icarus.sh/run_cadence.sh

在gitpod上运行(使用Icarus Verilog):https://gitpod.io/#https://github.com/benbr8/rstb_examples

依赖项

~8.5MB
~156K SLoC