我想了解下面代码行中使用的语法,其中使用ALIAS声明创建备用名称。具体来说,我想知道<<
和>>
意味着什么。一个示例别名声明是
alias x2_dac_data is
<< signal server.x2_dac_data : std_logic_vector(23 downto 0) >>;
其中server
是实例化组件,x2_dac_data
是组件的信号,但未在端口声明中列出。
我查看了Pedroni的文本和课程指南,两者都没有引用与别名相关的<< ... >>
语法。
由于
答案 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;