kovigor 5 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба Например, если я пишу: module combinatorial_delay_with_delay_elements_removed (in_, out1_); input in_; output out1_; wire dummy_1, dummy_2, dummy_3; assign dummy_1 = (~in_); assign dummy_2 = (~dummy_1); assign dummy_3 = (in_ ^ dummy_2); assign out1_ = (~dummy_3); endmodule то компилятор мои инверторы без всяких предупреждений выбрасывает, а если пишу вот так, то он их оставляет: module combinatorial_delay_with_delay_elements_keeped (in_, out1_); input in_; output out1_; (* KEEP = "TRUE" *) wire dummy_1, dummy_2, dummy_3; assign dummy_1 = (~in_); assign dummy_2 = (~dummy_1); assign dummy_3 = (in_ ^ dummy_2); assign out1_ = (~dummy_3); endmodule Можно ли заставить компилятор выдавать при обнаружении задержек соотв. предупреждение, а не просто выбрасывать задерживающую сигнал комбинаторную логику ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 29 июля, 2015 Опубликовано 29 июля, 2015 (изменено) · Жалоба Он их расценивает именно как некоторую логику, а не как задержку. И пытается её соптимизировать, сокращая все операции, которые в сумме сигнал не изменяют. А для той логики, что останется, будут оценены задержки на этапе sta, при условии, что у вашей цепи есть триггеры на входе и на выходе, т.к. sta умеет анализировать только межтриггерные пути (в логике общего назначения). Как задержку синтезатор умеет отслеживать только триггеры и соответствующие модули точной задержки (например iodelay, но это уже немного другое). Трактовать комбинаторную схему как элемент некоторой задержки неправильно, т.к. комбинаторный элемент выполняет некоторую функцию преобразования, а вносимая задержка это не цель а средство, или т.с. "плата" (применимо к ПЛИС во всяком случае). Зачем же синтезатору выводить идеологически неправильные сообщения?) Изменено 29 июля, 2015 пользователем serjj Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 29 июля, 2015 Опубликовано 29 июля, 2015 · Жалоба Можно ли заставить компилятор выдавать при обнаружении задержек соотв. предупреждение, а не просто выбрасывать задерживающую сигнал комбинаторную логику ? Синтезатор всегда об этом сообщает, если что то "выкидывает". Нужно посмотреть логи XST (синтезатора Xilinx ISE), там должен быть соответствующий warning в секции removed logic, если не ошибаюсь. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба Синтезатор всегда об этом сообщает, если что то "выкидывает". Нужно посмотреть логи XST (синтезатора Xilinx ISE), там должен быть соответствующий warning в секции removed logic, если не ошибаюсь. Похоже, не всегда. И такой секции в отчете XST нет. Есть вот такие: TABLE OF CONTENTS 1) Synthesis Options Summary 2) HDL Compilation 3) Design Hierarchy Analysis 4) HDL Analysis 5) HDL Synthesis 5.1) HDL Synthesis Report 6) Advanced HDL Synthesis 6.1) Advanced HDL Synthesis Report 7) Low Level Synthesis 8) Partition Report 9) Final Report 9.1) Device utilization summary 9.2) Partition Resource Summary 9.3) TIMING REPORT И где в ISE задать что-то вроде "Warnings level" я тоже пока не нашел ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Amurak 0 30 июля, 2015 Опубликовано 30 июля, 2015 (изменено) · Жалоба И где в ISE задать что-то вроде "Warnings level" я тоже пока не нашел ... Надо смотреть не в отчете, а в Synthesis Messages. UPD: а нет, даже там никаких сообщений. Изменено 30 июля, 2015 пользователем Amurak Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
serjj1333 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба не помню как в ISE, в квартусе в Analysis & Synthesis/Optimization Results/Register Statistics/Register Removed During Synthesis есть список "сокращённых" регистров. Для логики такого не нашёл, подозреваю, что она выбрасывается на уровне логической оптимизации, т.е. синтезатор в праве заменить логическую цепь на более простую и короткую при условии совпадении таблиц истинности. При этом никаких сообщений не нужно, т.к. функционально ничего не меняется. Есть подозрение, что и в ISE что-то подобное происходит. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба Для логики такого не нашёл, подозреваю, что она выбрасывается на уровне логической оптимизации, т.е. синтезатор в праве заменить логическую цепь на более простую и короткую при условии совпадении таблиц истинности. При этом никаких сообщений не нужно, т.к. функционально ничего не меняется. Есть подозрение, что и в ISE что-то подобное происходит. Очень и очень похоже, что вы правы ... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба У меня на первый код синтезатор XST вообще выдал WARNING:Xst:647 - Input <in_> is never used. This port will be preserved and left unconnected if it belongs to a top-level block or it belongs to a sub-block and the hierarchy of this sub-block is preserved. При этом выход жестко на единицу повесил. Ps по идее после оптимизации так и должно быть, но предупреждение выдал. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба У меня на первый код синтезатор XST вообще выдал ... А мой ISE WebPack 10.1 ничего подобного не выдавал. Какой у вас ISE ? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
bogaev_roman 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба А мой ISE WebPack 10.1 ничего подобного не выдавал. Какой у вас ISE ? Самая последняя версия - 14.7 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба ТС, вы бы пояснили, что вы вообще хотите сделать, не сообщения же синтезатора вас интересуют в конечном счете. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
kovigor 5 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба ТС, вы бы пояснили, что вы вообще хотите сделать, не сообщения же синтезатора вас интересуют в конечном счете. Допустим, мне в руки попал чужой проект, и нужно быстро проверить, есть ли в нем задержки, реализованные путем использования комбинационной логики. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Mad_kvmg 0 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба Допустим, мне в руки попал чужой проект, и нужно быстро проверить, есть ли в нем задержки, реализованные путем использования комбинационной логики. Перечитайте, что вам serjj написал в первом ответе, про sta и принудительные задержки сигнала каксаемо FPGA. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
xvr 12 30 июля, 2015 Опубликовано 30 июля, 2015 · Жалоба Допустим, мне в руки попал чужой проект, и нужно быстро проверить, есть ли в нем задержки, реализованные путем использования комбинационной логики.Проверять нужно не это. Если проект синхронный, то никакие задержки не будут оказывать никакого влияния - они все умрут на первом же триггере. Если же задержки на что то влияют, то либо их результат попал на какой то вход синхронизации какого то триггера, либо в проекте есть триггер, сделанный на логике, и в него этот сигнал и попал. В первом случае синтезатор будет выдавать предупреждения о использовании комбинаторного сигнала в качестве тактового (или тактового в качестве комбинаторного), что есть признак асинхронного дизайна. Во втором случае синтезатор выдаст предупреждение и комбинаторных петлях в RTL, что так же является признаком асинхронного дизайна. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться