Вопрос совсем не глупый, а очень даже нужный - ибо начальные условия крайне важны для правильного функционирования устройств.
Насколько я понял, Вам необходимо при старте платы иметь на некоторых ножках ПЛИС логические нули, а на других - единицы. Если так, то проблема разбивается на 2 составляющие.
1. После подачи питания, CPLD конфигурируется. При этом все ножки ввода/вывода у CoolRunner (XPLA3) имеют слабую подтяжку к '1' (если я ничего не путаю, то эквивалентный резистивный номинал PullUp где-то от 40кОм до 80кОм - хорошо перетягивается к логическому нулю 3.3кОм).
2. После успешного завершения конфигурации CPLD, ножки переходят в то состояние, которое Вы описали в Вашем проекте.
Если Вы использует синтезатор XST, то начальные нзачения переменных (сигналов) будут правильно преобразованы в начальные состояния триггеров. (Т.е. так, как Вы предложили signal flag: std_logic := 0;, но еще необходимо в настройках Fitter'а выставить Default Powerup Value of Register - FPGA Equivalent).
Правильность установки начальных значений триггеров Вы можете проверить по Fitter Report'у: 1. для HTML версии - раздел Logic колонка Reg Init State. 2. для TXT версии - раздел Summary of Mapped Logic колонка Reg Init State.
Если Вы используете XPLA3 обязательно ознакомьтесь с механизмом HalfLatch, присутствующем в каждом выходе. Отключить его невозможно, поэтому приходиться учитывать его влияние.
|