2015-10-03 6 views
1

Как сделать процесс, который выполняется только один раз при включении?
Легко сделать процесс, который выполняется при нажатии кнопки сброса, но как заставить его работать при подключении источника питания, не касаясь кнопки сброса?
В моем примере я хочу инициализировать ЖК-дисплей при запуске, и мне нужно сначала отправить некоторые команды ему, но мне не нужно его в процессе, зависящем от какого-либо сигнала, такого как сброс (просто давайте предположим, что есть без кнопки сброса).Как сделать процесс запуска в VHDL

+0

Вы пытались объявить сигнал (ы) вашего FSM значением по умолчанию? – maxy

+0

Я не использую путь FSM здесь ... хотя бы явно. – ScienceSamovar

+0

Вам просто нужен только один FF. Он инициализируется '1' и очищается до' 0' на каждом такте. Если вы не подключаете сброс к этому FF, он никогда не будет '1', если вы не перепрограммируете FPGA. – Paebbels

ответ

3

состояние (первый запуск) хранится в одном FF, который инициализирован '1':

signal IsStartup : STD_LOGIC := '1'; 

FF процесс без сброса:

process(clk) 
begin 
    if rising_edge(clk) then 
    IsStartup <= '0'; 
    end if; 
end process; 

Пример использования (FSM):

process(clk) 
begin 
    if rising_edge(clk) then 
    if (Reset = '1') then 
     State <= ST_RESET; 
    else 
     State <= NextState; 
    end if; 
    end if; 
end process; 

process(State, IsStartup) 
begin 
    NextState <= State; 

    case State is 
    when ST_RESET => 
     if (IsStartup = '1') then 
     NextState <= ST_STARTUP; 
     else 
     NextState <= ST_IDLE; 
     end if; 
    -- ... 
    end case; 
end process; 
+0

ничего себе, спасибо! – ScienceSamovar

+0

@ScienceSamovar: Обычно этот метод следует использовать только для автоматического создания сброса при запуске, и пусть вся ваша другая логика инициализации будет инициирована этим сигналом сброса. Помните, что сброс при включении не синхронизирован с часами, поэтому чем сложнее логика, тем выше риск нарушения требований к настройке/удержанию. –

0

Просто используйте заявление ожидания без списка сенсаций.

process 
begin 
    assignment <= "101"; 
    wait; 
end process; 

Это, как говорится, я бы рекомендовал вам построить это как конечный автомат.

+0

Правильно ли я понимаю, что если у нас нет списка чувствительности, процесс будет иметь «дефолтную» чувствительность тактового сигнала? И будет ожидать, что заявление приостановит его навсегда? Имеет ли он недостатки в powerconsumption (я имею в виду, что ожидания внутри чипа реализованы, как я полагаю). – ScienceSamovar

+0

Да, возможно, для того, чтобы сделать FSM, кажется более логичным, чем приостановление процесса, я полагаю, что мне все равно нужно его изучить :) – ScienceSamovar

+0

списки чувствительности и выражения «ждут» предназначены только для моделирования, а не для синтеза – maxy