Перейти к содержанию
    

Размещение компонентов на чипе

мурзилка в картинках http://www.sunburst-design.com/papers/CummingsSNUG2008Boston_CDC.pdf

Смотрелось в xilix vivado  в elaborated design (оноже RTL Viewer или аналогичное). В данном случае это "картина" рисуется чисто по исходному тексту (до синтеза)

Всё это уже предлагалось (намекали) в пятом/шестом сообщении этой темы.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Да я понимаю что намекали. Но у меня это первый в жизни проект на плис и к тому же не самый простой.

Поэтому я многих очевидных вещей и намеков могу не понимать. 

Спасибо всем кто помогает. )

В вашей студии же только для xilinx можно писать код? Она же не сможет работать с gowin? Особенно с ембеддед сдрам?

И ещё момент, можно ли эту метастаьильность как то смоделировать в моделсим например?

Если это настолько частая проблема может есть готовые корки для переходов сигналов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

xilinx только для xilinx/  Altera for Altera. Однако если код без специфики конкретных плис - то можно писать и моделировать в любой среде.

про моделирование малость было сказано в упомянутом пдф.

да. есть готовые. в том же xilinx есть "макросы" на типовые случаи.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

1 час назад, Alex77 сказал:

в пдф-е

У меня вопрос. Предположиместь двух портовое фифо. Пишет на 50. Читает на 160.  И большн ничего. Эти клоки одной группы или это клоки из разных групп?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 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;

И теперь он начал на внутренний сигнал ругаться.

image.thumb.png.189c69cdbe25725bd915d41132e9e4aa.png

 

Хотя казалось бы, тут то уже все правильно теперь сделано.

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

А еще нашел что можно использовать двухклоковое фифо.

Это я правильно понимаю что в 50мгц процесс должен записывать состояния нужных линий в это фифо, а в 160 мгц процесс должен читать эти состояния?

Правильная логика?? 

 

ChatGPT сказал что надо определить частоты как асинхронные.

Добавил вот так:

set_clock_groups -asynchronous -group [get_clocks clk_50MHz] -group [get_clocks clk_160MHz]

 

Ошибка ушла, но у меня вопрос. То что нет ошибки это правильно?? Проблема получается решена с этим сигналом?

Изменено пользователем Worldmaster

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

По теме:

1) Тригерр по 50 не всегда нужен

2) двойное тактирование на 160 принято оформлять одним процессом

3) требуется добавлять ограничения чтоб оные триггера размещались рядом

4) и да, он нужно тем или иным ограничением развязать сигнал данных между 50 и 160 (как вариант False Paths) - но только в этом месте

5) более подробного и понятного пдф я не видел - практически на все случаи...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 30.05.2024 в 22:08, Alex77 сказал:

требуется добавлять ограничения чтоб оные триггера размещались рядом

это как?

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

это в документации на сапр надо читать (при условии что эта фишка есть)

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

В 31.05.2024 в 08:18, Alex77 сказал:

(при условии что эта фишка есть)

Это про размещение на кристале или нет?? 

image.thumb.png.aeae2860caf21e1806102a9b09cd6630.png

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

да. чем меньше длина провода от выхода (160) до входа триггера на 160 - тем лучше

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Ну вот уже почти почти все стало как надо.

С метастабильностью вроде везде порешал. Где можно сделал чтобы работало от одной частоты.

Но вот он ни в какую не хочет нормально сделать FIFO

image.thumb.png.7fb7248b6b6ddf83f288857011ee63ee.png

 

Как я понимаю что тут FIFO не успевает на такой частоте установить внутренние регистры?? Уже куда только по кристалу не гонял но ничего радикально не меняется.

Это уже все?? Окончательный тупик и косяк этой корки? Так и не нашел документа где бы было указана максимальная частота этой фифы.

Можно тут что нибудь еще сделать?? Фифо двухклоковое. 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...