gpt4 book ai didi

vhdl - 我可以从外部访问实例化实体内部的常量吗?

转载 作者:行者123 更新时间:2023-12-04 15:10:18 26 4
gpt4 key购买 nike

我有一个带有通用参数列表的 VHDL 实体。该实体的架构计算了几个常量,这些常量是创建预期功能所必需的。

是否可以从外部访问这些常量之一?

示例 1:
假设有一个 FIFO,它根据 DEPTH 和 OUTREG 决定最佳实现是什么(基于寄存器、基于 SRL 或基于 BlockRAM)。根据这一点,通过 FIFO 的最小延迟可以在 1 到 2 个周期之间变化。

示例 2:
将相同的 FIFO 视为跨时钟兼容。现在最小延迟还取决于选择的同步电路和频率差。

示例 3:
一个划分实体需要N个周期来计算一个div b。 N 取决于 BITS、RADIX、OUTREG、IS_SIGNED、...

进一步假设每个实体都有一个 NATURAL 类型的 MIN_DELAY 常量,它对其他实例很感兴趣。

例如。实例化实体需要知道它至少必须等待结果多长时间。

我可以想到 2 种解决方案,但我认为这两种解决方案都不是很好的解决方案。

解决方案1:
我可以将计算的算法存储在一个包中,以便全局访问。但这违背了封装原则:)。外界只需要知道延迟值而不是算法。

解决方案2:
我可以使用有效位。这在动态、自适应或流水线系统中始终是一个很好的解决方案,但在综合时不能使用该位进行进一步选择或优化。

可能的解决方案 3:
VHDL 具有定义新属性的能力,但可以访问它们吗?

示例实体:alu_div:

constant MIN_DELAY : NATURAL := BITS / log2(RADIX) + 2;
attribute DELAY : NATURAL;
attribute DELAY of alu_div : entity is MIN_DELAY;

示例顶部:
mydiv : entity work.alu_div
generic map (....)
port map (....);

blk : block
constant my : NATURAL := mydiv'delay;
begin
....
end block;

新:可能的解决方案 4:
我发现了这个 SE 问题,其中 Jim Lewis 指出分层引用也应该与常量一起使用。 alias MY_DELAY is <<constant mydiv.DELAY : NATURAL >>; Get internal signals of vhdl design in ncvhdl (alternative to modelsim's signal spy)

最佳答案

好问题。我有时也觉得需要“OUT 模式泛型”,其实际值是在体系结构内计算的,再次允许层次结构中的更高级别了解(并调整到)处理单元的管道深度。

可能值得写一份提案以允许 VHDL-201x 中的某些内容并将其提交给 standards group但与此同时,我们必须忍受我们所拥有的。

我通常的解决方案是使用与单位关联的包,同时保存初始常量(而不是通用)和相关数量。这将“封装破坏”限制为那些 use 的编译单元。包装,使它们至少易于识别。

在包中,常量在可能的情况下被延迟,或者无参数(不纯)函数,它们等同于相同的东西。

我还没有探索过的一种可能的方法是实体声明,在 PORT list 之后。 , 也允许零个或多个 entity_delarative_item s。如果这些可能包含函数声明,那么我们可能会以这种方式返回此类信息。

编辑:大卫指出了一个 LRM 规则 (8.3),它阻止了当前 VHDL 版本的这种方法:该规则的有限放宽可能是“输出模式泛型”的替代方法。

实体声明还可以包括 begin和一些被动构造 - 例如断言一组泛型和端口宽度是一致的。这样你就必须输入所有必需的值,但至少构建会失败报告错误,例如widthdepth不一致。

关于vhdl - 我可以从外部访问实例化实体内部的常量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30564426/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com