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


11

如何将VHDL源代码的内部信号带到测试台,以便可以将它们视为波形?我使用Active 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;

当您开始仿真时,您的模拟器将详细说明所有元素。之后,它将查找您使用外部名称建立的链接。在我看来,你的道路是错误的。我编辑了答案,以提供有关路径构造的更多详细信息。没有关于您的设计的知识,我无法说出您的路线出了什么问题。
Thomas S.

就像我在回答中说的那样,您必须使用标签而不是实体名称。正确的路径应该是.tp_spi_dac.uut.ch1_byte_data_sent
Thomas S.

您的建议解决了我的问题@ThomasS。非常感谢!我在观看VHDL版本时遇到了问题,在观看了大卫建议的视频后,我将其解决。我知道不建议您写感谢信,但是感谢Thomas纠正了我的编辑(我确实对这种markdown格式感到困惑)。
Suhasini 2014年

Answers:


11

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

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

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

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

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

绝对路径的一个示例是

.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,但提供了命令行参数或配置选项来启用它。


我尝试了你的建议。别名ch1_byte_data_sent是<<信号.TB_SPI_DAC.SPI_DAC.ch1_byte_data_sent:STD_LOGIC_VECTOR(23到0)>>:= x“ 000000”; 执行此操作时,出现“期望的标识符或字符串文字”错误。任何想法为什么我得到错误?(很抱歉帖子有任何错误,这是我第一次来!)
Suhasini 2014年

我的答案可能不够清楚。使用时,alias您必须在新语句中编写分配。好处是您可以使用别名而不是长外部名称。
Thomas S.

1

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

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

虽然我从未使用过Active-HDL,但我知道它具有设计浏览器,该浏览器应允许您从层次结构中拾取信号以在波形中显示。请参阅Aldec的“ 编译和仿真”视频(5:02,min:sec)。

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

从结尾的2:22开始,视频显示了一个do文件(宏),该文件控制着模拟:

2:22做档案

我们使用wave命令将设计顶层中的每个信号添加到波形显示中。还应该可以在设计层次中的任何地方指定信号。

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

这段简短的视频根本没有显示辅助层次结构级别的信号。(简短的视频演示中塞满了很多东西)。

我想知道是否有任何与工具无关的方法来实现我的目标。

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

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

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

好消息是,它们倾向于相互复制概念,例如do文件,您可以使用通用数据库来 描述可移植性,这些文件可以通过编程生成,以实现可移植性,从而克服了语法和语义上的差异。以编程方式调用工具的命令行界面语法也可能存在差异。

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


0

诸如xilinx之类的工具可以选择查看内部信号。

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


我不希望干扰我的输入和输出端口。因此不能声明任何新的输出行。我在测试台中声明了信号,但是看不到波形上的任何输出(仅显示我的初始化值零而不执行功能)。还有其他方法吗?
Suhasini 2014年

0

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


托马斯所说的完全解决了我的问题。我解决了我之前提到的错误,该错误是由于Lattice的iCEcube2设计软件提供的Active-HDL中的默认值设置为VHDL 1993而引起的。现在,当我尝试初始化仿真时,我面临一个致命的精心设计错误。我试图找出为什么会发生这种情况,希望这不是有限许可问题。
Suhasini

您能告诉我们该消息吗?
里克
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.