More info about default values in VHDL:
Сори, вот так это делается. Если вязть исходник
entity LEFT is end entity;
architecture Arch of LEFT is
signal b1: boolean;
constant b2: bit := bit'left;
constant i1: integer := 1 + 1;
begin
end architecture;
В нём задекларировано три объекта (сигналы и константы). Причём у первого не задано начальное значение. Выяснить это можно нехитрым кодом (питон в данном случае)
from org.zamia.instgraph.interpreter import IGInterpreterRuntimeEnv, IGInterpreterCode
from org.zamia.vhdl.ast.VHDLNode.ASTErrorMode import EXCEPTION
tl = Toplevel(DMUID.parse("WORK.LEFT"), None)
module = project.getIGM().findModule(tl)
#signal = module.getContainer().getInterfaceList()
#b1 = module.getContainer().resolveObject("B1")
#iv = b1.getInitialValue()
#printf("%s: %s := %s ", b1.getId(), b1.getType(), iv)
location = a.computeSourceLocation()
ic = IGInterpreterCode("Getting initial value", location)
#printf("ic = %s", ic)
env = IGInterpreterRuntimeEnv(ic, project)
#printf("env = %s", env)
for obj in module.getContainer().localItems():
iv = obj.getInitialValue() # value is expression actually to be evaluated
if iv != None: # initial value is defined
#1: evaluating the iv expression
iv = " expression %s\n evaluated to %s" % (iv, iv.computeStaticValue(env, EXCEPTION, None))
else: # init value is undefined -- getting default (left) value
t = obj.getType().computeStaticType(env, EXCEPTION, None )
#The core of getting left value. It was misnomered 'generateZ'
left = org.zamia.instgraph.IGStaticValue.generateZ(t.computeStaticType(env, EXCEPTION, None), location);
iv = "unspecified, taking %s'left = %s" % (t, left) # must be false
printf("%s: %s := %s ", obj.getId(), obj.getType(), iv)
Питон берёт контейнер модуля, который содержит все декларации переменных. Если начальное выражение obj.getInitialValue задано, то iv.computeStaticValue(env, EXCEPTION, None)) просто вычисляет его. Иначе, нужно получить статический тип объекта и функция generateZ возвратит левое значение по умолчанию. Она по-ошибке названа generateZ, хотя предназначена не для z-значений, а как раз для левых значений по умолчанию в VHDL.