Не могу сделать вывод о регистрации в Quartus II (VHDL) - PullRequest
0 голосов
/ 19 ноября 2011

Это полный код

library ieee;
use ieee.std_logic_1164.all;

entity move_key_detector is
    PORT(
        clk : IN STD_LOGIC;
        done : IN STD_LOGIC;
        hex : IN STD_LOGIC_VECTOR(7 DOWNTO 0);
        up, down : out std_logic
    );
END move_key_detector;

architecture arch of move_key_detector is

    type statetype is (IDLE, RECEIVED_BREAK);
    signal next_state, current_state : statetype :=IDLE;

begin

process (Clk) begin
    if(rising_edge(Clk)) then
        current_state <= next_state;
    end if;
end process;


process(done) begin
next_state <= current_state;
    case current_state is
        when IDLE=>
            if(done = '1') then
                if (hex = "00011101") then up <= '1';
                elsif(hex = "00011011") then down <= '1';
                --check to see if a break code is sent
                elsif (hex = "11110000") then next_state <= RECEIVED_BREAK; 
                end if;
            end if;
        when RECEIVED_BREAK=>
            if(done ='1') then
                if (hex = "00011101") then up <= '0';
                elsif(hex="00011011") then down <= '0';
                end if;
                next_state <= IDLE;
            end if;
        end case;
end process;

Ошибки:

Ошибка (10821): ошибка HDL на move_key_detector.vhd (31): невозможно определить регистрдля "вниз", потому что его поведение не соответствует ни одной поддерживаемой модели регистра

Информация (10041): предполагаемая защелка для "вниз" в move_key_detector.vhd (29)

Ошибка (10821): HDLошибка в move_key_detector.vhd (31): невозможно определить регистр для «вверх», поскольку его поведение не соответствует ни одной поддерживаемой модели регистров

Информация (10041): предполагаемая защелка для «вверх» в move_key_detector.vhd (29)

Ошибка (10818): невозможно вывести регистр для «next_state» на move_key_detector.vhd (41), поскольку он не держит свое значение за пределами фронта часов

Ошибка (10818): Невозможно определить регистр для "next_state" в move_key_detector.vhd (33), потому что он не хранит свое значение за пределами границы часов

Я получаю ошибки такого рода.Я следовал этой рекомендации , читая Руководство по HDL, и до сих пор не знаю, как это исправить.

Кто-нибудь может мне помочь?Большое спасибо!

1 Ответ

2 голосов
/ 19 ноября 2011

Почему у вас второй процесс? Похоже, он содержит то, что предназначено для асинхронного кода.

Если вам нужен процесс, чтобы вы могли использовать конструкции if и case, вам нужно поместить все, что может повлиять на желаемый результат, в список чувствительности процесса (т. Е.: Done AND current_state & hex).

Вы также можете назначить next_state два разных значения, что, как правило, плохо при настройке FPGA. Я предлагаю переместить «next_state <= current_state» внутри оператора case и явно назначить все термины во всех ветвях ваших операторов case / if (я немного догадываюсь о том, что вы ожидаете от поведения, но вы должны получить общее идея): </p>

case current_state is
    when IDLE=>
        if(done = '1') then
            if (hex = "00011101") then 
                up <= '1';
                down <= '0';
                next_state <= current_state;
            elsif(hex = "00011011") then 
                up <= '0';
                down <= '1';
                next_state <= current_state;
            --check to see if a break code is sent
            elsif (hex = "11110000") then 
                up <= '0';
                down <= '0';
                next_state <= RECEIVED_BREAK; 
            ...

Вы также можете использовать выбранное назначение сигналов вне процесса, если вы собираетесь генерировать асинхронную логику.

Если вы действительно пытаетесь определить защелки для сигналов up / down / next_state, вам нужно быть намного более точным в отношении того, что вы хотите, либо прямо в своем коде, либо в своем вопросе к нам, чтобы мы могли помочь вы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...