Это про Quartus®ные грабли, по которым я походил. Кое-чего даже в Helpе нету.
Временной анализатор (Timing Analyzer) - очень полезный инструмент. Он позволяет находить в синтаксически правильном проекте места, которые будут работать со сбоями или вообще не будут работать. Но для работы с временным анализатором проект должен быть специальным образом подготовлен. В противном случае Timing Analyzer будет генерировать множество сообщений, в которых трудно найти нужную информацию. Например, будут в большом количестве появляться сообщения вида
Warning: Can't achieve timing requirement Clock Setup: 'InputMainClock' along 5420 path(s). See Report window for details.
Это означает, что в 5420 случаях тактовая частота на входе InputMainClock слишком велика, и соответствующие сигналы не успеют установиться за один её период. На самом деле Timing Analyzer просто не смог правильно оценить проект из-за недостатка информации.
Рассмотрим подготовку проекта на простом примере.
Создадим новый проект. Напишем на языке AHDL вот такой текст:
TITLE " Работа с временнЫм анализатором"; INCLUDE "lpm_counter.inc"; SUBDESIGN TestTAN ( InClock: input; Signal: output; ) VARIABLE Counter1: lpm_counter with (lpm_width = 8); Counter2: lpm_counter with (lpm_width = 8); BEGIN Counter1.clock = InClock; Counter2.clock = Counter1.q[7]; Signal = Counter2.q[7]; END;
В файле описаны два счётчика, Counter1 и Counter2, созданных на основе стандартной мегафункции счётчика LPM_COUNTER. Первый счётчик тактируется входным сигналом InClock, а второй - выходным сигналом старшего разряда первого счётчика. На выход схемы подаётся сигнал старшего разряда второго счётчика.
Сохраним этот файл под именем TestTAN.tdf в каталоге нашего проекта и сделаем его файлом верхнего уровня проекта (меню Project / Set as Top-Level Entity). Далее по тексту будет подразумеваться работа с микросхемой семейства Cyclone в Quartus II v.5.0. Для других семейств и версий САПР тексты сообщений могут несколько отличаться.
Запустим компилятор (нажмём комбинацию клавиш Ctrl + L). Убедимся, что проект откомпилировался без ошибок. Теперь можно начинать подготовку проекта для работы с временным анализатором.
После окончания компиляции Quartus покажет нам окно отчёта о компиляции (Compilation Report). В отчёте о компиляции смотрим секцию временного анализатора (Timing Analyzer), раздел сообщений (Messages). Вид окна отчёта показан на рисунке 1. В левой части окна находится панель навигации, а в правой - список сообщений, которые Quartus генерировал в ходе компиляции.
Синим цветом отмечены предупреждения (Warning). Находим сообщение вида:
Warning: Found pins functioning as undefined clocks and/or memory enables
Слева от сообщения есть небольшой знак +, обведённый квадратом. Если щёлкнуть мышью по этому знаку, то под сообщением развернётся список не определённых (пользователем) тактовых сигналов (undefined clocks). Появление этого сообщения недопустимо: оно говорит о том, что временной анализатор не знает, как ему контролировать распространение таких сигналов.
Для правильной работы временного анализатора надо описать все тактовые частоты из этого списка. В нашем списке находится один пункт:
Info: Assuming node "InClock" is an undefined clock
Это означает, что мы не определили тактовую частоту, поступающую на вход InClock. Определим её.
Порядок действий:
Компилируем проект (Ctrl + L). Снова смотрим на сообщения временного анализатора и убеждаемся, что первое предупреждение отсутствует. Теперь Quartus «знает», какой частотой тактируется наш проект.
Определили все тактовые частоты, откомпилировали проект. Теперь надо устранить сообщения вида
Warning: Found 1 node(s) in clock paths which may be acting as ripple and/or gated clocks -- node(s) analyzed as buffer(s) resulting in clock skew
Такое сообщение означает, что в качестве тактового используется сигнал, который может работать как не определённый вторичный, то есть сформированный из других сигналов (возможно, пульсирующий, ripple, или стробируемый, gated). Система Quartus требует корректного описания этого вторичного сигнала (или сигналов, если их несколько).
В нашем проекте Quartus нашёл один такой сигнал - старший разряд первого счётчика, выход которого тактирует второй счётчик:
Info: Detected ripple clock "lpm_counter:Counter1|cntr_155:auto_generated|safe_q[7]" as buffer
Определим его. Выполним пункты 1 - 5 из списка действий на первом этапе. Затем:
Последовательно нажимаем кнопки OK до закрытия окна Settings.
Если теперь откомпилировать проект, то получим только информационные сообщения с заголовками Info, окрашенные в зелёный цвет. Синих строк Warning больше не будет.
Может сложиться ситуация, когда с помощью окна Derived Clock Requirements не удастся описать сигнал, который формируется по сложному алгоритму. Тогда можно описать его как независимый (Independent to other clock settings), так, как это было сделано на первом этапе, зная максимальную частоту, с которой он может формироваться.
А здесь можно взять исходный текст примера.
Я прихожу утром на работу, включаю компьютер, он мне радостно сообщает, что система восстановлена после серьёзного сбоя. Вечером всё было хорошо. Вчера я весь день работал с Quartus, запускаю его и сегодня и получаю что-то непонятное. После получасового расследования обнаруживаю, что в файлах *.tdf пропали последние сделанные мною изменения.
Все знают :-), что в Windows XP есть замечательная функция восстановления системы (System Restore). Она по просьбе пользователя, а также в соответствии со своими замыслами создаёт так называемые контрольные точки, то есть в какой-то момент резервирует все файлы, от которых зависит работоспособность системы. Если, например, после установки новых драйверов, или после серьёзного сбоя, систему не удаётся нормально запустить, то можно запустить утилиту "Восстановление системы", и она восстановит сохранённые ею старые версии всех жизненно важных файлов для той контрольной точки, которую Вы ей укажете. Кроме того, эта утилита может запуститься и сама, обнаружив серьёзный сбой. Тогда она сообщает, что "система восстановлена после серьёзного сбоя" и ещё что-то.
Принято считать, что при восстановлении никогда не затрагиваются пользовательские документы, восстанавливаются только системные файлы. К сожалению, "Восстановление системы" причисляет к лику системных файлы *.tdf. И, стало быть, при восстановлении системы замещает их последние версии старыми. Я проверил: за пределами каталогов с рабочими файлами Quartus и MAX+Plus у меня на компьютере файлы с этим расширением встречаются только в каталоге программы Microsoft Firewall Client. После удаления этих файлов ничего плохого не произошло, впоследствии они снова появились. Поиск в Yandex привёл меня к выводу, что расширение TDF используется в экзотических (для меня) программах, и было бы очень хорошо «уговорить» Восстановление системы не восстанавливать эти файлы.
Подсказал Tosha, модератор форума на http://forum.winall.ru/, за что огромное ему спасибо.
Есть такой файл: %systemroot%\system32\restore\filelist.xml. (Для большинства компьютеров это c:\windows\system32\restore\filelist.xml.) Он скрытый и только для чтения. Снимаем атрибут "Только для чтения" и открываем файл любым текстовым редактором, который может сохранять «обычный» текст, например, Блокнотом. Удаляем следующую строчку:
<REC>TDF</REC>
Вот и всё. Снятые атрибуты на всякий случай лучше вернуть :-)
Совет: если Вы хотите открыть filelist.xml Блокнотом из Проводника, то выбирайте из контекстного меню не "Открыть", а "Изменить". В противном случае система попытается открыть этот файл при помощи Internet Explorer, и начнутся неожиданные события. Меня спасла только кнопка Reset.