Мур 1 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба 11 minutes ago, RobFPGA said: Это тоже типичная ошибка. Быстрое "решение" без анализа требований к системе и реальных возможностей их исполнения. При 10 ns цикле на входе и внутреннем (асинхронном) такте 4 ns нельзя гарантировать выполнение требований устранения метастабильности и выделении фронта за требуемое время цикла. Удачи! Rob. Это я уже понял, что имею дело с метастабильностью! 7 minutes ago, Yuri124 said: ... Только отметить это в констрейнах. Эх... Где бы глянуть как эта магия творится? Нигде толком не описано. Хотя бы перечислите перечень, в каких констрейнах искать ответ!... Спасибо! 10 minutes ago, Yuri124 said: А если адрес подается сильно заранее - и получается декодировать за то время, пока поступают другие сигналы - то почему бы и не воспользоваться этим... Только отметить это в констрейнах. Формально временная диаграмма проста. Все сигналы устанавливаются заранее. И только WR и RD самые короткие внутри CS Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба Приветствую! 5 minutes ago, Мур said: Эх... Где бы глянуть как эта магия творится? Эмм... Эта магия творится в голове разработчика О каких констрейнах может идти речь если нет полного понимания типа интерфейса, времянок на нем, и реализации интерфейса в FPGA? Успехов! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Yuri124 1 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба А нельзя ли ограничить частоту - не 250МГц, а 3-кратная к 75МГц? У Вас раньше всё работало на синхронной шине - т.е. было внутри и снаружи по 75 МГц + фазовый синхронизм клоков был обеспечен? - если я правильно понял из предыдущего материала. Если засинхронизировать внешний и внутренние клоки - тогда , возможно, получится без выделения фронта (т.е. без необходимости иметь 3 такта внутр. частоты на длительность строба) корректно переправить данные в ПЛИС. 13 minutes ago, Мур said: в каких констрейнах искать ответ Ну, это самому нужно анализировать узкие места - как выше уже отметили. А без знания нюансов... Помнится, приходилось переставлять в автоматах последовательность состояний, чтобы получить запас времени (один дополнительный такт тактирования автомата) передать по кристаллу сигнал до следующего блока - но это только разработчик может знать... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба 32 minutes ago, RobFPGA said: Эмм... Эта магия творится в голове разработчика О каких констрейнах может идти речь если нет полного понимания типа интерфейса, времянок на нем, и реализации интерфейса в FPGA? Это понятно. Читал несколько раз книгу в стиле варшавского университета и стал применять простые констрейны, без которых вообще *опа! https://rusneb.ru/catalog/000199_000009_010366499/ А вот мелкие кружева не прочувствовал... Был бы материал в стиле,- вот такая задача\проблема и её решаем вот так... И так по основным приемам. ...Вот было,- вот стало! 26 minutes ago, Yuri124 said: А нельзя ли ограничить частоту - не 250МГц, а 3-кратная к 75МГц? У Вас раньше всё работало на синхронной шине - т.е. было внутри и снаружи по 75 МГц + фазовый синхронизм клоков был обеспечен? - если я правильно понял из предыдущего материала. Был такой план. Думал, что подстрою фазы двух PLL . Только на практике все смешалось в несколько тактирований. И частоты в итоге не кратны.... Поменяли MCU на 200МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dimka76 42 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба 18 minutes ago, Мур said: Был такой план. Думал, что подстрою фазы двух PLL . Только на практике все смешалось в несколько тактирований. И частоты в итоге не кратны.... Поменяли MCU на 200МГц Ну, так и в ПЛИС сделайте 200 МГц Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба 10 minutes ago, dimka76 said: Ну, так и в ПЛИС сделайте 200 МГц Ясный пень... ...Тут стоит не забывать дополнительный джиттер, потому как в прототипе тактированием ПЛИС занимался MCU. Сейчас общий генератор в 25МГц и у каждого свой PLL. А это более жесткие требования на питание PLL (говорил же схемотехникам,- аналоговый стабилизатор! Поставили импульсный...) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
andrew_b 14 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба У вам что-то очень критичное по времени по этому интерфейсу гонится? Растяните WE и RD на один или два такта. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба 4 minutes ago, andrew_b said: У вам что-то очень критичное по времени по этому интерфейсу гонится? Растяните WE и RD на один или два такта. Так это и делается! Тут критично для DMA циклов Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
RobFPGA 27 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба Приветствую! 1 hour ago, Мур said: Так это и делается! Тут критично для DMA циклов Поэтому еще раз IMHO начинать надо с полного анализа требование к интерфейсу, режимов работы, временных диаграмм. Затем оценка возможных реализаций в FPGA, с учетом физ. ограничений выбранной FPGA. А уж потом реализация и констрейны. Удачи! Rob. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
krux 8 7 октября, 2021 Опубликовано 7 октября, 2021 · Жалоба имхо брать асинхронную двухпортовку и портом А пытаться подключать её к ногам плис напрямую. в качестве тактовой надо смотреть какой из сигналов CE_b WR_b/RD брать в зависимости от конкретной реализации асинхронной шины в MCU констрейнтами задавливать варианты, что тактирование может быть с "черезжопным" duty cycle. в случае успешного запуска прибивать RLOC-ами насмерть чтоб не шевелилось чтение со стороны проца только по прерыванию, или когда оно там само захочет? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 19 октября, 2021 Опубликовано 19 октября, 2021 · Жалоба On 10/7/2021 at 12:58 PM, Мур said: Предшественники писали так. Я только поднял тактирование в 250МГц. Раньше было 75МГц и был полный синхронизм с MCU --====================================== -- пераллельная шина на запись --====================================== process (CL250K) begin if (rising_edge(CL250K)) then if (cs = '0' and we = '0') then case (addr) is when "00000" => Control_r <= data_in; --Управления модулем приемопередатчика when "00001" => BoudRate_r <= data_in; --Настройка скорости передачи и приема when "00011" => IER_r <= data_in; --Разрешения прерываний when "00101" => IFCR_r <= data_in; --Сброс флагов запроса прерываний when "00110" => start_tx_bus <= data_in(0);--Управления передатчиком when "00111" => CntTx_r <= data_in; res_fifo <= '1'; --Размер транзакции для передачи when "01000" => ControlRx_r <= data_in; --Управление приемником when "01100" => TXBufControl_r <= data_in;--Выбора буфера передатчика when "01101" => T1_CMP_r <= data_in;--Компаратор времени окончания приема when "01110" => T2_CMP_r <= data_in;--Компаратор времени разрешения передачи when "01111" => wt_fifo_256 <= '1'; data_fifo_tx<= data_in (7 downto 0);--Регистр FIFO записи в 256 байтный буфер передатчика when "10001" => iwr_tx_fifo_4096 <= '1'; --Регистр FIFO записи в 4к байтный буфер передатчика when others => null; end case; else IFCR_r <= (others => '0'); start_tx_bus <= '0'; ControlRx_r(1) <= '0'; wt_fifo_256 <= '0'; iwr_tx_fifo_4096 <= '0'; res_fifo <= '0'; TXBufControl_r(1) <= iactive_sel; if (resControlR = '1') then TXBufControl_r(2) <= '0'; TXBufControl_r(3) <= '0'; end if; end if; end if; end process; process (we, CS,iactive_sel, resControlR) begin if ( CS = '1' ) then IFCR_r <= (others => '0'); start_tx_bus <= '0'; ControlRx_r(1) <= '0'; wt_fifo_256 <= '0'; iwr_tx_fifo_4096 <= '0'; res_fifo <= '0'; TXBufControl_r(1) <= iactive_sel; if (resControlR = '1') then TXBufControl_r(2) <= '0'; TXBufControl_r(3) <= '0'; end if; elsif (rising_edge(we)) then case (addr) is when "00000" => Control_r <= data_in; --Управления модулем приемопередатчика when "00001" => BoudRate_r <= data_in; --Настройка скорости передачи и приема when "00011" => IER_r <= data_in; --Разрешения прерываний when "00101" => IFCR_r <= data_in; --Сброс флагов запроса прерываний when "00110" => --ControlTx_r <= data_in; start_tx_bus <= data_in(0);--Управления передатчиком when "00111" => CntTx_r <= data_in; res_fifo <= '1'; --Размер транзакции для передачи when "01000" => ControlRx_r <= data_in; --Управление приемником when "01100" => TXBufControl_r <= data_in;--Выбора буфера передатчика when "01101" => T1_CMP_r <= data_in;--Компаратор времени окончания приема when "01110" => T2_CMP_r <= data_in;--Компаратор времени разрешения передачи when "01111" => wt_fifo_256 <= '1'; data_fifo_tx<= data_in (7 downto 0);--Регистр FIFO записи в 256 байтный буфер передатчика when "10001" => iwr_tx_fifo_4096 <= '1'; --Регистр FIFO записи в 4к байтный буфер передатчика when others => null; end case; end if; end process; Всех делов..... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Мур 1 12 декабря, 2022 Опубликовано 12 декабря, 2022 · Жалоба Дааа.... Офигеть! Произошла смена лидера и программист внешнего MCU ( 200 МГц ) оказался перфекционистом. Некий компромисс, который получился в итоге, (разгрузил на 60% параллельную шину дополнительным 100MHz SPI каналом от второго ядра MCU) абсолютно исключен! Логика проста,- у нас на шине с FPGA висит не большая 16К* 16 RAM, которая работает в три раза быстрее (тайминги-задержки стробов WR RD это демонстрируют). ..."Должна работать, как внешняя RAM!" Я, для полноты картины, внутрь своей ПЛИС добавил маленький RAM 512*16 . Фактически там только адресная защелка ( 200 МГц ). Выход памяти голый и на прямую выходит на сборку шины. Это только функция ИЛИ и тристабильный выход к MCU. Эксперимент показал, что тайминг дизайна держит 4 тика тактирования, а внутренняя RAM только 3. (Внешняя RAM ,- ноль!). Получается слои логики на сборке шины от дизайна теряют дополнительный тик. Я предпринимал меры сокращения задержек на сборке по ИЛИ. Разница в один тик,- это не плохо, с учетом витиеватого дизайна.... Остается вопрос, почему внутренняя RAM такая медленная? И как объяснить коллеге, что делать аналогию ASIC RAM 16К*16 с FPGA не корректно? Задержка неизбежна. Что тут убедительного можно сказать от корифеев- плисоводов? Спасибо! Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 декабря, 2022 Опубликовано 12 декабря, 2022 · Жалоба ничего не понял, что именно надо сделать, на чем, какие интерфейсы, с чем столкнулись, что не получается и т.д. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
yes 5 12 декабря, 2022 Опубликовано 12 декабря, 2022 · Жалоба проверьте мои экстрасенсорные способности 🙂 у автора ПЛИС эмулирует внешнюю асинхронную статическую память, соответственно сигнал WE (ну или CE) не успевает защелкнуться, и ПЛИС работает медленнее, чем чип внешней памяти. то есть вэйтцайклов программисту для обращения к ПЛИС (за дофига денег) приходится добавлять лишних, в сравнении с дешевой внешней памятью. за что деньги плочены??? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
des00 25 12 декабря, 2022 Опубликовано 12 декабря, 2022 · Жалоба 30 minutes ago, yes said: у автора ПЛИС эмулирует внешнюю асинхронную статическую память, соответственно сигнал WE (ну или CE) не успевает защелкнуться, и ПЛИС работает медленнее, чем чип внешней памяти. то есть вэйтцайклов программисту для обращения к ПЛИС (за дофига денег) приходится добавлять лишних, в сравнении с дешевой внешней памятью. если так. то это же очевидно, буфер туда, буфер обратно уже 10нс наберет, память на чтение 1 такт, ну и регистр по входу еще 1 такт. Уменьшить можно попробовать за счет квазиасинхронного режима работы памяти, если чип позволяет по скорости) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться