VHDL азбука Морзе - Ошибка разбора, неожиданный процесс, ожидание, если - PullRequest
0 голосов
/ 28 апреля 2019

Я работаю над проектом для цифровой электроники на VHDL, который состоит из кнопки или весла, которые принимают входные данные от пользователя и преобразуют его в код ASCII, выводимый на 17-сегментный дисплей. Моя проблема заключается в том, что он выдает ошибку Parse error, непредвиденный PROCESS, ожидая IF, хотя все мои операторы if должны иметь END.

Ошибка появляется в третьей-последней строке кода ниже, где она читает конец процесса

Это для чипа XLDX Coolrunner II CPLD. Я уже пробовал кучу различных исправлений из других решений, а также пробежал всю свою программу и убедился, что операторы if, которые у меня есть, закрыты. Я локализовал (по крайней мере, мне так кажется) процесс, описанный ниже:

Checker: process(clock) begin
    if(rising_edge(clock)) then
        if(BTN_CNT = 1) then
                case morse_code(0 downto 0) is
                        when "0" => LED_16SEGLETTER <=      "00110000011111111"; --E
                        when "1" => LED_16SEGLETTER <=      "00111111111011011"; --T
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something rando

                end case;
        else if(BTN_CNT = 2) then
                case morse_code(1 downto 0) is
                        when "00" => LED_16SEGLETTER <=     "00110011111011011"; --I
                        when "01" => LED_16SEGLETTER <=     "00001100001111111"; --A
                        when "10" => LED_16SEGLETTER <=     "11001100110110111"; --N
                        when "11" => LED_16SEGLETTER <=     "11001100110101111"; --M
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something weird
                end case;
        else if(BTN_CNT = 3) then
                case morse_code(2 downto 0) is
                        when "000" => LED_16SEGLETTER <=    "00100010001111111"; --S
                        when "001" => LED_16SEGLETTER <=    "11000000111111111"; --U
                        when "010" => LED_16SEGLETTER <=    "00011100001110111"; --R
                        when "011" => LED_16SEGLETTER <=    "11001100111110101"; --W
                        when "100" => LED_16SEGLETTER <=    "00000011111011011"; --D
                        when "101" => LED_16SEGLETTER <=    "11111100011100111"; --K
                        when "110" => LED_16SEGLETTER <=    "00100000101111111"; --G
                        when "111" => LED_16SEGLETTER <=    "00000000111111111"; --O
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something weird

                end case;
        else if(BTN_CNT = 4) then
                case morse_code(3 downto 0) is
                        when "0000" => LED_16SEGLETTER <=   "11001100001111111"; --H
                        when "0001" => LED_16SEGLETTER <=   "11111100111101101"; --V
                        when "0010" => LED_16SEGLETTER <=   "00111100011111111"; --F
                        when "0100" => LED_16SEGLETTER <=   "11110000111111111"; --L
                        when "0110" => LED_16SEGLETTER <=   "00011100001111111"; --P
                        when "0111" => LED_16SEGLETTER <=   "11000001111111111"; --J
                        when "1000" => LED_16SEGLETTER <=   "00000011101011011"; --B
                        when "1001" => LED_16SEGLETTER <=   "11111111110100101"; --X
                        when "1010" => LED_16SEGLETTER <=   "00110000111111111"; --C
                        when "1011" => LED_16SEGLETTER <=   "11011110001111011"; --Y
                        when "1100" => LED_16SEGLETTER <=   "00110011111101101"; --Z
                        when "1101" => LED_16SEGLETTER <=   "00000000111110111"; --Q
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something weird
                end case;
        else if(BTN_CNT = 5)then
                case morse_code(4 downto 0) is
                        when "11111" => LED_16SEGLETTER <=  "00000000111101101"; --0
                        when "01111" => LED_16SEGLETTER <=  "11001111111101111"; --1
                        when "00111" => LED_16SEGLETTER <=  "00010001001111111"; --2
                        when "00011" => LED_16SEGLETTER <=  "00000011101111111"; --3
                        when "00001" => LED_16SEGLETTER <=  "11001110001111111"; --4
                        when "00000" => LED_16SEGLETTER <=  "00100010001111111"; --5
                        when "10000" => LED_16SEGLETTER <=  "01100000001111111"; --6
                        when "11000" => LED_16SEGLETTER <=  "00001111111111111"; --7
                        when "11100" => LED_16SEGLETTER <=  "00000000001111111"; --8
                        when "11110" => LED_16SEGLETTER <=  "00000110001111111"; --9
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something weird
                end case;
        else if(BTN_CNT = 6) then
                case morse_code(5 downto 0) is
                        when "010101" => LED_16SEGLETTER <= "11111111111111110"; --FullStop
                        when "110011" => LED_16SEGLETTER <= "11111111111110111"; --Comma
                        when "001100" => LED_16SEGLETTER <= "00011111101111010"; --Query
                        when others => LED_16SEGLETTER <=   "00000000000000001"; --something weird
                end case;
        else 
                LED_16SEGLETTER <= "00000000000000001";
        end if;
    end if;
end process;

end arc;

Этот процесс должен найти правильный 16-сегментный выход для определенной комбинации точка / тире. Надеюсь, это последнее, что мне нужно сделать, прежде чем вся программа будет внедрена в CPLD.

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

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