\documentclass{article} \input{../common-preamble} \input{../bmstu-preamble} \input{../fancy-listings-preamble} \author{Фёдоров Сергей Владимирович} \title{Проектирование цифровых устройств на программируемых логических интегральных схемах} \date{2022-09-05} \begin{document} \maketitle \tableofcontents \section{Введение (2022-09-12)} \section{Конвейеризация на примере КИХ-фильтра в ц4} Фактически, КИХ фильтр \[ y_k = \sum_i h_i x_{k-i}\] сложить и накопить результаты перемножений в аккумуляторе. Допусти, что x и h находится в памяти ПЛИС. (1) у ц4 частота 287(18х18) и 340МГц(9х9). Это означает, что если мы задействуем внутренние регистры, задержка будет около 3,4нс. у памяти тоже есть скорость например 315МГц это скорость между защёлкиванием адреса памяти и получением данных на выходном регистре памяти (около 3,1нс). Задержка аккумулятора - 5нс. Также существует задержка от памяти до умножителя на межсоединениях, например, 1,5-2нс. до аккумулятора тоже есть задержка, например 0,6нс. (2) Если не включать промежуточные регистры схема будет работать на 73,5МГц, общая задержка 13,6нс, 2 такта задержки. Если использовать регистр перед аккумулятором - 5,6нс С точки зрения баланса лучше использовать регистр перед умножителем, но проще с точки зрения кода поставить регистры на память и получится 3,1, 4,9, 5,6нс, скорость 178,5МГц и 4 такта задержки (глубокий конвейер). Чем глубже конвейер тем сложнее им управлять. Если хотим 3 такта, задержка будет 8нс, то есть 125МГц. Схема, осуществляющая максимальную задержку называется \textbf{Критическим путём}. В новых ПЛИС есть регистры межсоединений, что позволяет конвейеризовать даже их. По сути, ц2-4 это очень похожие архитектуры. У современных ПЛИС обычно несколько напряжений питания. В основном, выпускаются в корпусе BGA. ФАПЧ: PFD phase frequency detector, обратная связь от M это такая же частота и фаза с минимальным джиттером. CP charge pump LF loop filter формирует сигнал по уровню которого ГУН стабилизирует схему. VCO ГУН У любого ФАПЧ есть время захвата, то есть время стабилизации схемы. \section{Интеграция компонент в систему на кристалле} Интерфейсы систем на кристалле и пользовательские модули. Часто используются спецификации \begin{itemize} \item AXI - 4 от ARM \item Wishbone (часто применяется в свободных системах) \item Avalon (интел) - эти компоненты возможно соединять с ядром AXI. делится на два разных варианта обмена информацией \begin{itemize} \item MM - шинная (периферийные модули отображаются в единое пространство (карту памяти) мастера) \item ST - поточный (однонаправленный) интерфейс точка-точка. \end{itemize} Шину возможно расширить собственными инструкциями. \end{itemize} \subsection{Системная шина} Соежинения компонентов - это не просто проводник, а система связывания по разным протоколам. Network-on-chip. Построена на принципах потоковой передачи точка-тока. Предусмотрено много режимов и подрежимов обмена. генерируется автоматически, от параметров будет зависеть, что именно будет скомпилировано. Такой большой объём потому что нужно осуществлять мультиплексирование данных. На транспорт занимается очень много метса из-за мультиплексирование данных. Чем больше устройств висит на шине, тем больше мультиплексирования. Например, если есть модуль к окторому прикреплены шины данных, команд, ПДП, там точно понадобится арбитр. QSys реализует \begin{itemize} \item арбитраж \item декодирование адреса \item мультиплексирование данных \item управление разрядностью \item генерацию циклов ожидания \item обработку сигналов прерывания \end{itemize} Смысл в том, что данные приходят в шину, преобразуются в потоки и затем снова приходят в шину ММ. Арбитраж осуществляется не на шине, а на каждом отдельном периферийном модуле. \begin{itemize} \item Интерфейс - это группа сигналов ММ или СТ, определяющая связи между компонентами \item Компонент - логическое устройство с одним или более интерфейсом авалон \item главное устройство (Мастер) - инициирует передачи \item подчинённое устройство (Слейв) - отвечает на передачи \item источник/приёмник - интерфейсы которые посылают/получают потоковые данные в системе \item передача - чтение или запись блока данных \end{itemize} Если говорится Мастер выставляет сигнал на шину слейва, то на самом деле мастер отправил запрос в шину, а шина выставляет адрес на слейва. Если в модуле есть блочная память и регистры - они разносятся по разным интерфейсам. В отдельные интерфейсы обычно формляются клок и ресет. \subsection{Дополнительные режимы} \subsection{Специальные инструкции} Фактически, это Инструкции, которые могут добавляться в АЛУ процессора и расширять логику процессора. Если многотактовые инструкции - процессор приостановит конвейер. Внутри таких модулей также можно сделать собственный сопроцессор. Все входы такого модуля обязательные (единственное, чего может не быть - это выхода done). Всего под код специальной инструкции выделено 256 значений. Можно все 256 инструкций засунуть в один модуль, это показывает параметр n. Задействуются они также как другие инструкции на шине Avalon, их возомжно тактировать и сделать многотактовыми. После интеграции соединяем с \code{custom_instruction_master}. system.h сразу содержит макросы для доступа. \subsection{Межсоединения Platform Designer} поддержка переходов между доменами тактовых импульсов. ДТИ - это группа триггеров и связанная с ними логика, которая тактируется одним ТИ. (1) Иногда это не очень удобно. Есть два варианта в Platform Designer \begin{itemize} \item обмен с квитированием (Handshake) \item обмен через FIFO (позволяет реализовать конвейерные передачи). \end{itemize} Если бы мы не использовали мост, была бы настройка по умолчанию. Обмен с квитированием - медленный обмен и для каждой операции записи/чтения требуется несколько тактов с каждой стороны. Хорошо подходит для регистров и требует мало ресурсов. Обмен через FIFO хорошо подходит для конвейерных передач, но требует памяти для реализации. Используется для обмена с памятью, ПДП, где большой поток на высокой частоте. По-умолчанию, делается квитирование, чтобы не расзодовать ресурсы там, где это явно не требуется. Обычно неприемлемо ограничивать частоту системы частотой межсоединений, по умолчанию можно на хэндшейк оставить 1 цикл. Если задержка в шине, можно добавить такт, получив б\'{о}льшую частоту, но латентность. и Верно структурировать эти мосты вручную, а не автоматически, добавляя их только там, где их нужно добавить. Таким образом при помощи Pipeline Bridge возможно лучше структурировать межсоединения в системе. Желательно такое мостовое межсоединение делать по степени двойки. \subsection{Порты MM-Slave} Поддерживает дополнительные режимы обмена и сигналы, которые требуются этим режимам. Конвейеризованные и пакетные передачи. КП поддерживается только для чтения, для записи они не нужны. КП увеличивают пропускную способность для подчинённых портов, которые требуют несколько тактов для формирования результата после первого доступа, но далее могут формировать результаты каждый такт. Если мы например работаем между ПДП и он-чипРАМ то в он-чипе вход с регистром, если хотим повысить скорость выход тоже снабжаем регистром. Если в межсоединении тоже ковейеризация - то ещё один такт. Такое поведение возможно в три раза ускорить - выставляем адрес, на следующем такте, не дожидаясь ответа выставляем следующие адреса, а данные выставляются на каждом такте, но с первоначальной задержкой. Есть фиксированные латентности или вспомогательные сигналы. Вспомогательные сигналы обычно используются с периферией с переменной латентностью, где мы можем ждать неизвестно сколько. При переменной латентности фазы чтения и передачи данных не совпадают. ПП позволяют передать адрес и количество данных, а на слова запросы разбираются уже автоматизированно, то есть просто подряд читаем с автоинкрементом адресом. \subsection{Верификация проекта} и настройка временн\'{ы}х требований. Большая часть времени уходит именно на этот этап. Методы верификации: \begin{itemize} \item временной анализ; \item моделирование (отдельных модулей и системы в целом); \item формальная верификация; \item анализ энергопотребления; \item анализ целостности сигналов; \item внутрисхемное тестирование. \end{itemize} Основной метод для ПЛИС - функциональное моделирование и временной анализ. Если временн\'{ы}е требования выполнены и на тестбенче проект проходит верификацию, считается готовым\footnote{Для второй лабы нужно будет изменить тестбенч}. Должны быть проанализированы все требования и все пути распространения сигналов. каждый временной путь имеет начальную и конечную точку. Мы описываем ТИ в точке входа микросхемы SDRAM. Важно понимать, где начинаются и заканчиваются пути. Есть пути ТИ, пути данных и асинхронные пути (но их чаще всего не рассматривают). Запускающий и защёлкивающий фронт (Launch, latch edge) это фронты по которым срабатывает регистр-источник и по которому защёлкиваются данные (обычно считается следующий после запускающего). \begin{tikztimingtable} clk & cCCC \\ data & U2DU \\ \end{tikztimingtable} Setup and Hold. - время за сколько до ТИ нужно поменять данные и сколько после фронта ТИ нужно удерживать данные Время прибытия данных - время поступления данных на синхронный вход регистра-приёмника. Время прибытия ТИ. Требуемое время предустановки данных - к какому моменту нужно установить на входе триггера. Аналогично нужно установить по удержанию. Схема удовлетворяет требованиям, когда все запасы по всем путям положительные (Setup slack). Разница между временем установки данных и временем установки для триггера. Setup slack = min setup - max hold. новый ТИ должен прийти не раньше, чем холд тайм данных. Для асинхронных путей вводятся времена восстановления и снятия (Recovery and Removal). Асинхронный сигнал всегда главнее ТИ, триггер сбрасывается безусловно и сброс может быть подан в любой момент времени, а выводить в окрестности ТИ нежелательно. Асинхронный сброс в больших микросхемах нужно синхронизировать (2дтригера) Анализ ввода-вывода с общим ТИ. То есть таким же образом мы можем анализировать синхронные внешние схемы, например, память. Временн\'{ы}е модели (в современных ПЛИС 3). влияют техпроцесс, вариации техпроцесса, дефекты, напряжение питания, температура. При низкой температуре задержки могут увеличиваться. Важно при временных требованиях, что компилятор оптимизирует под них проект, а не просто проверяет валидность \newpage \appendix \setcounter{secnumdepth}{2} \setcounter{tocdepth}{2} \section*{Приложения} \addcontentsline{toc}{section}{Приложения} \renewcommand{\thesubsection}{\Asbuk{subsection}} \subsection{Семинар 1 (2022-09-05)} Классификация ПЛИС. Архитектура функциональных преобразователей влияет на быстродействие комбинационных схем. МУКС - это логика, которая требует достаточно большой объём и мультиплексирование большого кол-ва сигналов может снижать быстродействие. мукс32ч по 32 разряда это 1024 ЛЭ и 6 слоёв логики (1) 4вх LUT для вычисления функции от 8 параметров нужны 3-31 таких LE. фактически на 10 входо нужно 5 слоёв логики. (2) В пятых циклонах и новее ALM (адаптивные логические модули) архитектура сложнее, чем 1 4вх таблицы перекодировки. и фактически возможно сделать 6тивходовую функцию. делается 4 мультиплексора с двухразрядным выбором, получится всего два слоя логики. Дополнительные функциональные модули, влияющие на выбор ПЛИС: \begin{itemize} \item встроенная блочная память \item аппаратные умножители (LUT в этом вопросе работают неэффективно) \item модули ФАПЧ \item контроллеры памяти (всегда есть выбор реализовать самостоятельно на LUT) \begin{itemize} \item поддержка стандартов ввода-вывода \item аппаратные контроллеры \end{itemize} \item контроллеры интерфейсов \begin{itemize} \item физический уровень \item уровень доступа к среде \end{itemize} \item процессорные ядра (SoC) \end{itemize} \begin{figure}[H] \centering \includegraphics[width=12cm]{03-fpga-00-01-cycloneV.png} \end{figure} В циклон5 каждый светло-серый квадратик это 10 ALM, серая это встроенная память, чёрные это DSP-blocks аппаратные умножители с бонусом, по периметру ввод-вывод, есть высокоскоростные. зелёным отмечен PCIe. \subsubsection{Встроенная блочная память} \begin{itemize} \item Статическая ОЗУ (с точки зрения архитектуры, внешняя обычно динамическая) \item Типичный объём 4-20 кбит/блок. циклон4=9кбит, циуклон5=10кбит, стратикс5=20кбит. \item Конфигурируемая глубина и разрядность. зачем настройка на 9 разрядов? они называют его битом контроля чётности, хотя аппаратного контроля чётности нет. Также для представления данных большей разрядности и точности (родные умножители 9х9 и 18х18). Сопровождение данных служебной информацией. зачем 10 разрядов? не только детектирование, но и восстановление ошибки. АМД практикует блоки большего объёма (18 и 36 кбит), у этого есть и плюсы и минусы - данные обрабатываются параллельно, чем больше объём модуля тем меньше нужно модулей, но тем больше к ним будет попыток одновременных обращений и тем самым увеличить производительность. часто собираются памяти большего объёма из таких блоков, быстродействия падает линейно от величины блока. В последнее время часть делают блоки разных объёмов, то есть помимо аппаратных блоков статического ОЗУ делают ещё и ОЗУ на LUT. некоторые блоки из ALM сконфигурировать как модули памяти если нужны небольшие блоки памяти (MLAB до 640бит у циклона больше 5го) у зайлинкса можно набирать из слайсов по 32 бита исторически. \item возможность инициализации при включении (при прошивке) \item регистровые входы (синхронная запись, чтение происходит с задержкой в 1 или более тактов). мы работаем по тактам (3) поэтому важно, что при защёлкивании данных регистром всегда будет задержка на такт. \item в некоторых семействах есть возможность реализовать боки меньшего объёма, используя таблицы перекодировки (ALM) \item обычно вся память двухпортовая, и появляется возможность полная независимость одновременной записи и чтения \end{itemize} На памяти часто делается не только память, но и буферы ФИФО. \subsubsection{Аппаратные умножители} типичные разрядности 9х9, 18х18, 27х27. могут поддерживаться другие разрядности. поддержка знакового и беззнакового умножения. в допкоде эти процессы отличаются, поэтому в мегафункции возможно указать знаковость. отличий в блоках умножителей больше, чем даже в блоках памяти в ц4 умножитель примитивен. иногда приходится выбирать камень не по ЛЭ а по наличию умножителей и другой периферии. в ц5 умножители имеют другое название и значительно отличаются как по количеству, так и по дополнительных возможностях. Например, возможно сохранить до восьми коэффициентов, но при этом важно понимать, что вся функциональность расставляется квартусом, поэтому информация из таблиц работает не всегда. Такая усложнённая архитектура нужна в основном для ЦОС. например, в НЦ отсчёты симметричны, а для ВЦ антисимметричны, поэтому нам нужны как умножитель+сумматор или сумматор+умножитель. за один такт мы можем делать сразу 4 18-разрядных MAC (multiply and accumulate). в квартусе мы работаем с умножителями не напрямую, а через функции, например, «multiply adder intel fpga». Дополнительные возможности: \begin{itemize} \item предсумматоры \item аккумуляторы \item встроенные коэффициенты \item поддержка операций с плавающей запятой (10-е поколение) \end{itemize} у зайлинкса немного отличается. в одном блоке один умножитель и есть предсумматор. есть возможность над результатом умножения делать какую-то операцию (мини АЛУ с умножителем). \subsubsection{Модули формирования частоты на основе ФАПЧ (PLL)} \begin{itemize} \item умножение, деление и сдвиг фазы входной частоты \item несколько выходов с разными делителями и сдвигом фазы \item возможность переконфигурации во время работы. \end{itemize} Петля Костаса задействуется также через мастер мегафункций \subsubsection{Контроллеры памяти} SDRAM (DDR 2,3,4, LPDDR 2,3, DDR3L),RLDRAM 2,3, QDR 2,2+,4SRAM иногда приходится делать контроллеры памяти на логике, но тоже писать самостоятельно не надо, есть мегафункции, которые могут синтезироваться как в логику, так и в использование аппаратного контроллера. в супер-новых есть также поддержки памяти с низкой латентностью \subsubsection{Контроллеры интерфейсов} \begin{itemize} \item физический уровень (при проектировании важно определить поддержку стандартов и проверить, что возможно назначение выводов). дифференциальные и недифференциальные стандарты, стандарты для интерфейсов памяти, гигабитные приёмопередатчики. используется большое число интерфейсов с разными напряжениями питания и поэтому нужно убедиться, что в принципе, скомпилируется в выбранном камне. \item уровень доступа к среде (PCI, PCIe, Ethernet MAC) \end{itemize} \subsubsection{Процессорные ядра} \begin{itemize} \item аппаратные ядра \begin{itemize} \item ARM Cortex A \item ARM Cortex M \end{itemize} \item программные ядра \begin{itemize} \item Nios II \item Nios V (основан на архитектуре RISC V) \end{itemize} \end{itemize} Программные ядра весьма оптимизированы, чтобы работать на б\'{о}льших частотах и занимать меньше памяти. Если есть реализация аппаратного ядра это обычно отдельные линейки продуктов, обозначаются как FPGA/SoC. \subsubsection{Архитектура межсоединений} (ц4ХБ 33(31)) в ц4 ЛЭ формируются в блоки по 16. в ц5 АЛМ формируются в блоки по 10 в состав блока помимо лэ входит также локальная матрица соединений (она соединяет сигналы входа и вход ЛЭ и также туда уходит выход из ЛЭ) их не сотни а тысячи или десятки. между собой связаны глобальной матрицей соединений ГМС состоит из строки столбцов. данные могут поступать в ЛМС как со строк так и со столбцов. выходы ЛЭ возможно скоммутировать сразу на глобальную матрицу. Фактически, мы не особо влияем на распределение сигналов по межсоединениям. директлинк позволяет перескочить ГМС если лэ соединяется с каким-то ЛЭ из соседнего блока. ИО связаны с торцами столбцами и строками глобальной матрицы ввода-вывода. \subsection{Семинар 4 (2022-10-17)} асинхронный сброс возможно сделать тремя способами. невозможно сделать два управления одним сигналом на входе тригера делать общующину сброса - плохая идея По подтверждению сброса ран можно сделать квитирование \subsection{Семинар 5 (2022-10-31)} Элемента ввода-вывода. это функциональные блоки для связи со внешним миром. Если планируется работа с вводом-выводом, кроме Handbook важно на сайте intel скачать Pin connection guidelines, pin information и использовать их. Информация сохраняется в файл с расширением QSF. Выводы ПЛИС в ц4 8 банков (банк это набор элементов ввода-вывода со своим напряжением питания): \begin{itemize} \item питание, земля \begin{itemize} \item питание ядра VCCINT. например, C-IV 1,2В; \item питание элементов ввода-вывода VCCIO (для поддержки стандартов периферии обычно 1,2-3,3В.); \item у самых современных вроде ц5 есть отдельное напряжение предрайвера VCCPD; \item вспомогательные напряжения VCC\_AUX (например для ФАПЧ). \end{itemize} \item служебные выводы \begin{itemize} \item конфигурация \item JTAG энергозависимое конфигурирование \item конфигураторы конфигураций \end{itemize} \item Пользовательские элементы ввода-вывода \begin{itemize} \item выводы двойного назначения (могут быть пользовательские, но возможно и использование специальной функции ПЛИС, которую возможно запросить у квартуса). \item входы тактовых импульсов \item Поддерживается большое число как дифференциальных, так ине дифференциальных стандартов. Недифф работают по порогам напряжения LVTTL, LLCMOS. Также бывают недифференциальные с опорой (например HSTL, SSTL для памяти DDR2, DDR3) 0 и 1 определяется по некоторому среднему значению. Дифференциальные интерфейсы в основном LVDS (low voltage differential signaling) используется две линии. Дифференциальные пары надёжнее поскольку даже если будет наводка, разница напряжений не изменится. \item назначение выводов часто нетривиальная задача: в одном банке должно быть одно напряжение. В банке с дифференциальными выводами не рекомендуется размещать не дифференциальные ВЫводы. \item истинный LVDS есть только в двух банках, остальное можно сделать, но будет работать хуже. \end{itemize} \item Интерфейсы внешней памяти (поддерживаются SDR, DDR, DDR2 SDRAM) существуют как аппаратные так и программные поддержки. Для них подключаются некоторые специфические ядра, например, автокалибровки и автоподстройки интерфейсов памяти (ALTMEMPHY) поскольку нужна не только начальная калибровка, но и подгонка в процессе работы в зависимости от температуры устройства. \end{itemize} Сам по себе элемент ИО - это элемент с пятью триггерами внутри. Зачем: для экономии внутренних триггеров (защёлкивание входящих сигналов). 2 - управление временн\'{ы}ми характеристиками (с задержками по входам-выходам). У элементов ИО есть дополнительные настроки, например, \begin{itemize} \item подтягивающие регистры, \item Bus Hold \item Настройка тока выхода. (если есть стандарт, там есть настройка, какой сигнал трактовать как 0 а какой как 1. когда ток растёт, нагрузочная характеристика меняется, и сигнал может просесть ниже уровня определения логики). в КМОП технике полевые транзисторы можно включать параллельно. Чтобы выходную нагрузку регулировать запараллеливают транзисторы на инвертороподобной структуре на выходе, снижая суммарное сопротивление канала. \item Последовательное терминирование \item Управление скоростью нарастания \item Ограничивающий диод PCI \item Режим открытого коллектора \item Программируемые выводы земли \item Поддержка горячего включения \end{itemize} Выводы могут быть программируемой мощности. При этом желательно не ставить в цепь снаружи резистор, поскольку автоматически поставленный в ПЛИС диод не будет включен в схему до включения ПЛИС и есть вероятность сжечь элемент ввода-вывода. Для обеспечения совместимости 5В нужно использовать внешние буферы. \subsection{Семинар 6 (2022-11-14)} \textbf{Настройка временн\'{ы}х требований} При любой работе с периферией квартус не можетзнать, сколько будет времени задержка у внешних устройств. Поэтому мы должны изучить спеку на внешнее устройство и установить временные настройки сетап и холд. Требования настраиваются с помощью языка TCL. При настройке таймингов нужно вычислить задержки распространения сигналов по плате и указать в наносекундах (по-умолчанию, 150пс/дюйм). Для корректного формирования задержек мы должны заложить задержки на ТИ от генератора, входные задержки максимальные и минимальные (для памяти это, например, параметр CAS Latency). Данные от памяти выставляются за какое-то время, и это значение всегда находится в некотором диапазоне, конкретное время мы никогда не знаем, в том числе разные биты одной шины могут меняться в разное время, оэтому максимум (например 6+0,6 и минимум 2,7+0,4). Далее в настройке указывается куда применяется эта настройка. \begin{verbatim} # create clocks create_clock -period 20 [get_ports CLOCK_50] create_clock -period 20 [get_ports CLOCK2_50] create_clock -period 20 [get_ports CLOCK3_50] # use generated derive_pll_clocks # set uncertainty derive_clock_uncertainty set sdram_clk u0|altpll|sd1|pll7|clk[2] create_generated_clock -name sdram_clk_pin -source $sdram_clk -offset 0.5 \ [get_ports {DRAM_CLK}] set_input_delay -clock sdram_clk_pin -max [expr 6 + 0.6] \ [get_ports {DRAM_DQ[*]}] set_input_delay -clock sdram_clk_pin -min [expr 2.7 + 0.4] \ [get_ports {DRAM_DQ[*]}] set_output_delay -clock sdram_clk_pin -max [expr 1.5 + 0.6] \ [get_ports {DRAM_RAS_N DRAM_CKE DRAM_DQ[*] DRAM_CAS_N DRAM_DQM[*] DRAM_CS_N \ DRAM_WE_N DRAM_ADDR[*] DRAM_BA[*]}] set_output_delay -clock sdram_clk_pin -min [expr -0.8 + 0.4] \ [get_ports {DRAM_RAS_N DRAM_CKE DRAM_DQ[*] DRAM_CAS_N DRAM_DQM[*] DRAM_CS_N \ DRAM_WE_N DRAM_ADDR[*] DRAM_BA[*]}] set_multicycle_path -from [get_clocks {sdram_clk_pin}] -to [get_clocks {u0|altpll|sd1|pll7|clk[2]}] -setup -end 2 \end{verbatim} \subsection{Семинар 7 (2022-11-28)} \textbf{Временно анализ (продолжение)}. Компилятор может переставлять логику регистров, чтобы выравнивать время задержки между триггерами (ретайминг регистров). При понижении температуры чаще всего задержки уменьшаются. формат SDC подразумевает некоторые термины: cell - ячейка pin - вывод cell net - соединение port - физический вывод микросхемы. нетлисты отличаются по внешнему виду. \code{get_ports} искать физические узлы \code{get_pins} узлы селлов \code{get_clocks} искать ТИ по набору параметров. В квартусе есть специальный интерфейс сопоставления портов пинов и текста Name Finder. Основные настройки и ограничения \begin{itemize} \item Clocks - настройка повторяющегося периодического сигнала который может быть задан для любой точки в проекте. Есть два типа - настройка ТИ и настройка относительного ТИ (Generated Clock). \textbf{По умолчанию, считается, что все ТИ связаны}. То есть чтобы верно анализировать нужно разделить проект на тактовые домены при помощи исключений. Если сгенерированы ФАПЧем нужно описывать многотактовые цепи. \code{create_clock [-name] -preiod [-waveform{RaiseTime FallTime}, , -add]} -add нужен, чтобы добавлять настройки и явно указать, что предыдущие настройки не должны быть перетёрты. \code{create_denerated_clock} значительно больше параметров (это может быть ТИ который формируется на ФАПЧ или методом деления, может быть ТИ, учитывающим задержки по схеме и снаружи). для ТИ на выходе ФАПЧ обычно не создают руками, а пишут \code{derive_pll_clocks}. Делитель на основе регистра - это плохая иедя (ripple clock) из-за задержек сигнала на триггерах и инверторах. Для повышения точности моделирования возможно задать \code{set_clock_latency} которая водит дополнительную задержку и внутренний джиттер (clock uncertainty) по сетапу и холду \code{derive_clock_uncertainty}. \item IO. Задержки могут быть как от регистра к регистру, так и в комбинационной логике. \code{set_max_delay}, \code{set_min_delay} где мы нормируем максимальное и минимальное время распространения сигнала через ПЛИС. \item async paths (skipped) \item false paths \code{set_false_path} - исключает группу цепей из анализа, \code{set_clock_groups} - описывает связанные группы ТИ, между несвязанными группами все переходы исключаются из анализа. Обязательно указываем какую цепь рвём. Можно исключить задержки по холду и сетапу. Или например не надо анализировать какую-то тестовую логику, тогда это тоже фолс пути. сетКлокГрупс группы можно добавить с ключом -exclusive это исключение одновременного присутствия ТИ, а asyncronous могут. \item multicycle paths обязательно нужно прописывать, что если на ФАПЧ есть сдвиг фазы, то защёлкивающий такт не следующий фронт, а через один. Или если у нас есть сложная логика, которая не успевает отработать за такт, тогда надо установить холд на первом такте, а сетап на втором такте. \end{itemize} \subsection{Avalon-ST} \subsection{Проектирование ПЛИС} \end{document}