【问题标题】:Cocotb using generics/parameters in gate level simulationCocotb 在门级模拟中使用泛型/参数
【发布时间】:2017-04-22 06:19:34
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 通常情况下,合成器的输出看起来不太像 RTL。经典的方法是使用包装器:在层次结构的虚拟层中实例化您的门级模型,其接口(在您的 VHDL 案例中为实体)看起来像原始 RTL。

标签: python vhdl simulation cocotb netlist


【解决方案1】:

将配置传递给 Python Cocotb 代码可能是可能的,但它很容易出错,因为您必须确保传递已用于综合的相同值。

另一种解决方案是将顶级实体的配置包存储在单独的文件中,例如top_config.vhdl,内容为:

library ieee;
use ieee.std_logic_1164.all;

package top_config is

  constant AA : positive := 5;
  constant BB : integer := 10;

end package top_config;

此处定义的常量随后用作顶级实体的泛型的默认值或直接在顶级实体内使用。

现在可以通过 Cocotb 测试台中的一些 Python 代码解析包:

from re import compile as re_compile

constantRegExpStr  = r"^\s*constant\s*"   # keyword and spaces
constantRegExpStr += r"(?P<name>\w+)"     # name fo constant
constantRegExpStr += r"\s*:\s*"           # divider and spaces
constantRegExpStr += r"(?P<type>\w+)"     # type name
constantRegExpStr += r"\s*:=\s*"          # assignment and spaces
constantRegExpStr += r"(?P<value>[0-9]+)" # value
constantRegExpStr += r"\s*;"              # end of statement

constantRegExp = re_compile(constantRegExpStr)


with open("top_config.vhdl") as f:
    for line in f.readlines():
        m = constantRegExp.match(line)
        if m is not None:
            print("constant '{0}' with value '{1}'".format(m.group('name'), m.group('value')))

您可以将其添加到字典或执行其他操作,而不是打印匹配项。

【讨论】:

  • 您提供的解决方案很有意义。不过,我有一个问题。这意味着在我的顶层使用配置包来获得包的可见性。如果我正在使用的顶层不是设计顶层,我认为这是一个潜在的问题。在这种情况下,我的块“上级”驱动的泛型值与驱动泛型的值的包内容不冲突吗?
  • 此配置包必须包含在您用于综合的 RTL 顶层中。门级顶层不需要包,反正它没有泛型。还是你的意思是别的?
  • 对不起,我的解释不清楚。我的问题/恐惧是我在设计顶层以下工作(例如分层综合)。在这种情况下,我担心真正顶层的 elab 的潜在冲突,这将在包给出的泛型值和实例化时实例化我的块。你明白我的意思吗?
  • @user1654361 现在我明白了。合成实体(中间顶层)的参数是如何设置的?通过默认值?如果是,那么这些默认值可以来自一个包,而不会对整体设计顶层产生任何干扰。
  • 我用默认值直接在文件中定义它们。我寻求了您提供的解决方案,但基于解析包含泛型的文件。感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-04-12
  • 1970-01-01
  • 2012-10-04
  • 2020-08-28
  • 1970-01-01
  • 2019-10-01
  • 1970-01-01
相关资源
最近更新 更多