如何在 VHDL 中将下层模块的内部信号带出到上层模块?

电器工程 视频文件
2022-01-26 10:01:09

如何将我的 VHDL 源代码的内部信号带到我的测试平台,以便我可以将它们视为波形?我使用有源 HDL。我想知道是否有任何工具独立的方法可以实现我的目标。任何帮助表示赞赏。

我现在得到这个错误。在此处输入图像描述

我的源代码是

entity SPI_DAC is
    Port ( 
    -- inputs and oututs
    )
end SPI_DAC;

architecture Behavioral of SPI_DAC is 
    --These are my internal signals 
    signal ch1_byte_data_sent       : STD_LOGIC_VECTOR(23 downto 0)     := x"000000"; 
    signal ch1_byte_cmd_sent        : STD_LOGIC_VECTOR(23 downto 0)     := x"000000";
    --and a few other signals
begin 
    --functionality 
end Behavioral;

我的测试台代码是

entity tb_spi_dac is
end tb_spi_dac;

architecture behavioral of tb_spi_dac is
    component spi_dac
    port(
    --declaration, inputs and outputs
    );
    end component;
begin
    uut: spi_dac port map(
    --map ports
    );
    --stimulus process
end;
4个回答

您要查找的内容在 VHDL 中称为外部名称(或分层名称)。它们可用于规避范围/层次结构的可见性。语法类似于下面的示例。

<<signal path_name : std_logic_vector(7 downto 0)>>

您还可以使用外部名称访问常量和变量。但是,您必须更改外部类型中的类型。您可以直接使用外部名称进行读/写访问。但是,您应该使用别名来提高可读性。

alias signal_name is 
    <<signal path_name : std_logic_vector(7 downto 0)>>;

外部名称必须包含您要访问的元素的路径。路径可以是绝对的或相对的。路径中的各个元素由点分隔。请注意,您必须提供实例/流程/实体/...的标签,而不是名称。绝对路径以 a 开头,.后跟顶级名称。对于相对路径,您可以使用^它在层次结构中向上移动。当使用某些包中的常量/信号时,您还可以使用它@来移动到库。

绝对路径的一个例子是

.tb_name.instance_label.sub_instance_label.signal_name

要使用相对名称从测试台访问相同的元素,您可以使用

instance_label.sub_instance_label.signal_name

当您想从 sub_instance 访问一些测试台信号/常量时,您可以使用

^.^.constant_name

要访问位于配置库中的配置包中的其他一些常量,您可以使用

@config.pkg_name.other_constant_name

您可以使用 David 指出的模拟器设计/库浏览器来查找正确的路径名。

此功能是在 VHDL-2008 中添加的,因此所有已经支持 VHDL-2008 的工具(包括我认为的 ActiveHDL)都应该支持它。大多数模拟器默认不使用 VHDL-2008,而是提供命令行参数或配置选项来启用它。

如何将我的 VHDL 源代码的内部信号带到我的测试平台,以便我可以将它们视为波形?

测试台意味着模拟——没有任何端口的实体通常不符合综合条件。

虽然我从未使用过 Active-HDL,但我知道它有一个设计浏览器,可以让您在层次结构中选择信号以显示在波形中,请参阅 Aldec 的编译和仿真视频(5:02,分:秒)。

大约现在我得到的印象是视频可能会引起混乱,也许在这种特殊情况下。

在结束后的 2:22,视频显示了一个控制模拟的 do 文件(宏):

2:22 做文件

我们看到设计顶层中的每个信号都已使用 wave 命令添加到波形显示中。还应该可以在设计层次结构中的任何位置指定信号。

基本思想是许多模拟器允许您安排要收集的信号(和一些允许变量)以进行波形显示。

这段简短的视频根本没有显示附属层级的信号。(简短的视频演示中有很多内容)。

我想知道是否有任何工具独立的方法可以实现我的目标。

如上所述,您的目标似乎是将内部信号视为波形。

现在是坏消息 - 模拟器功能或接口,波形转储的调度信号等没有标准化。这些都是实现定义的。

几乎可以保证,您可以将设计层次结构中的任何位置的信号转储到波形查看器或波形转储文件,并使用任何模拟实现,这样做的方法是实现定义的。

好消息是它们倾向于相互复制概念,例如 do 文件,您可以通过编程方式生成这些文件以实现可移植性,使用描述多个实现平台上的功能验证的通用数据库 ,克服语法和语义上的差异。以编程方式调用工具的命令行界面语法也可能有所不同。

可移植性的想法没有优雅地包含多个 GUI。

像 xilinx 这样的工具可以选择查看内部信号。

与工具无关的简单方法是声明单独的输出线并将内部信号连接到这些线。

如果您在测试台中声明了信号但看不到任何输出,则您在实例化要测试的实体的实例化语句中可能存在问题。检查您是否使用实体实例化语句或组件实例化正确实例化它。确保测试台中的信号连接到被测实体。如果这不能解决问题,请发布测试平台代码以便我们提供帮助。