解析度功能

解析了哪種型別的訊號具有相關的解析度函式。它可以由多個 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'