реклама на сайте
подробности

 
 
 
Reply to this topicStart new topic
> Комутация сигналов
Jenya7
сообщение May 8 2017, 12:24
Сообщение #1


Профессионал
*****

Группа: Участник
Сообщений: 1 083
Регистрация: 29-03-12
Пользователь №: 71 075



я выдаю данные наружу из разных процесов.
Код
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 - May 8 2017, 15:57
Go to the top of the page
 
+Quote Post
Flip-fl0p
сообщение May 8 2017, 16:55
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 226
Регистрация: 11-06-13
Пользователь №: 77 140



Цитата(Jenya7 @ May 8 2017, 16:24) *

Код
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 - May 8 2017, 17:11
Go to the top of the page
 
+Quote Post
Jenya7
сообщение May 9 2017, 05:35
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1 083
Регистрация: 29-03-12
Пользователь №: 71 075



Цитата(Flip-fl0p @ May 8 2017, 22:55) *
Если флаг 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 он более приоритетный. остается надеятся что этого не произойдет так как команды процесам приходят по сериальному протоколу, либо один процес работает либо второй.
Go to the top of the page
 
+Quote Post
wolfman
сообщение May 9 2017, 12:04
Сообщение #4


Местный
***

Группа: Свой
Сообщений: 493
Регистрация: 15-06-05
Из: Питер
Пользователь №: 6 032



Цитата(Jenya7 @ May 9 2017, 16:05) *
приоритет получит slave_data_out1 он более приоритетный.

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

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


--------------------
Россия это даже не страна.
Россия это секрет, завернутый в загадку и укрытый не проницаемой тайной...
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 24th May 2017 - 17:53
Рейтинг@Mail.ru


Страница сгенерированна за 0.01384 секунд с 7
ELECTRONIX ©2004-2016