分辨率功能

解析了哪种类型的信号具有相关的分辨率函数。它可以由多个 VHDL 进程驱动。每当驱动程序分配新值时,都会调用分辨率函数来计算结果值。

解析函数是一个纯函数,它接受一个参数并返回要解析的类型的值。该参数是要解析的类型的一维无约束元素数组。例如,对于 bit 类型,参数可以是 bit_vector 类型。在模拟期间,当需要计算结果值以应用于乘法驱动信号时,调用分辨率函数。它传递一个由所有源驱动的所有值的数组,并返回结果值。

以下代码显示了 bit 类型的解析函数的声明,其行为类似于有线 and。它还说明了如何声明 bit 类型的已解析子类型以及如何使用它。

-- File md.vhd
entity md is
end entity md;

architecture arc of md is

  function and_resolve_bit(d: bit_vector) return bit is
    variable r: bit := '1';
  begin
    for i in d'range loop
      if d(i) = '0' then
        r := '0';
      end if;
    end loop;
    return r;
  end function and_resolve_bit;

  subtype res_bit is and_resolve_bit bit;

  signal s: res_bit;

begin

  p1: process
  begin
    s <= '0', '1' after 1 ns, '0' after 2 ns, '1' after 3 ns;
    wait;
  end process p1;

  p2: process
  begin
    s <= '0', '1' after 2 ns;
    wait;
  end process p2;

  p3: process(s)
  begin
    report bit'image(s); -- show value changes
  end process p3;

end architecture arc;

编译,详细说明和模拟,例如使用 GHDL,不会引发错误:

ghdl -a md.vhd
ghdl -e md
./md
md.vhd:39:5:@0ms:(report note): '0'
md.vhd:39:5:@3ns:(report note): '1'