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

    

Quartus Design assistant. Ошибки.

Приветствую Уважаемые посетители форума !

При синтезировании прошивки я столкнулся с тем, что в Quartus "Design assistant" ругается на неправильную передачу сигналов между клоковыми доменами.

Но проблема в том, что он обнаружил клоковые домены, которых нет :wacko: .

 

Critical Warning (308067): (High) Rule D103: Data bits are not correctly synchronized when transferred between asynchronous clock domains. (Value defined:2). Found 4 asynchronous clock domain interface structure(s) related to this rule.
    Critical Warning (308012): Node  "Buff_controller:Buff_controller_comp|pres_state.buff3"
    Critical Warning (308012): Node  "Buff_controller:Buff_controller_comp|pres_state.buff2"
    Critical Warning (308012): Node  "Buff_controller:Buff_controller_comp|KAA_shreg_debouncer:KAA_shreg_debouncer_comp|data_out"
    Critical Warning (308012): Node  "Buff_controller:Buff_controller_comp|KAA_edge_dtct:DE_Fedge_detect|edge_detector"

 

Проверял в Quartus 13.1 Web Edition, Quartus 15.0 Web Edition, Quartus Prime 17.1 Lite Edition. Все они ругаются на одно и тоже.

Либо у меня крыша едет и я действительно в упор ошибку не вижу. Либо это врет "Design assistant".

Прикладываю полностью весь модуль, который вызывает параною у "Design assistant".

Верхний уровень проекта - SCALER

Имя модуля в котором обнаруживаются "ложные" клоковые домены - Buff_controller.

 

SCALER.zip

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


Ссылка на сообщение
Поделиться на другие сайты
При синтезировании прошивки я столкнулся с тем, что в Quartus "Design assistant" ругается на неправильную передачу сигналов между клоковыми доменами.
Ещё компилятор ругается на отсутствие sdc - Вы его забыли приложить?

И, раз Вы говорите об отсутствии в проекте разных тактовых доменов: покажите, в каком файле отчёта видно, что на все триггеры проекта заведена одна и та же глобальная частота?

 

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


Ссылка на сообщение
Поделиться на другие сайты
Ещё компилятор ругается на отсутствие sdc - Вы его забыли приложить?

И, раз Вы говорите об отсутствии в проекте разных тактовых доменов: покажите, в каком файле отчёта видно, что на все триггеры проекта заведена одна и та же глобальная частота?

SDC забыл приложить. Но даже с ним проблема не уходит.

Доменов у меня 2. Домен с частотой pixel_clk и домен с частотой rdclk_FIFO (домен SDRAM)

Quartus по неизвестной мне причине считает, что у меня сигналы, которые я привел в первом сообщении, работают в разных клоковых доменах. Но это не так. Со вторым клоковом доменом работает только DCFIFO. И есть подозрение что именно в том, что Quarus находит "ложные" клоковые домены кроется причина в сбоях, проявляющаяся в мерцании изображения на экране монитора, куда я вывожу данные.

 

Вот структура проекта. Тут ясно видно, что все сигналы модуля Buff_controller работают в одном домене...

CDC_FAIL.png

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


Ссылка на сообщение
Поделиться на другие сайты
Вот структура проекта. Тут ясно видно, что все сигналы модуля Buff_controller работают в одном домене...
Загляните в файл SCALER.drc.rpt: там более подробно пояснено, что Design Assistant-у не нравится:

