问题标签 [cocotb]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
435 浏览

python - 带有 cocotb 的 verilog :分配语句

我的 verilog 代码是一个只使用assign sum = a+b. 问题是,虽然使用cocotb,运行它时sum仍然未知a并且b具有有效值。当我制作sumreg 类型时,它可以工作。

gtkwave 输出

0 投票
2 回答
573 浏览

python - 如何在 Cocotb 中指定记分牌的比较功能?

我想扩展 Cocotb 的Endian Swapper示例,以便它还检查被测设备 (DUT) 输出的包的内容。在提供的示例代码中,生成预期输出的函数将未修改的输入事务model附加到预期输出列表中。该列表作为记分牌的参数给出。

为了理解记分板是如何工作的以及为什么该model函数没有附加字节交换事务,我在 DUT 中引入了一个设计错误。在endian_swapper.vhdl的以下代码块中

if我只是将第一行中的条件反转为: (byteswapping /= '0')

重新运行测试台后,我预计测试会失败,但它仍然通过:

似乎在记分板的创建中缺少比较功能:

在 的调用中应该有第三个参数add_interface,但是这个参数没有记录。

那么,如何指定此比较功能,以便还检查包内容?

我正在使用 QuestaSim 进行模拟,并使用make SIM=questa. 我还清理了运行之间的构建目录。

0 投票
2 回答
661 浏览

verification - 如何在 Cocotb 中指定时间分辨率?

当我使用 QuestaSim 在 VHDL 和 Verilog 模式下模拟 Cocotb 的Endian Swapper示例时,我得到了不同的时钟周期。在提供的示例代码中,两种模式的时钟都以相同的方式生成:

在 Verilog 模式下运行时:

时钟周期为 1000 ns(一千纳秒),因此时间分辨率为 100 ps。

在 VHDL 模式下运行时:

时钟周期为10000 ns(纳秒),因此时间分辨率为1 ns。

我在其他两个 VHDL 项目中使用相同的时钟生成。在一个中,我也得到了 10000 ns 的时钟周期(1 ns 分辨率)。但在另一个中,时钟周期仅为 10 ns,分​​辨率为 1 ps。

为什么所有这些运行模式和项目的时间分辨率不同?

如何一致地指定时间分辨率?

0 投票
1 回答
1112 浏览

vhdl - Cocotb VHDL 需要 FLI

我目前正在建立一个基于 Cocotb 的验证环境。

我刚刚发现,如果使用 VHDL,Cocotb 提供的示例在我的情况下不起作用,因为我的模拟器没有 FLI(外语接口)。我收到以下消息:

错误(可抑制):(vsim-FLI-3155)此版本的 ModelSim 中未启用 FLI。

(我有 ModelSim 的 Altera Starter 版本,确实不包括 FLI)。

令我惊讶的是该示例适用于 Verilog。据我了解,Verilog 使用的不是 FLI,而是 VPI。

如果对 FLI 的需求是强制性的,有人可以向我解释一下吗? Cocotb 中有什么功能可以启用它?

另一个问题:如果我的顶部是 Verilog,而我的其余设计是 VHDL 怎么办?它应该工作吗?

0 投票
1 回答
484 浏览

vhdl - cocotb 总线监视器

我正在尝试将 Cocotb 设置为我的验证环境。我一直在看这些有用的例子,但我不确定我应该去的方向。

我的块可以看作:

  • 4条总线输入
  • 1 个时钟和 1 个复位作为输入
  • 2 总线输出

输出是输入信号的组合和顺序处理的结果。

我需要更进一步的部分是如何为我的输入和输出总线正确定义监视器,这些(据我所知)不符合 AvalonST

我查看了 Cocotb 提供的示例,阻止我获得灵感的是所提供的:

  • 没有监视器(如加法器)
  • 使用 AvalonST 驱动程序(如 endianswapper)

