VHDL别名语法“<<>>>”

时间:2013-06-25 00:05:58

标签: syntax alias vhdl

我想了解下面代码行中使用的语法,其中使用ALIAS声明创建备用名称。具体来说,我想知道<<>>意味着什么。一个示例别名声明是

alias x2_dac_data is
   << signal server.x2_dac_data : std_logic_vector(23 downto 0) >>;

其中server是实例化组件,x2_dac_data是组件的信号,但未在端口声明中列出。

我查看了Pedroni的文本和课程指南,两者都没有引用与别名相关的<< ... >>语法。

由于

2 个答案:

答案 0 :(得分:9)

双重Less-Thans和双重大字符(&lt;&lt;&gt;&gt;)包含一个外部名称,它是通过设计模型的层次结构对象的路径名(例如信号,常量,变量)。预期用途是用于设计验证,允许测试平台到达设计顶层不可见的对象。

参见Peter Ashenden和Jim Lewis 设计师VHDL指南(第3版),第18.1节External Names和Doulos VHDL-2008: Easier to use,分层名称或IEEE Std 1076- 2008,8.7外部名称。

VHDL设计师指南的第561页有一个例子:

alias duv_data_bus is
 <<signal .tb.duv_rtl.data_bus : std_ulogic_vector(0 to 15)>>;

语法在第560页中介绍。在Google图书预览中可以看到第559-562页。在 VHDL设计指南中处理外部名称的示例也可以在同一作者的第2章第2.1节“ VHDL 2008的外部名称<新增内容”中找到。虽然没有EBNF语法描述进一步深入到外部名称背后的哲学。不幸的是,该书的Google图书预览未达到第2.1节。 Jim Lewis正在组织IEEE VHDL分析和标准化组(VASG)的P1076研究组,负责开发IEEE Std 1076-201X的下一版本。 Peter Ashenden也是VHDL标准化工作的长期贡献者。

答案 1 :(得分:2)

比包中的分层信号引用的别名更好的解决方案:使用包在bfm-procedures和testbench toplevel之间共享信号。例如:

library ieee;
use ieee.std_logic_1164.all;

--VHDL 2008 with questasim
package bfm is

  signal tb_ii_a : std_logic;
  signal tb_ii_b : std_logic;
  signal tb_oo_c : std_logic;

  procedure wiggle;
end package;

package body bfm is

  procedure wiggle;
  begin
    tb_oo_c <= force in '1';
    wait for 10 ns;
    tb_oo_c <= force in '0';
    wait for 10 ns;
    tb_oo_c <= force in tb_ii_a and tb_ii_b;
  end procedure;

end package body;


library ieee;
use ieee.std_logic_1164.all;
use std.textio.all;
use std.env.all;

library work;
use work.bfm.all;

entity tb;
end tb;

architecture tb_dut1 of tb is
begin

  dut : entity work.dut port map(
    oo_a => tb_ii_a,  -- output of dut input  of tb bfm
    oo_b => tb_ii_b,  -- output of dut input  of tb bfm
    ii_c => tb_oo_c   -- input  of dut output of tb bfm
  );


testcase : process
begin

  wiggle;

  wait for 100 ns;
  std.env.stop(0);
end process;

end architecture;