3

我希望能够在我的测试平台层次结构中不断地强制降低信号。这是一个简单的示例,说明了我如何在测试台上执行此操作。

library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity double_inverter is
port(
  a : in std_logic;
  z : out std_logic
);
end double_inverter;

architecture x of double_inverter is
 signal b : std_logic;
begin

  b <= not a;
  z <= not b;

end architecture x;


library ieee;
use ieee.std_logic_1164.all;
use ieee.numeric_std.all;

entity inverter_tb is
end inverter_tb;

architecture y of inverter_tb is
  signal z : std_logic;
  signal clk : std_logic := '0';
begin

  clk <= not clk after 5 ns;

  dut : entity work.double_inverter
  port map(
    a => '0',
    z => z
  );

  continuous_stim : process(clk)
  begin

    << signal dut.b : std_logic >> <= force clk;

  end process;

end architecture y;

这在 Modelsim 10.4b 中有效,即 double_inverter 实例中的信号 b 将由 clk 设置,而不是信号 a,但是有更好的方法来控制外部名称信号吗?

谢谢你的帮助。

4

1 回答 1

4

在某些情况下,您可以使用外部名称的别名:

alias dut_b is <<signal dut.b : std_logic >> ;

由于我们认为信号是在架构中声明的,因此我们的直觉是将别名放在架构中。但是,在这种情况下,由于 DUT 尚未详细说明,因此不允许这样做。

您可能被允许将其放入过程中-我将不得不做一些研究以检查语言是否允许这样做。我担心的是进程不允许信号声明,所以我不相信它会允许进程中的信号别名 - 尝试它并让我们知道它是否有效是没有害处的。

通常,当我使用这样的东西时,我将它放在创建测试用例并由测试台实例化的组件的体系结构声明区域中。为了避免细化顺序问题,我确保首先在测试平台中实例化我的 DUT,并且通常是最后生成测试用例的组件(中间是基于事务的模型) - VHDL 按照实例化的顺序详细说明设计。

于 2017-07-06T00:02:04.417 回答