是否可以为 VHDL 中的记录定义类似 OOP 样式的实例方法以被 XST 识别?
对于记录类型矩形:
type rectangle is record
x : integer;
y : integer;
width : integer;
height : integer;
end record;
我想定义is_square、get_area等方法。
可以使用属性来完成吗?
不,但你可以接近protected
类型。
这是一个示例,取自VHDL 中受保护的共享变量:IEEE Std 1076a
type shared_counter is protected body
variable count : integer := 0;
procedure reset is
begin
count := 0;
end procedure reset;
procedure increment (by : integer := 1) is
begin
count := count + by;
end procedure increment;
impure function value return integer is
begin
return count;
end function value;
end protected body shared_counter;
我不知道受保护类型的概念是否可以与 XST 综合。
您是否有某些原因不想简单地定义一些函数以及您的自定义类型?
除了定义新函数(例如上面的 is_square)之外,如果这对您的代码有意义,您还可以覆盖现有函数(例如 +、< 等)。
通常,您会将自定义类型和操作它们的函数包装到一个包中,然后在您的代码中使用。例如,参见标准 VHDL math_real 和 numeric_std 包。