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
相关产品推荐
相关产品推荐

