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

VHDL-2008层级库路径形式实例化相关规则问询

VHDL语法问题解答

1. 该写法的正式名称

你给出的代码片段不属于实体/组件实例化,它的正式名称是并行过程调用(Parallel Procedure Call):Osvvm.TbUtilPkg.CreateClock是OSVVM工具包中预先定义好的无返回值过程,你在测试平台结构体的并行执行区域直接调用了该过程生成时钟。

2. 该特性是否为VHDL-2008新增

不是,并行过程调用是VHDL-93标准就已经支持的语法,并非2008版本新增。你提到的“匿名实例名规则放宽”是针对实体/组件实例化的修改,和过程调用无关:

  • VHDL-2002及更早版本要求实体/组件实例化必须显式指定实例标签,不可省略
  • VHDL-2008版本才放宽了该限制,允许实体/组件使用匿名实例化写法
  • 并行过程调用的标签从VHDL-93开始就是可选项,不需要依赖2008标准的规则修改

3. 并行过程调用的使用规则

  • 调用对象必须是预先定义的过程:跨模块调用需要先声明对应的库、导入对应的包,和你示例中导入osvvm.OsvvmContext的写法一致
  • 调用位置必须在并行执行区域:包括结构体的begin和end之间、块语句内部、生成语句内部等;如果在进程、子程序等顺序执行区域内调用过程,属于顺序过程调用,不属于本范畴
  • 调用标签可选:你可以选择给调用加标签增强可读性,写法如下:
ClkGen : Osvvm.TbUtilPkg.CreateClock ( 
    Clk        => Clk, 
    Period     => Tperiod_Clk 
);
  • 参数关联支持两种写法:位置关联、命名关联(你示例中使用的=>就是命名关联写法,更清晰,推荐在测试平台代码中使用)
  • 过程内部定义的逻辑会在调用位置直接展开,适合封装时钟生成、复位生成、激励注入等测试平台通用逻辑。

4. 匿名实例规则补充

你提到的匿名实例规则仅适用于实体/组件实例化场景,和过程调用没有关系:

  • 2008之前标准要求实体实例化必须写[实例标签] : [实体名] port map(...),标签不能省略
  • 2008之后标准允许省略实例标签,写为entity work.xxx port map(...)的匿名形式

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 01:39:01