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

Комутация сигналов

я выдаю данные наружу из разных процесов.

SPI_SLAVE_TX : process(REG_CLK)
begin
    if (rising_edge(REG_CLK)) then
        if (tx_trig1 = '1') then
            SSPI_TX_DATA <= slave_data_out1;
        elsif (tx_trig2 = '1') then
            SSPI_TX_DATA <= slave_data_out2;     
       end if;
end process SPI_SLAVE_TX;

 

сигналы tx_trig1 и tx_trig2 выставляются в своих процесах. Я представлю их укороченно чтоб лишнего не писать.

process(REG_CLK)
    if (rising_edge(REG_CLK)) then
        case RamState_a is

             when ST_RAM_IDLE =>
                  tx_trig1 <= '0';
                   case ram_command is
                         when RAM_BYTE_READ  => RamState_a <= ST_RD_RAM;
                   end case;

              when  ST_RD_RAM  =>
                     slave_data_out1 <= some_val1;
                      tx_trig1 <= '1';
                    RamState_a <= ST_RAM_IDLE;

          end case;
    end if;

process(REG_CLK)
    if (rising_edge(REG_CLK)) then
        case RamState_b is

             when ST_VAR_IDLE =>
                  tx_trig2 <= '0';
                   case var_command is
                         when VAR_BYTE_READ  => RamState_b <= ST_RD_VAR;
                   end case;

              when  ST_RD_VAR  =>
                     slave_data_out2 <=  some_val2;
                      tx_trig2 <= '1';
                    RamState_b <= ST_VAR_IDLE;

          end case;
    end if;

При обращении к первому процесу я вижу значение в slave_data_out1 и его выход наружу. Но при обращении ко второму процесу я не вижу выхода slave_data_out2 наружу. Тут есть где то перекос по логике?

 

Как всегда проблема была в другом месте. Контролер выдавал неправильные команды.

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

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


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

SPI_SLAVE_TX : process(REG_CLK)
begin
    if (rising_edge(REG_CLK)) then
        if (tx_trig1 = '1') then
            SSPI_TX_DATA <= slave_data_out1;
        elsif (tx_trig2 = '1') then
            SSPI_TX_DATA <= slave_data_out2;     
       end if;
end process SPI_SLAVE_TX;

Если флаг tx_trig1 = '1' то slave_data_out1

Если флаг tx_trig2 = '1' то slave_data_out2

А если они одновременно то тогда что должно быть ?

Могу предположить что из-за того, что у Вас один из автоматов(RamState_a) находиться в состоянии ST_RD_RAM, то другой процесс не работает из-за того, у вас просто не выполняется второе условие elsif (tx_trig2 = '1') then

Изменено пользователем Flip-fl0p

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


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

Если флаг tx_trig1 = '1' то slave_data_out1

Если флаг tx_trig2 = '1' то slave_data_out2

А если они одновременно то тогда что должно быть ?

Могу предположить что из-за того, что у Вас один из автоматов(RamState_a) находиться в состоянии ST_RD_RAM, то другой процесс не работает из-за того, у вас просто не выполняется второе условие elsif (tx_trig2 = '1') then

если два сигнала одновременно 1 это проблема. я все равно не могу ничего поделать с этим. приоритет получит slave_data_out1 он более приоритетный. остается надеятся что этого не произойдет так как команды процесам приходят по сериальному протоколу, либо один процес работает либо второй.

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


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

приоритет получит slave_data_out1 он более приоритетный.

Судя по всему у вас так и происходит, поэтому вы не видите на выходе slave_data_out2.

 

Вам надо гарантировать что к моменту прихода tx_trig2, tx_trig1 был в нуле.

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


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

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

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

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

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

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

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

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

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

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