You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何为VHDL自定义记录类型定义自定义属性'depth'

解决VHDL自定义记录类型的'depth'属性定义问题

你遇到的错误原因很明确:CustomRecord是包含非限定signed类型成员的记录类型,类型本身并没有固定的S'length值——S的宽度只有在实例化具体对象(比如信号X)时才会确定。直接对记录类型CustomRecord引用.S成员并取长度,VHDL编译器是不允许的,所以才会报“record type 'CustomRecord' cannot be selected”。

正确的实现方式

要实现用X'depth替代X.S'length的需求,你需要把自定义属性绑定到具体的记录对象(比如信号X),而不是记录类型本身:

  1. 先声明自定义属性:
attribute depth : integer;
  1. 在实例化信号X后,为该信号绑定depth属性,值为X.S'length:
signal X : CustomRecord(S(21 downto 0));
attribute depth of X : signal is X.S'length;
  1. 之后就可以用X'depth简化信号Y的声明:
signal Y : CustomRecord(S(X'depth downto 0));

针对复杂场景的扩展(你提到的signed数组成员)

如果你的X.S是signed数组类型,只需要调整属性绑定的取值逻辑即可,比如根据数组维度取对应长度:

-- 假设X.S是二维signed数组,取第一维度的长度作为depth
attribute depth of X : signal is X.S'length(1);

之后同样可以用X'depth简化复杂的声明表达式。


内容的提问来源于stack exchange,提问作者Charlie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 19:04:55