Перейти к содержанию
    

VHDL - сравнение строк.

Есть сигналы

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";

Нужно сравнивать чар-чар? иначе никак?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Нужно сравнивать чар-чар? иначе никак?

 

Я тут вообще никаких чаров не вижу. Только std_logic_vector.

 

И что вы стравниваете:

x"123" = x"010203000000"?

Естественно, это не равно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Я тут вообще никаких чаров не вижу. Только std_logic_vector.

 

И что вы стравниваете:

x"123" = x"010203000000"?

Естественно, это не равно.

я писал в десятичном формате, а в hex формате так и получается g_command = x"010203000000"

и вообще то это std_logic_vector of std_logic_vector

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Мой тестовый код:

 

     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 (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 нужно присваивать значение в предыдущем стэйте, чтоб он успел защелкнуть значение.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

у меня такое несчастье - не заходит в 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 но я не попадаю в этот кейс.

 

ой. мой косяк. извиняюсь.

Изменено пользователем Jenya7

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...