Является ли время установки проблемой асинхронных сигналов в процессах?

Когда сигнал включен в список чувствительности, этот процесс выполняется каждый раз при изменении этого сигнала. Например,

-- State Memory
-- Synchronous Reset
process (clk)
begin
    if (rst = '1') then
        p_state <= initialization;
    elsif (rising_edge(clk)) then
        p_state <= n_state;
    end if;
end process;

Однако, если rst включен в список чувствительности, он становится асинхронным сбросом. Мой вопрос теперь тогда был бы, когда сначала утверждается. Процесс выполняется. Но стабилен ли уже первый сигнал, так что значение первого сигнала равно «1»?


person Xegara    schedule 19.12.2013    source источник
comment
Не могли бы вы просмотреть и уточнить свой вопрос; Я не могу понять, что именно вы спрашиваете. БТС. приведенный выше код выдаст вам предупреждение синтеза о сигналах rst и initialization, отсутствующих в списке чувствительности.   -  person Morten Zilmer    schedule 19.12.2013


Ответы (3)


Ваш пример не является синхронным сбросом.

Это недопустимая реализация асинхронного сброса, так как rst отсутствует в списке чувствительности процессов. В моделировании это может выглядеть как синхронный сброс, но синтез игнорирует список чувствительности и синтезирует асинхронный сброс.

Я предполагаю, что initialization - это определенное состояние, а не сигнал, иначе у вас есть другая проблема (значения сброса всегда должны быть постоянными и не зависеть от другого сигнала).

person zennehoy    schedule 19.12.2013

Обычно VHDL используется для описания проектов на уровне передачи регистров. На этом уровне абстракции время установки и удержания игнорируется. Поскольку время подготовки и удержания встречи часто больше зависит от физической схемы проекта, чем от логики, это предположение обычно разумно при проверке логики проекта.

Когда вы пишете блоки VHDL process, которые имеют неполные списки чувствительности, вы рискуете иметь различия между симуляцией и синтезом, поскольку инструменты синтеза обычно игнорируют списки чувствительности. В результате у вас действительно есть два варианта:

-- Asynchronous Reset
process (clk, rst)
begin
    if (rst = '1') then
        p_state <= (others => '0');
    elsif (rising_edge(clk)) then
        p_state <= n_state;
    end if;
end process;

-- Synchronous Reset
process (clk)
begin
    if (rising_edge(clk)) then
        if (rst = '1') then
            p_state <= (others => '0');
        else
            p_state <= n_state;
        end if;
    end if;
end process;

Вы не должны реализовывать синхронный сброс, используя шаблон асинхронного сброса, а затем опуская rst из списка чувствительности.

person godel9    schedule 19.12.2013
comment
В приведенном выше примере с асинхронным сбросом отсутствует initialization в списке чувствительности. Кроме того, наличие значения для асинхронного сброса, зависящего от внешнего сигнала, может вызвать проблемы в некоторых технологиях FPGA. - person Morten Zilmer; 19.12.2013
comment
@MortenZdk Хороший улов ... Я не заметил, что при сбросе не использовалось постоянное значение. - person godel9; 19.12.2013
comment
@MortenZdk Я предполагаю, что initialization - это не сигнал, а состояние, с которого нужно начинать после сброса. - person zennehoy; 19.12.2013

Если я правильно понял ваш вопрос, вас беспокоит время установки (и, следовательно, также время удержания) триггера. Такие времена относятся к вводу данных, а не к вводу сброса, который требуется для предотвращения метастабильности и обеспечения правильного хранения данных.

Асинхронный сброс обнуляет выход независимо от любого другого сигнала, отменяя на уровне транзистора триггера любые данные или информацию, относящуюся к часам.

person VAP    schedule 22.12.2013