+--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
; High Violations                                                                                                                                                                                                   ;
+-----------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------+
; Rule name                                                                                                            ; Name                                                                                      ;
+-----------------------------------------------------------------------------------------------------------------------+--------------------------------------------------------------------------------------------+
; Rule D103: Data bits are not correctly synchronized when transferred between asynchronous clock domains - Structure 1;                                                                                           ;
;  Source node(s) from clock "pixel_clk"                                                                               ; Buff_controller:Buff_controller_comp|pres_state.buff3                                     ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[2]                                  ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[1]                                  ;
; Rule D103: Data bits are not correctly synchronized when transferred between asynchronous clock domains - Structure 2;                                                                                           ;
;  Source node(s) from clock "pixel_clk"                                                                               ; Buff_controller:Buff_controller_comp|pres_state.buff2                                     ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[2]                                  ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[1]                                  ;
; Rule D103: Data bits are not correctly synchronized when transferred between asynchronous clock domains - Structure 3;                                                                                           ;
;  Source node(s) from clock "pixel_clk"                                                                               ; Buff_controller:Buff_controller_comp|KAA_shreg_debouncer:KAA_shreg_debouncer_comp|data_out;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[2]                                  ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[1]                                  ;
; Rule D103: Data bits are not correctly synchronized when transferred between asynchronous clock domains - Structure 4;                                                                                           ;
;  Source node(s) from clock "pixel_clk"                                                                               ; Buff_controller:Buff_controller_comp|KAA_edge_dtct:DE_Fedge_detect|edge_detector          ;
;  Synchronizer node(s) from clock "rdclk_FIFO"                                                                        ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[2]                                  ;
;  Synchronizer node(s) from clock "rdclk_FIFO"

Думаю, ответ на Ваш вопрос теперь очевиден?

 

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


Ссылка на сообщение
Поделиться на другие сайты
Загляните в файл SCALER.drc.rpt: там более подробно пояснено, что Design Assistant-у не нравится:

; Synchronizer node(s) from clock "rdclk_FIFO"[/code] Думаю, ответ на Ваш вопрос теперь очевиден?

Совсем не очевиден. Я Совсем ничего не понимаю :wacko: .

Почему он считает, что я передаю эти сигналы в другой клоковый домен ?

Я в другой клоковый домен через синхронизатор передаю только сигнал row_ready.

И вот регистры этого синхронизатора:

;  Synchronizer node(s) from clock "rdclk_FIFO"    ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[2]                              
;  Synchronizer node(s) from clock "rdclk_FIFO"    ; KAA_sreg_syncronizer:KAA_domain_syncronizer_comp|sreg[1]

Остальные данные передаю через DCFIFO.

Но вот, что интересно, он ругается именно на те сигналы, которые участвуют в формировании сигнала row_ready.

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


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

Ему не нравится что у вас между регистрами которые формируют сигнал row_ready и регистром внутри синхронизатора есть логика. Добавьте либо триггер на выходе Buff_controller, либо в синхронизаторе сделайте вход для исходной частоты и защелкните data_async в регистр по его родной частоте прежде чем подавать на сдвиговый регистр.

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


Ссылка на сообщение
Поделиться на другие сайты
Ему не нравится что у вас между регистрами которые формируют сигнал row_ready и регистром внутри синхронизатора есть логика. Добавьте либо триггер на выходе Buff_controller, либо в синхронизаторе сделайте вход для исходной частоты и защелкните data_async в регистр по его родной частоте прежде чем подавать на сдвиговый регистр.

Я так и сделал, и проблема с мерцанием изображения ушла. Но непонятно почему ему не нравится изначальный вариант. Ведь по сути передача данных идет из одного домена в другой. Да и в констрейнах я указал не анализировать пути между доменами. Хотя констрейны он вроде проверяет на самом последнем этапе.

Ведь никто не запрещает комбинационный сигнал формируемый в одном домене передать в другой через синхронизатор...

Но всё равно спасибо за совет :cheers:

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


Ссылка на сообщение
Поделиться на другие сайты
Ведь никто не запрещает комбинационный сигнал формируемый в одном домене передать в другой через синхронизатор...

Вот тут, страница 10-12, объясняется почему так не надо делать

http://www.sunburst-design.com/papers/Cumm...8Boston_CDC.pdf

 

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


Ссылка на сообщение
Поделиться на другие сайты
Вот тут, страница 10-12, объясняется почему так не надо делать

http://www.sunburst-design.com/papers/Cumm...8Boston_CDC.pdf

Ух ты ! А эту доку я в первый раз вижу. Спасибо огромное !

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти