将配置传递给 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')))
您可以将其添加到字典或执行其他操作,而不是打印匹配项。