我有一个VHDL包,它定义了一个函数(前向声明)和一个常量.常量的值由该函数计算,该函数的主体位于包体中.
截至目前,ModelSim/QuestaSim是唯一不喜欢此代码的工具.它需要2个包,因此在常量声明之前解析了主体.
package test is
function mytest(param : boolean ) return boolean;
constant value : boolean := mytest(TRUE);
end package;
package body test is
function mytest(param : boolean ) return boolean is
begin
return not param;
end function;
end package body;
Run Code Online (Sandbox Code Playgroud)
这在VHDL和其他工具中是不允许使用宽松的解析规则,还是ModelSim问题?
使用延迟常量,并在mytest详细说明函数后在包体中赋值,即使在ModelSim中也是如此:
package test is
function mytest(param : boolean ) return boolean;
constant value : boolean;
end package;
package body test is
function mytest(param : boolean ) return boolean is
begin
return not param;
end function;
constant value : boolean := mytest(TRUE);
end package body;
Run Code Online (Sandbox Code Playgroud)
处理不同工具似乎不一致,因为您注意到ModelSim需要延迟常量,但Altera Quartus II允许在函数详细说明之前分配常量,因此没有延迟常量.
VHDL-2008标准涵盖了以下方面的子程序阐述:
14.4.2.1概述:......,在制定相应的机构之前调用子程序是违法的.
子程序机构细化的效果描述如下:
14.4.2.2子程序声明,实体和实例:......除了未经实例化的子程序的子程序主体之外,制定子程序主体除了确定机构从那时起可以用于执行子程序的调用.
| 归档时间: |
|
| 查看次数: |
1419 次 |
| 最近记录: |