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

Xilinx ISE. Опять о задержках с использованием комбинационной логики

Например, если я пишу:

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

 

Можно ли заставить компилятор выдавать при обнаружении задержек соотв. предупреждение, а не просто выбрасывать задерживающую сигнал комбинаторную логику ?

 

 

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


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

Он их расценивает именно как некоторую логику, а не как задержку. И пытается её соптимизировать, сокращая все операции, которые в сумме сигнал не изменяют. А для той логики, что останется, будут оценены задержки на этапе sta, при условии, что у вашей цепи есть триггеры на входе и на выходе, т.к. sta умеет анализировать только межтриггерные пути (в логике общего назначения). Как задержку синтезатор умеет отслеживать только триггеры и соответствующие модули точной задержки (например iodelay, но это уже немного другое).

 

Трактовать комбинаторную схему как элемент некоторой задержки неправильно, т.к. комбинаторный элемент выполняет некоторую функцию преобразования, а вносимая задержка это не цель а средство, или т.с. "плата" (применимо к ПЛИС во всяком случае). Зачем же синтезатору выводить идеологически неправильные сообщения?)

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

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


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

Можно ли заставить компилятор выдавать при обнаружении задержек соотв. предупреждение, а не просто выбрасывать задерживающую сигнал комбинаторную логику ?

Синтезатор всегда об этом сообщает, если что то "выкидывает".

Нужно посмотреть логи XST (синтезатора Xilinx ISE), там должен быть соответствующий warning в секции removed logic, если не ошибаюсь.

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


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

Синтезатор всегда об этом сообщает, если что то "выкидывает".

Нужно посмотреть логи 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" я тоже пока не нашел ...

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


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

И где в ISE задать что-то вроде "Warnings level" я тоже пока не нашел ...

Надо смотреть не в отчете, а в Synthesis Messages.

 

UPD: а нет, даже там никаких сообщений.

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

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


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

не помню как в ISE, в квартусе в Analysis & Synthesis/Optimization Results/Register Statistics/Register Removed During Synthesis есть список "сокращённых" регистров. Для логики такого не нашёл, подозреваю, что она выбрасывается на уровне логической оптимизации, т.е. синтезатор в праве заменить логическую цепь на более простую и короткую при условии совпадении таблиц истинности. При этом никаких сообщений не нужно, т.к. функционально ничего не меняется. Есть подозрение, что и в ISE что-то подобное происходит.

 

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


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

Для логики такого не нашёл, подозреваю, что она выбрасывается на уровне логической оптимизации, т.е. синтезатор в праве заменить логическую цепь на более простую и короткую при условии совпадении таблиц истинности. При этом никаких сообщений не нужно, т.к. функционально ничего не меняется. Есть подозрение, что и в ISE что-то подобное происходит.

Очень и очень похоже, что вы правы ...

 

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


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

У меня на первый код синтезатор 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 по идее после оптимизации так и должно быть, но предупреждение выдал.

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


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

У меня на первый код синтезатор XST вообще выдал ...

А мой ISE WebPack 10.1 ничего подобного не выдавал. Какой у вас ISE ?

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


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

А мой ISE WebPack 10.1 ничего подобного не выдавал. Какой у вас ISE ?

Самая последняя версия - 14.7

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


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

ТС, вы бы пояснили, что вы вообще хотите сделать, не сообщения же синтезатора вас интересуют в конечном счете.

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


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

ТС, вы бы пояснили, что вы вообще хотите сделать, не сообщения же синтезатора вас интересуют в конечном счете.

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

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


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

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

Перечитайте, что вам serjj написал в первом ответе, про sta и принудительные задержки сигнала каксаемо FPGA.

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


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

Допустим, мне в руки попал чужой проект, и нужно быстро проверить, есть ли в нем задержки, реализованные путем использования комбинационной логики.
Проверять нужно не это. Если проект синхронный, то никакие задержки не будут оказывать никакого влияния - они все умрут на первом же триггере. Если же задержки на что то влияют, то либо их результат попал на какой то вход синхронизации какого то триггера, либо в проекте есть триггер, сделанный на логике, и в него этот сигнал и попал.

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

 

 

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


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

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

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

Гость
Ответить в этой теме...

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

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

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

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

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

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