В симуляции все в VHDL инициализируется в начале к «крайнему левому» элементу диапазона, который их представляет.
Таким образом, std_logic
получит 'U'
, boolean
получит false
, integer
получит большое отрицательное число.Любые перечисленные типы, которые вы определили сами, будут инициализироваться их первым членом.и т. д.
Вы можете переопределить это явной инициализацией:
variable i : integer := 0;
симулятор затем будет использовать вашу инициализацию.
Когдаэто сводится к синтезу вашего кода, в ASIC явные инициализации игнорируются (нет кремния для их поддержки!), и все инициализируется непредсказуемо.Таким образом, у вас есть пин-код сброса и явный код, который назначает значение, которое вы хотите, когда этот пин-код подтвержден.
Когда вы нацеливаетесь на FPGA и не инициализируете явно, в большинстве случаев вещи инициализируются чем-то вроденоль », но вы не можете на это полагаться (иногда инверторы толкаются вокруг, и все выглядит так, будто они настроены на« один »).Таким образом, у вас есть пин-код сброса и явный код, который назначает значение, которое вы хотите, когда этот пин-код подтвержден.
Некоторые синтезаторы (по крайней мере, XST) поддерживают явные инициализации и передают их в список соединений, так что вы может положиться на них.В этом случае у вас все еще может быть сигнал сброса, который может сделать что-то другое, поэтому определенный триггер может инициализироваться одним значением и сбрасываться другим!