Не могу вывести регистр для ... at ..., потому что он не держит свое значение вне границы часов - PullRequest
4 голосов
/ 13 мая 2011

Это должно быть самой распространенной проблемой среди людей, плохо знакомых с VHDL, но я не вижу, что я делаю здесь неправильно!Это, кажется, соответствует всем идиомам, которые я видел на правильном дизайне конечного автомата.Я собираю в Altera Quartus 9.2, для чего это стоит.Фактическая ошибка:

"Невозможно определить регистр для" spiclk_out "в [file] [line], потому что он не держит свое значение за пределами границы часов"

ENTITY spi_state_machine IS
    PORT(
            spiclk_internal : IN STD_LOGIC;
            reset : IN STD_LOGIC;
            spiclk_out : BUFFER STD_LOGIC
    );
END spi_state_machine;

PROCESS(spiclk_internal, reset)
BEGIN
    IF reset = '1' THEN
        spiclk_out <= '0';
    END IF;

    IF spiclk_internal = '1' AND spiclk_internal'EVENT THEN --error here
        spiclk_out <= NOT spiclk_out;
    END IF;
END PROCESS;

Спасибоза ваше время.

1 Ответ

4 голосов
/ 13 мая 2011

Как написано, процесс заставит spiclk_out переключаться на spiclk_internal ребра, даже когда reset активен, а это не так, как должны себя вести триггеры с асинхронным сбросом.

Что вы, вероятно,хочу это

SPICLK: process(spiclk_internal, reset)
    if reset = '1' then
        spiclk_out <= '0';
    elsif spiclk_internal'event and spiclk_internal='1' then
        spiclk_out <= not spiclk_out;
    end if;
end process SPICLK;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...