Alex77 4 17 мая Опубликовано 17 мая · Жалоба мурзилка в картинках http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf Смотрелось в xilix vivado в elaborated design (оноже RTL Viewer или аналогичное). В данном случае это "картина" рисуется чисто по исходному тексту (до синтеза) Всё это уже предлагалось (намекали) в пятом/шестом сообщении этой темы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 17 мая Опубликовано 17 мая · Жалоба Да я понимаю что намекали. Но у меня это первый в жизни проект на плис и к тому же не самый простой. Поэтому я многих очевидных вещей и намеков могу не понимать. Спасибо всем кто помогает. ) В вашей студии же только для xilinx можно писать код? Она же не сможет работать с gowin? Особенно с ембеддед сдрам? И ещё момент, можно ли эту метастаьильность как то смоделировать в моделсим например? Если это настолько частая проблема может есть готовые корки для переходов сигналов? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 17 мая Опубликовано 17 мая · Жалоба xilinx только для xilinx/ Altera for Altera. Однако если код без специфики конкретных плис - то можно писать и моделировать в любой среде. про моделирование малость было сказано в упомянутом пдф. да. есть готовые. в том же xilinx есть "макросы" на типовые случаи. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 17 мая Опубликовано 17 мая · Жалоба А можете показать пример для передачи 1 и нескольких линий? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 17 мая Опубликовано 17 мая · Жалоба в пдф-е Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 17 мая Опубликовано 17 мая · Жалоба 1 час назад, Alex77 сказал: в пдф-е У меня вопрос. Предположиместь двух портовое фифо. Пишет на 50. Читает на 160. И большн ничего. Эти клоки одной группы или это клоки из разных групп? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 30 мая Опубликовано 30 мая · Жалоба В 17.05.2024 в 17:04, sazh сказал: У меня вопрос. Предположиместь двух портовое фифо. Пишет на 50. Читает на 160. И большн ничего. Эти клоки одной группы или это клоки из разных групп? Это к кому вопрос то?? В 17.05.2024 в 15:16, Alex77 сказал: в пдф-е Вот что у меня получилось: Вот такой код для передачи 1 сигнала: library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.NUMERIC_STD.ALL; entity clock_domain_crossing is Port ( clk_low_frrq : in std_logic; clk_hi_freq : in std_logic; signal_in : in std_logic; signal_out : out std_logic ); end clock_domain_crossing; architecture rtl of clock_domain_crossing is signal signal_in_50MHz : std_logic; signal sync_160MHz_1 : std_logic; signal sync_160MHz_2 : std_logic; begin -- Capture signal in 50MHz domain process(clk_low_frrq) begin if rising_edge(clk_low_frrq) then signal_in_50MHz <= signal_in; end if; end process; -- Synchronize signal to 160MHz domain process(clk_hi_freq) begin if rising_edge(clk_hi_freq) then sync_160MHz_1 <= signal_in_50MHz; end if; end process; -- Synchronize signal to 160MHz domain process(clk_hi_freq) begin if rising_edge(clk_hi_freq) then sync_160MHz_2 <= sync_160MHz_1; end if; end process; signal_out <= sync_160MHz_2; end rtl; И теперь он начал на внутренний сигнал ругаться. Хотя казалось бы, тут то уже все правильно теперь сделано. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 30 мая Опубликовано 30 мая (изменено) · Жалоба А еще нашел что можно использовать двухклоковое фифо. Это я правильно понимаю что в 50мгц процесс должен записывать состояния нужных линий в это фифо, а в 160 мгц процесс должен читать эти состояния? Правильная логика?? ChatGPT сказал что надо определить частоты как асинхронные. Добавил вот так: set_clock_groups -asynchronous -group [get_clocks clk_50MHz] -group [get_clocks clk_160MHz] Ошибка ушла, но у меня вопрос. То что нет ошибки это правильно?? Проблема получается решена с этим сигналом? Изменено 30 мая пользователем Worldmaster Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
sazh 8 30 мая Опубликовано 30 мая · Жалоба 4 часа назад, Worldmaster сказал: А еще нашел что можно использовать двухклоковое фифо. Это я правильно понимаю что в 50мгц процесс должен записывать состояния нужных линий в это фифо, а в 160 мгц процесс должен читать эти состояния? Правильная логика?? ChatGPT сказал что надо определить частоты как асинхронные. Добавил вот так: set_clock_groups -asynchronous -group [get_clocks clk_50MHz] -group [get_clocks clk_160MHz] Ошибка ушла, но у меня вопрос. То что нет ошибки это правильно?? Проблема получается решена с этим сигналом? Забудьте о процессах. Вы не программу пишете. Вы на языке описания аппаратуры реализуете счетчики, фифо, память, регистры, комбинаторную логику. По фен_шуй сначала идет борьба с метастабильностью. Например прием rs232. Пропускаете rxd через цепочку d- триггеров (минимум 2). Дальше формируете схемную реализацию по переходу их одного клокового домена в другой. В сумме это как минимум цепочка из 3х триггеров (если речь об 1 бит проводе). Если Вам надо непрерывный массив данных передать в другой клоковый домен, используете дву портовое фифо. Там уже все это есть. Но как описывать это в констрейнах, надо читать. И можно ли считать, что клоки на запись и чтение это разные группы. Но часто бывает, что надо передать в другой клоковый домен N битный результат какого либо вычисления, период обновления которого много больше периода другого клокового домена. Имеет смысл тогда сопроводить этот результат одиночным импульсом и перевести именно этот импульс в другой клоковый домен, перезаписав N разрядные данные по вновь сформированному импульсу в другом клоковом домене. Лет 10 назад здесь приводился схемный вариант и лучше его я не встречал (переход как снизу вверх так и сверху вниз). Теперь констрейны. Я не знаю как описывать такой переход из одного клокового домена в другой. То что Вы написали, это указание анализатору, что синхросигналы из разных групп, они могут изменяться в любые моменты времени. И в Вашем случае получается все чисто ибо Вы передаете результат i2c за меньшее время, чем время его изменения. Скачайте (в свободном доступе) книгу Соловьев В.В. временной анализ. Там все расписано. И вообще, стремитесь к одноклоковой синхронизации. Тогда модуль становиться параметризированным и его можно написать на все случаи жизни ( это актуально с последовательными интефейсами). Что мешает посадить i2c на 160 МГц. test.zip Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 30 мая Опубликовано 30 мая · Жалоба По теме: 1) Тригерр по 50 не всегда нужен 2) двойное тактирование на 160 принято оформлять одним процессом 3) требуется добавлять ограничения чтоб оные триггера размещались рядом 4) и да, он нужно тем или иным ограничением развязать сигнал данных между 50 и 160 (как вариант False Paths) - но только в этом месте 5) более подробного и понятного пдф я не видел - практически на все случаи... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 31 мая Опубликовано 31 мая · Жалоба В 30.05.2024 в 22:08, Alex77 сказал: требуется добавлять ограничения чтоб оные триггера размещались рядом это как? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 31 мая Опубликовано 31 мая · Жалоба это в документации на сапр надо читать (при условии что эта фишка есть) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 31 мая Опубликовано 31 мая · Жалоба В 31.05.2024 в 08:18, Alex77 сказал: (при условии что эта фишка есть) Это про размещение на кристале или нет?? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Alex77 4 31 мая Опубликовано 31 мая · Жалоба да. чем меньше длина провода от выхода (160) до входа триггера на 160 - тем лучше Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Worldmaster 0 31 мая Опубликовано 31 мая · Жалоба Ну вот уже почти почти все стало как надо. С метастабильностью вроде везде порешал. Где можно сделал чтобы работало от одной частоты. Но вот он ни в какую не хочет нормально сделать FIFO Как я понимаю что тут FIFO не успевает на такой частоте установить внутренние регистры?? Уже куда только по кристалу не гонял но ничего радикально не меняется. Это уже все?? Окончательный тупик и косяк этой корки? Так и не нашел документа где бы было указана максимальная частота этой фифы. Можно тут что нибудь еще сделать?? Фифо двухклоковое. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться