jenya7 0 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Есть сигналы type str_t is array(integer range<>) of std_logic_vector(7 downto 0); signal g_command : str_t(0 to COM_SIZE-1); type commands is array(integer range<>) of str_t(0 to COM_SIZE-1); constant commands_list : commands(0 to COM_COUNT-1) := ( 0 => (0 => x"73", 1 => x"74", 2 => x"6F", 3 => x"70", 4 => x"00", 5 => x"00"), --stop 1 => (0 => x"66", 1 => x"77", 2 => x"64", 3 => x"00", 4 => x"00", 5 => x"00"), --fwd 2 => (0 => x"72", 1 => x"65", 2 => x"76", 3 => x"00", 4 => x"00", 5 => x"00"), --rev 3 => (0 => x"01", 1 => x"02", 2 => x"03", 3 => x"00", 4 => x"00", 5 => x"00") --123 ); Вижу в g_command - '123'. Сравниваю if(g_command = commands_list(3)) then received_char <= X"03"; else received_char <= X"01"; end if; Получаю received_char <= X"01"; Нужно сравнивать чар-чар? иначе никак? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Нужно сравнивать чар-чар? иначе никак? Я тут вообще никаких чаров не вижу. Только std_logic_vector. И что вы стравниваете: x"123" = x"010203000000"? Естественно, это не равно. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 апреля, 2018 Опубликовано 23 апреля, 2018 (изменено) · Жалоба Я тут вообще никаких чаров не вижу. Только std_logic_vector. И что вы стравниваете: x"123" = x"010203000000"? Естественно, это не равно. я писал в десятичном формате, а в hex формате так и получается g_command = x"010203000000" и вообще то это std_logic_vector of std_logic_vector Изменено 23 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 16 23 апреля, 2018 Опубликовано 23 апреля, 2018 · Жалоба Мой тестовый код: g_command (0) <= x"01"; g_command (1) <= x"02"; g_command (2) <= x"03"; g_command (3) <= x"00"; g_command (4) <= x"00"; g_command (5) <= x"00"; process begin wait for 100 ns; if (g_command = commands_list(3)) then received_char <= X"03"; else received_char <= X"01"; end if; wait; end process; В симуляторе received_char = X"03. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 23 апреля, 2018 Опубликовано 23 апреля, 2018 (изменено) · Жалоба Мой тестовый код: g_command (0) <= x"01"; g_command (1) <= x"02"; g_command (2) <= x"03"; g_command (3) <= x"00"; g_command (4) <= x"00"; g_command (5) <= x"00"; process begin wait for 100 ns; if (g_command = commands_list(3)) then received_char <= X"03"; else received_char <= X"01"; end if; wait; end process; В симуляторе received_char = X"03. я понял. спасибо. значит косяк где то у меня. нашел косяк. g_command нужно присваивать значение в предыдущем стэйте, чтоб он успел защелкнуть значение. Изменено 23 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 24 апреля, 2018 Опубликовано 24 апреля, 2018 (изменено) · Жалоба у меня такое несчастье - не заходит в when X"20" when ST_PARSE_STR => --get command and arguments from the string if (char_idx < RX_BUF_SIZE) then case rx_uart_buf(char_idx) is when X"0D" => --end of string \r DBG_OUT <= "1000000100"; Parse1State <= ST_PARSE_VALIDATE; when X"20" => --spase - arguments delimiter DBG_OUT <= "1110000111"; when others => DBG_OUT <= "1000000111"; char_idx := char_idx + 1; else Parse1State <= ST_PARSE_IDLE; end if; я посылаю 123 567\r - в ASCII table - пробел x20 но я не попадаю в этот кейс. ой. мой косяк. извиняюсь. Изменено 24 апреля, 2018 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться