分辨率功能
解析了哪种类型的信号具有相关的分辨率函数。它可以由多个 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'