Sobol' 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Приветствую всех заглянувших. Помогите разобраться, или ткните носом в соответствующую статью. Вопросы следующие: На сколько критичны в общем случае те или иные типы предупреждений? На какие варнинги обращать внимание прежде всего? можно ли как-нибудь настроить среду, чтобы незначительные в конкретной реализации предупреждения не появлялись? Только тапками не кидайте в убогого. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Maverick_ 15 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Приветствую всех заглянувших. Помогите разобраться, или ткните носом в соответствующую статью. Вопросы следующие: На сколько критичны в общем случае те или иные типы предупреждений? На какие варнинги обращать внимание прежде всего? можно ли как-нибудь настроить среду, чтобы незначительные в конкретной реализации предупреждения не появлялись? Только тапками не кидайте в убогого. исправлять что-то по предупреждениям личное дело самого разработчика (зависит от опыта и знаний). Главное, чтобы правильно и без глюков работало в "железе"... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба На какие варнинги обращать внимание прежде всего? В общем случае, для любой среды: Глобально - на них надо смотреть только тогда, если что-то не работает! 1) внимательно изучить все сообщения о том, что тот, или иной регистр ликвидирован в ходе оптимизации. Часто это указывает на банальную описку в коде, или забывчивость, когда нужный регистр не использован. 2) сообщения на тему того, что число/константа/сигнал урезан в разрядности. 3) сообщения о неподключенных портах модулей, или неполностью подключенных (к шинам меньшей разрядности, чем порт). 4) сообщения о наличии тактовых сигналов, не описанных констрейнами. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sobol' 0 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Глобально - на них надо смотреть только тогда, если что-то не работает! В этом я не сомневался. Допустим, ситуация такая, что в симуляторе все работает, а в железе - нет. Правильно ли я понимаю, что в таких ситуациях на неподключенные сигналы и на несоответствие размерностей шин можно не смотреть? Если бы дело было в этом, то и в симуляторе не заработало бы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 11 февраля, 2015 Опубликовано 11 февраля, 2015 · Жалоба Возможно крамолу скажу, но надо стараться писать так, чтобы ворнингов не возникало. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба Вобщем да. Но бывает, что по-другому никак. При том бывает, что ворнинги генерит коргеновская корка, так что их оттуда уже не вычистить. Для больших проектов скажем под последние виртексы этих ворнингов столько, что заблудишься. Мы даже сделали фильтр, чтобы искал только ворнинги о наших модулях и не трогал чужие. Фильтрация просто по пути модуля. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jackov 1 13 февраля, 2015 Опубликовано 13 февраля, 2015 · Жалоба При том бывает, что ворнинги генерит коргеновская корка, так что их оттуда уже не вычистить. Ну так-то да. Но ворнинги, хотя бы синтезатора, возникшие по вине разработчика, я считаю, можно вычистить всегда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Krys 2 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба Полностью согласен, стараюсь их вычищать по-максимуму, чтобы не мозолили глаза, иначе в куче ворнингов глаз замыливается, и уже какой-то вновь возникший не увидишь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба Допустим, ситуация такая, что в симуляторе все работает, а в железе - нет. Тут, вообще, на варнинги смотреть особо не надо. Кроме одного - "latch inferred" или "latch generated" - могут образоваться защелки там, где вы их не хотели. Смотрите, в первую очередь, на правильность констрейнов и на их выполнение. Во вторую очередь внимательно изучайте переходы данных из между разными доменами тактовых частот. В третью - корректность асинхронной логики, особенно если используются асинхронные загрузки регистров и защелок, и асинхронные сбросы-установки, кроме основного резета. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sobol' 0 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба SM, спасибо за ответ по существу. Про асинхронную логику объясните поподробнее пожалуйста. Если есть у меня асинхронный сброс, отличный от глобального сброса - какие тут могут быть подводные камни? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба Если есть у меня асинхронный сброс, отличный от глобального сброса - какие тут могут быть подводные камни? Ну, например, где-то на перепутье между доменов Вы используете импульсный сигнал из одного домена для асинхронной установки флага, а синхронный сброс из другого домена - для сброса флага. Ну и подобные хитрости. На сбросы это, в общем, не распространяется. Но в частности - может... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sobol' 0 16 февраля, 2015 Опубликовано 16 февраля, 2015 (изменено) · Жалоба В общем заработала моя железка. Почему заработала пока не осознал. Раз уж речь зашла о клоковых доменах - map выдает варнинг типа Clock buffer is designated to drive clock loads. BUFGMUX symbol ... has a mix of clock and non-clock loads. Что он имеет ввиду я понимаю - тактовые сигналы не должны использоваться ни для чего, кроме тактирования. Но если очень хочется, то как быть? Вот, к примеру есть у меня два клока: clk16 с частотой 16MHz и clk1 с частотой 1MHz. Есть регистр Reg_1, к оторый должен тактироваться clk16 но при определенных условиях менять значение по фронту clk1. Я поступаю следующим образом: // синхронизирую clk1 с clk16: always @(posedge clk16) clk1_sync <= clk1; // выделяю фронт: wire clk1_posedge = clk1 && !clk1_sync; // полученный сигнал использую в условиях типа: always @(posedge clk16) if (clk1_posedge) reg_1 <= ... else .... Изменено 16 февраля, 2015 пользователем Sobol' Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
SM 0 16 февраля, 2015 Опубликовано 16 февраля, 2015 · Жалоба Вот, к примеру есть у меня два клока: clk16 с частотой 16MHz и clk1 с частотой 1MHz. Есть регистр Reg_1, к оторый должен тактироваться clk16 но при определенных условиях менять значение по фронту clk1. Я поступаю следующим образом: // синхронизирую clk1 с clk16: always @(posedge clk16) clk1_sync <= clk1; // выделяю фронт: wire clk1_posedge = clk1 && !clk1_sync; // полученный сигнал использую в условиях типа: always @(posedge clk16) if (clk1_posedge) reg_1 <= ... else .... Это правильный подход, но синхронизирован недостаточно - первый триггер не должен использоваться в условиях, так как на его выходе высока вероятность длительного метастабильного состояния. Надо такие вещи делать на регистре сдвига из трех триггеров - первый просто приемный, а два следующих - как детектор перепада Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Sobol' 0 17 февраля, 2015 Опубликовано 17 февраля, 2015 · Жалоба Это правильный подход, но синхронизирован недостаточно - первый триггер не должен использоваться в условиях, так как на его выходе высока вероятность длительного метастабильного состояния. Надо такие вещи делать на регистре сдвига из трех триггеров - первый просто приемный, а два следующих - как детектор перепада Т.е. примерно так: reg [2..0] clk1_sync; always @(posedge clk16) begin clk1_sync[0] <= clk1; clk1_sync[1] <= clk1_sync[0]; clk1_sync[2] <= clk1_sync[1]; end wire clk1_posedge = clk1_sync[1] && !clk1_sync[2]; always @(posedge clk16) if (clk1_posedge) ....... верно? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться