jenya7 0 25 октября, 2023 Опубликовано 25 октября, 2023 (изменено) · Жалоба Есть такой процес process (REG_CLK, s_spi_ready_3) begin if(rising_edge(REG_CLK)) then if (SPI_CS = '1') then State <= ST_IDLE; end if; case State is when ST_IDLE => debug <= X"00"; if (s_spi_ready_3 = '1') then debug <= X"AA"; case INSTR is when COM_READ => State <= ST_READ_1; when COM_WRITE => qspi_addr <= SPI_ADDR; State <= ST_WRITE_1; when COM_SET_ADR => debug <= X"BB"; qspi_addr <= SPI_ADDR; State <= ST_IDLE; when others => State <= ST_IDLE; end case; end if; when others => State <= ST_IDLE; end case; end if; end process; 150-180 раз он отрабатывает нормально и вдруг ломается - я не попадаю в условие if (s_spi_ready_3 = '1') then. хотя Сигнал Тап показывает все правильные сигналы - s_spi_ready_3 = '1', INSTR = COM_SET_ADR. В чём может быть проблема? Изменено 25 октября, 2023 пользователем jenya7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба 1 minute ago, jenya7 said: В чём может быть проблема? сигнал s_spi_ready_3 асинхронен REG_CLK, 99.99% Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба On 10/25/2023 at 7:52 AM, des00 said: сигнал s_spi_ready_3 асинхронен REG_CLK, 99.99% s_spi_ready_3 <= not s_spi_ready_2 and s_spi_ready_1; process(REG_CLK) begin if (rising_edge(REG_CLK)) then s_spi_ready_1 <= SPI_READY; s_spi_ready_2 <= s_spi_ready_1; end if; end process; я всегда так делаю чтоб отловить фронт. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба 1 minute ago, jenya7 said: я всегда так делаю чтоб отловить фронт. тогда вы тот самый 0.01% счастливчик, у которого глючит плис. Если времянки все сходятся, то возможно что есть непропай шаров питания/земли и при высокой загрузке плис, глючит часть логики в ней. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Burenkov 0 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба Попробуйте SPI_READY через два триггера пропустить перед использованием. Может быть s_spi_ready_1 оказывается в метастабильном состоянии Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Flip-fl0p 4 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба 2 часа назад, Burenkov сказал: Попробуйте SPI_READY через два триггера пропустить перед использованием. Может быть s_spi_ready_1 оказывается в метастабильном состоянии Добавлю, что этого мало. Еще бы правильно констрейнами, или атрибутами подсказать синтезатору, что тут цепочка CDC триггеров. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
vsrb 1 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба 2 hours ago, Burenkov said: Попробуйте SPI_READY через два триггера пропустить перед использованием. Может быть s_spi_ready_1 оказывается в метастабильном состоянии Поддерживаю, у Pong P Chu даже картинка на эту тему есть. Я бы еще s_spi_ready_3 из списка чувствительностей убрал, т.к. этой конструкцией триггер описывается, а не асинхронная логика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 220 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба 4 часа назад, jenya7 сказал: всегда так делаю чтоб отловить фронт Это не сдвиговый регистр, а отдельные триггеры. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба самое интересное что когда ломается он уже не возвращается в нормальное состояние. по идее на следующем обращении должен востановиться. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 220 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба Про "State" расскажите, сколько бит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jenya7 0 25 октября, 2023 Опубликовано 25 октября, 2023 · Жалоба On 10/25/2023 at 4:07 PM, Plain said: Про "State" расскажите, сколько бит. type StateType is (ST_IDLE, ST_READ_1, ST_READ_2, ST_READ_3, ST_WRITE_1, ST_WRITE_2, ST_WRITE_3, ST_CONT_READ_1, ST_CONT_READ_2, ST_CONT_READ_3, ST_CONT_READ_4, ST_CONT_WRITE_1, ST_CONT_WRITE_2, ST_CONT_WRITE_3, ST_CONT_WRITE_4, ST_TEST_WRITE_1, ST_TEST_WRITE_2, ST_TEST_1, ST_TEST_2, ST_TEST_3, ST_TEST_4, ST_SET_BC_1, ST_SET_BC_2, ST_SET_BC_3, ST_SET_BC_4, ST_SET_BC_5, ST_COM_STACK_1, ST_COM_STACK_2, ST_COM_STACK_3, ST_DAT_STACK_1, ST_DAT_STACK_2, ST_DAT_STACK_3, ST_DAT_STACK_4, ST_DAT_STACK_5, ST_MSG_SEND_1, ST_MSG_SEND_2, ST_MSG_SEND_3, ST_MSG_SEND_4, ST_MSG_SEND_5, ST_WAIT_TX_DONE_1, ST_WAIT_TX_DONE_2, ST_WAIT_TX_DONE_3, ST_GET_MSG_STATUS_1, ST_GET_MSG_STATUS_2, ST_GET_MSG_STATUS_3, ST_GET_MSG_STATUS_4, ST_RTC_UPDATE_1, ST_RTC_UPDATE_2, ST_RTC_UPDATE_3, ST_RTC_UPDATE_4, ST_RTC_UPDATE_5, ST_RTC_UPDATE_6, ST_WR_GMC_MSG_1, ST_WR_GMC_MSG_2, ST_WR_GMC_MSG_3, ST_WR_GMC_MSG_4, ST_WR_GMC_MSG_5, ST_WR_GMC_MSG_6, ST_WR_GMC_MSG_7, ST_RD_GMC_MSG_1, ST_RD_GMC_MSG_2, ST_RD_GMC_MSG_3, ST_RD_GMC_MSG_4, ST_RD_GMC_MSG_5, ST_RD_GMC_MSG_6, ST_RD_GMC_MSG_7, ST_DATA_SEND_1, ST_DATA_SEND_2, ST_DATA_SEND_3); signal State : StateType := ST_IDLE; Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 220 26 октября, 2023 Опубликовано 26 октября, 2023 · Жалоба Т.е. сами не знаете, однако пишете when others Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 октября, 2023 Опубликовано 26 октября, 2023 · Жалоба 21 hours ago, Burenkov said: Попробуйте SPI_READY через два триггера пропустить перед использованием. Может быть s_spi_ready_1 оказывается в метастабильном состоянии на современных плис не актуально, там время выхода из этого состояния меньше 1нс, все советы про 2-3 триггера, в плис, относятся к плис времен царя гороха. Даже статьи такие есть с времянками. ЕМНП у тогоже 7 Series время выхода триггера из метастабильного состония порядка 100-200пс. 18 hours ago, Flip-fl0p said: Добавлю, что этого мало. Еще бы правильно констрейнами, или атрибутами подсказать синтезатору, что тут цепочка CDC триггеров. это делается для предотвращения упаковки в SRL примитив(чего уже не будет судя по описанной логике) и ограничения времени передачи, но для типовых тактовых 200МГц = 5нс, с учетом того что роутер минимизирует длинну трасс по умолчанию, эти 5нс это порядка четверти плис уровня 200ки артикса/300ки кинтекса. Судя по постам ТС, у него частота порядка 100-150МГц и мелкая ПЛИС. Резюмирую, по красоте вы абсолютно правы, но 99.9% что у ТС проблема не в этом. 14 hours ago, jenya7 said: самое интересное что когда ломается он уже не возвращается в нормальное состояние. по идее на следующем обращении должен востановиться. либо вы все таки видите не то, и ваша фраза " я не попадаю в условие if (s_spi_ready_3 = '1') then. хотя Сигнал Тап показывает все правильные сигналы - s_spi_ready_3 = '1', INSTR = COM_SET_ADR. " не соответствует действительности, либо какая то асинхра (не обязательно на указаном вами сигнале s_spi_ready_3) заходит на автомат, либо есть срыв тактовой, либо всеж вам повезло поймать очень редкий баг плис с недостатком питания/земли (ловил лично лет 15 назад). 18 hours ago, vsrb said: Я бы еще s_spi_ready_3 из списка чувствительностей убрал, т.к. этой конструкцией триггер описывается, а не асинхронная логика. это VHDL, там такое допускается. Но соглашусь, глаз режет) 48 minutes ago, Plain said: Т.е. сами не знаете, однако пишете when others потому что это VHDL и тип перечисление. И эта фраза означает все другие, не описанные выше состояния) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Plain 220 26 октября, 2023 Опубликовано 26 октября, 2023 · Жалоба 1 час назад, des00 сказал: фраза означает все другие, не описанные выше состояния Так автор и жалуется, что КА в них торчит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 26 октября, 2023 Опубликовано 26 октября, 2023 · Жалоба 1 hour ago, Plain said: Так автор и жалуется, что КА в них торчит. он не так жалуется, в том то и дело что не торчит, он раком встал) классика типов перечислений с хитрой кодировкой, без safe-mode и асинхрой. но ТС 146% уверен что у него асинхры нигде нет. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться