jenya7 0 8 мая, 2017 Опубликовано 8 мая, 2017 (изменено) · Жалоба я выдаю данные наружу из разных процесов. 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 наружу. Тут есть где то перекос по логике? Как всегда проблема была в другом месте. Контролер выдавал неправильные команды. Изменено 8 мая, 2017 пользователем Jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 8 мая, 2017 Опубликовано 8 мая, 2017 (изменено) · Жалоба 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 Изменено 8 мая, 2017 пользователем Flip-fl0p Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 9 мая, 2017 Опубликовано 9 мая, 2017 · Жалоба Если флаг 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 он более приоритетный. остается надеятся что этого не произойдет так как команды процесам приходят по сериальному протоколу, либо один процес работает либо второй. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
wolfman 0 9 мая, 2017 Опубликовано 9 мая, 2017 · Жалоба приоритет получит slave_data_out1 он более приоритетный. Судя по всему у вас так и происходит, поэтому вы не видите на выходе slave_data_out2. Вам надо гарантировать что к моменту прихода tx_trig2, tx_trig1 был в нуле. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться