Jump to content

    
Digi

Прошу помощи с констрейнами DDR/QDR

Recommended Posts

On 7/9/2021 at 9:51 AM, Digi said:

по какому принципу нужно объединять клоки в группы ?

ИМХО - по разумению (логика). Предположим - имеете несколько клоков, каждый тактирует свое оборудование, обрабатываемые/пересылаемые данные нигде не пересекаются и между клоковыми доменами не передаются. Логично объявить эти клоки независимыми, даже если они синхронны - чтобы облегчить компилятору задачу по разводке.

И прямо противоположный пример - имеем несколько клоков, физически - из разных источников (несинхронные), но блоки, ими тактируемые, обмениваются данными. В этом случае приходится объявлять эти клоки независимыми, при этом предусмотрев механизм корректной передачи данных при пересечении клоковых доменов.

Ну и понятно, что если имеется несколько связанных между собой (синхронных) клоков (клоковых доменов), между которыми происходит обмен данными - логично их объявить синхронными (объединить в группу), чтобы обязать компилятор корректно разводить проект и проверять времянку на всех этапах передачи информации.

Как-то так...

Share this post


Link to post
Share on other sites

Вот например, как быть в таком случае ? 

Все частоты одинаковы, за исключением A_CLK.  Изначально добавлял в одну группу {A_FRMCLK1 A_CLK1} в другую FRMCLKx, отдельно каждую из DDC_CLK* и отдельно OUT_CLK.  Возникала ситуация, что на выходе CDC не всегда защёлкивались верные данные. Так как Quartus некоторые биты утягивал совершенно в другую сторону кристалла, а так как между этими клоками не происходил анализ времянок, то и ошибок для него не было.  Если замешать все клоки в одну группу, то время компиляции возрастало до неразумных пределов, и времянки везде недотягивали до требуемых. Проект становился совершенно неработоспособным.

 

image.thumb.png.82b117ffe5b3c33c862a6cd0f6ca6300.png

Share this post


Link to post
Share on other sites

Приветствую!

13 minutes ago, Digi said:

Вот например, как быть в таком случае ?
...
Возникала ситуация, что на выходе CDC не всегда защёлкивались верные данные. 

Если вы задали клоки асинхронными  и на выходе CDC получаете неправильные данные то это не CDC,  а какое то ... :bad:

И асинхронность клоков тут ни при чем.  

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
17 minutes ago, Digi said:

в другую FRMCLKx, отдельно каждую из DDC_CLK* ...  Возникала ситуация, что на выходе CDC не всегда защёлкивались верные данные.

Т.е. - CDC и все DDC заявлены асинхронными , и компилятор не анализировал времянку между ними? 

Тогда - может быть, не на выходе CDC появлялся "брак", а во входных регистрах DDC  - из-за отсутствия анализа и попыток засинхронизировать потоки данных.

Share this post


Link to post
Share on other sites
33 минуты назад, Yuri124 сказал:

Тогда - может быть, не на выходе CDC появлялся "брак", а во входных регистрах DDC  - из-за отсутствия анализа и попыток засинхронизировать потоки данных.

Да, скорее всего на входах, но суть это не меняет.  Анализ не проводится. Но при попытке увязать это всё в одну кучу, результат - невозможность вытянуть времянки

Share this post


Link to post
Share on other sites

Приветствую!

39 minutes ago, Yuri124 said:

Тогда - может быть, не на выходе CDC появлялся "брак", а во входных регистрах DDC  - из-за отсутствия анализа и попыток засинхронизировать потоки данных.

Это  как?  входной регистр CDC  работает синхронно во входном клок-домене. Получается что  для этого клока нет констрейнов?  Каким образом может быть отсутствие анализа для входного клока СDС из за асинхронности выходного клока? 

 

Удачи! Rob.    

Share this post


Link to post
Share on other sites
11 minutes ago, Digi said:

при попытке увязать это всё в одну кучу, результат - невозможность вытянуть времянки

исходя из Вашей блок-схемы - клоки FRMCLKx и DDC -  должны быть синхронными. И тогда нужно их группировать - {FRMCLKx с DDC_CLK1} и {FRMCLKx c DDC_CLK2}. А не всё в одну кучу.

6 minutes ago, RobFPGA said:

Каким образом может быть отсутствие анализа для входного клока СDС из за асинхронности выходного клока?

Я предположил, что нет анализа между CDC и DDC, из-за чего не CDC выдает неправильно, а DDC принимает неправильно.

Edited by Yuri124

Share this post


Link to post
Share on other sites

Приветствую!

30 minutes ago, Yuri124 said:

Я предположил, что нет анализа между CDC и DDC, из-за чего не CDC выдает неправильно, а DDC принимает неправильно.

Да,  вы правы. Если  FRMCLKx и DDC_CLK*  объявили асинхронными  то контроля путей  между  CDC и DDC не будет. :(  

 

Удачи! Rob.

Share this post


Link to post
Share on other sites
1 час назад, Yuri124 сказал:

И тогда нужно их группировать - {FRMCLKx с DDC_CLK1} и {FRMCLKx c DDC_CLK2}.

А вот так как раз и не получилось сгруппировать. Выдавал ошибку. Поэтому и задал вопрос. Так разве можно ? Если да, то ещё раз попробую сделать и  понять, что было не так. 

Share this post


Link to post
Share on other sites
30 minutes ago, Digi said:

Так разве можно ?

сам так не пробовал - не было необходимости. Можно попробовать объединить в группу все три этих клока, думаю, компилятор сам не должен анализировать пути между DDC_CLK1 и DDC_CLK2, т.к. судя по блок-схеме пересылок данных между этими клоковыми доменами нет.

Share this post


Link to post
Share on other sites

На первом рисунке это что в в стандартной корке DDIO. А вот во втором случае возникнет проблема  синхронизацией полуслов. Потому что FRM это не просто делённые CLK.  Кажется так...

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.