我目前的问题是:

  • 在查看平均示例时,我看到这个人已经定义了自己的StreamBusMonitor,我应该按照我的理解做同样的事情(监控我的 4 个输入以提供我的参考模型)。我对么?
  • 我不明白信号的名称如何与StreamBusMonitor我看到以下行匹配:
    dut_out = StreamBusMonitor(dut, "o", dut.clk)
    但我不明白“o”的用途,以及它在 StreamBusMonitor 中的使用位置。有人可以帮助我吗?
  • 我还没有找到任何官方的 Cocotb 论坛。有没有比 StackOverflow 更正式的地方来问我关于 Cocotb 的初学者问题?

感谢你的帮助。

0 投票
1 回答
552 浏览

python - Cocotb 在门级模拟中使用泛型/参数

我已经成功地为我的设计设置了一个 Cocotb 验证环境,我很高兴它适用于 RTL(在我的例子中是 VHDL)的工作方式。

我的设计使用泛型,我在 python 代码的几个位置(主要在 run_test 和模型中)检索这些泛型的值,遵循模板:
my_generic = dut.GEN_NAME.value

不幸的是,这在门级仿真的情况下不起作用,因为我的综合设计不再具有泛型,因此 dut.GEN_NAME.value 不存在。

我是否应该朝着从模拟流程(Cocotb 的 makefile)中获取参数/泛型值的方向前进?

如果是这样,最干净的方法是什么?使用环境变量?

(顺便说一句,我使用 Questa,即使我不希望这方面依赖于模拟器......)

感谢您的帮助和建议...

0 投票
1 回答
227 浏览

cocotb - 如何使用 cocotb 打印日志消息

在 cocotb 官方快速入门指南中,打印日志消息的方法是在 dut 对象上使用 _log.info() :

如果我使用 Cocotb 的最后一个主版本这样做,我会收到一个不推荐使用的警告:

那么记录最新版本 cocotb 信息的好方法是什么?

谢谢

0 投票
1 回答
478 浏览

python - 在 cocotb 中使用 ghdl 修改 VHDL 通用值

我设法用 cocotb 毫无问题地读取通用模块值。但是如果我写不出来。

我的 VHDL 泛型是:

我可以在 cocotb 中阅读它:

但如果我尝试改变它:

我得到这个 python 错误:

有没有办法使用 GHDL 作为模拟器来做到这一点?

0 投票
1 回答
209 浏览

python - 如何减少 Cocotb 中的日志行大小

在 cocotb testbench 中,终端中的日志打印有很长的一行:

这对于大多数 xterminal 来说太长了。是否有减少行长的选项?也许我们可以隐藏一些信息,如消息行号或函数名?

0 投票
0 回答
390 浏览

python - cocotb 中带有 generate 语句的不可用模块名称

我使用 cocotb v1.0 和 ghdl 0.35-dev(llvm 和 gcc 后端)。

顶层包含一个简单的 for generate 语句:

我尝试使用“dut.gen_pe[1]”访问我的 cocotb 测试台中第一个生成的模块。它产生错误:

在遍历 dut 时,它会从 generate 语句中发现以下子模块:

不幸的是,无法使用“dut.(1)”访问它们,因为它不是有效的 python 语法。

接下来我尝试从 cocotb/tests/test_cases/test_array 执行测试数组测试用例:

几乎所有的测试都失败了:

test_gen_loop 的输出是:

这与我设计中的错误相似。所以我猜这是模块命名的问题。

知道如何获取有效的模块名称或完全修复错误吗?

编辑:最小的例子

文件夹:/home/Programme/cocotb/examples/generate

/home/Programme/cocotb/examples/generate/hdl/top.vhd

/home/Programme/cocotb/examples/generate/tests/top_cocotb.py

/home/Programme/cocotb/examples/generate/tests/Makefile

执行 with 后make,gpi 模块名称(1) ... (4)而不是gen_pe(1) ... gen_pe(4)打印到控制台。

更新:

gpi 模块名称在最新版本的 ghdl 中是固定的。但是 cocotb 测试数组测试用例仍然失败。