VHDL 根据布尔常量分配范围
VHDL assign range based on boolean constant
似乎无法在 VHDL 中执行类似于以下代码的功能。这可能使用其他语法吗?有没有可以放在范围声明中的 if 语句之类的东西?我在网上找不到任何相关信息。
if not using_census_vector then
variable diff : natural range 0 to ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1 := 0;
else
variable diff : natural range 0 to ((window_size * window_size * 3 )) := 0;
end if;
使用一个函数来return高指数。可能不需要参数(除非你希望它通用并移动到一个包中)因为所有其他参数都应该在范围内
function calc_high return integer is
begin
if not using_census_vector then
return ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1;
else
return ((window_size * window_size * 3 ));
end if;
end function
variable diff : natural range 0 to calc_high := 0;
似乎无法在 VHDL 中执行类似于以下代码的功能。这可能使用其他语法吗?有没有可以放在范围声明中的 if 语句之类的东西?我在网上找不到任何相关信息。
if not using_census_vector then
variable diff : natural range 0 to ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1 := 0;
else
variable diff : natural range 0 to ((window_size * window_size * 3 )) := 0;
end if;
使用一个函数来return高指数。可能不需要参数(除非你希望它通用并移动到一个包中)因为所有其他参数都应该在范围内
function calc_high return integer is
begin
if not using_census_vector then
return ((2**cRed_pixel_bits)+(2**cGreen_pixel_bits)+(2**cBlue_pixel_bits)) * window_size * window_size - 1;
else
return ((window_size * window_size * 3 ));
end if;
end function
variable diff : natural range 0 to calc_high := 0;