我有一个系统,它由必须连接到总线的几个组件组成。然而,为了保持系统总线的独立性,我为系统提供了一个通用总线端口,我通过一个总线特定模块运行该总线端口,该模块在我的系统和特定总线之间进行转换。因此,通过切换翻译模块很容易将整个系统连接到不同的总线。
但是,我不想每次都将系统与翻译模块连接起来。因此,我想知道是否可以从通用参数实例化模块,并将其类型用于体系结构的输出。
稍微说明一下,整体就更清楚了,我的翻译模块有以下“签名”。
entity translate<BusName>
port(toSystem: out toSystem_t,
fromSystem: in fromSystem_t,
toBus: out to<BusName>_t,
fromBus: in from<BusName>_t
end entity;
我现在想构建一个包含系统和翻译器的实体,基于通用,有点像这样:
entity entireSystem is
generic(busType := translate<BusName>)
port(toBus: out to<BusName>_t,
fromBus: in from<BusName>_t)
end entity
architecture genArc of entireSystem is
signal toTrans: fromSystem;
signal fromTrans: toSystem;
begin
system: system(toTrans,fromTrans)
translator: translate<BusName>(
fromTrans,
toTrans,
toBus,
fromBus
)
end architecture;
我的问题是:我可以使用泛型参数直接实例化一个组件,还是必须走这if generic=xxx generate
条路?我可以从通用参数派生端口的类型吗?如果我可以使用一个通用参数来确定端口和实体,那将是最好的,这样就不会意外地为实体选择错误的类型。使用函数从泛型参数派生类型会很好。