使用VHDL 2008有没有一种方法可以定义一个抽象实体,该抽象实体的泛型类型具有该类型的端口以及不受约束的数组或从该基类型派生的记录?是这样的:如何在VHDL 2008中创建派生类型的抽象数据类型?
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
entity COMP_EXCH is
generic(type T; -- VHDL-2008 abstract generic base type
function "<"(L,R:T) return BOOLEAN; -- VHDL-2008 abstract generic function
LATENCY:INTEGER:=0);
port(I0,I1:in T;
O:out T_VECTOR(0 to 1));
end COMP_EXCH;
architecture TEST of COMP_EXCH is
begin
O<=(I1,I0) when I1<I0 else (I0,I1);
end TEST;
其中T_VECTOR是:
类型T_VECTOR为T的阵列(INTEGER范围<>);
和T是一个任意的抽象基类型。面临的挑战是如何插入T_VECTOR的定义,T_VECTOR的定义取决于引入了T的泛型之后但T_VECTOR需要的端口之前的T?这两种类型如何保持通用和抽象,但其中一个是另一个不受约束的阵列?没有抽象类型,人们会使用一个包来实现这一点,它将包含T和T_VECTOR的类型定义,但是如何在VHDL 2008中使用抽象类型来完成?
我想能够有一些派生类型,如无约束数组或记录(例如一个复杂的记录类型T的实际和虚构文件)仍然是抽象的,并使用它们来定义抽象组件上面的例子。
,它必须得到一个实体?会执行作为子程序可以接受? –
它必须是一个实体,这是通用分类网络设计的一部分。我想创建一个具有抽象基类型T的抽象排序网络实体,它是一个absract“<”函数,用于比较T类型的两个项目和T类型的非约束阵列的输入和输出端口。该实体将实现排序网络可以使用用户定义的“<”函数对任何类型元素的数组进行排序。 – user2426721
您可以通过提供类型T,比较函数“<”和输入和输出信号来实例化此实体,这些信号是T大小的数组,您将得到所需的排序网络。 COMP_EXCH只是大型设计的基本组成部分。除了这个T和T_VECTOR问题外,我已经有其他所有工作了。 – user2426721