Содержание к диссертации
Введение
1. Состояние в области проектирования систем на кристалле и постановка задачи исследования 15
1Л. Обзор элементной базы систем на одном кристалле 15
1ЛЛ. Примеры реализации систем на одном кристалле 15
1 Л.2. Классификация цифровых интегральных микросхем 19
1Л.З- Классификация систем на одном кристалле 24
1Л А Достоинства и недостатки ПЛИС в качестве основы реализации систем на одном кристалле 26
1.2.. Основные проблемы, возникающие при проектировании систем на одном кристалле и возможные пути их решения 29
1.2Л. Различные подходы и методологии проектирования отдельных узлов 29
1.2.2. Виды ядер многократного использования 32
1.2.3. Примеры решения проблем 33
1.3. Обзор современных САПР ПЛИС 35
1.3.L Средства проектирования систем на одном кристалле на основе многократно используемых блоков фирмы ХШпх 35
1,3.2. Средства проектирования систем на одном кристалле на основе ПЛИС фирмы ALTERA 37
1.3-3. Средства проектирования систем на одном кристалле фирмы ATMEL 38
1.3.4. Программные средства фирмы Mentor Graphics 44
1.3.5. Маршрут проектирования цифровых устройств в базисе ПЛИС 46
1.4. Цель и постановка задачи исследований 50
1.5. Выводы 52
2. Разработка методики проектирования сложных ядер в базисе ПЛИС 53
2.1. Методика проектирования сложного ядра 53
2.2. Маршрут проектирования сложного ядра 59
2.3. Общие правила проектирования 64
2-4, Правила создания ядер, используя язык описания аппаратуры VHDL 68
2,5. Методики проектирования отдельных блоков сложных ядер. 71
2.5Л. Критерии оценки сложного ядра 71
2.5.2. Проектирование схем с памятью 76
2.5.3- Методы проектирования конвейерных вычислительных устройств 81
* 2.6. Выводы 91
3. Применение разработанной методики проектирования 92
ЗЛ. Разработка ядра Быстрого Преобразования Фурье 92
ЗЛЛ. Выбор ПЛИС для реализации ядра БПФ 92
ЗЛ.2. Применение предложенных методик при проектировании ядра 95
ЗАЗ. Реализации ядра БПФ большой размерности для г кристаллов серии Virtex II и Virtex II Pro 103
3.2. Выводы 104
4. Анализ разработанной методики 105
4Л. Анализ применения 105
4.2, Сравнение полученных ядер с существующими 110
4.3- Выводы 114
Заключение.. 115
Список литературы
- Обзор элементной базы систем на одном кристалле
- Достоинства и недостатки ПЛИС в качестве основы реализации систем на одном кристалле
- Правила создания ядер, используя язык описания аппаратуры VHDL
- Выбор ПЛИС для реализации ядра БПФ
Введение к работе
В настоящее время микроэлектроника является одной из наиболее динамично развивающихся отраслей промышленности. Достигнутый технологический уровень позволяет создавать цельте системы на одном кристалле. Современные средства, где доминирует программное обеспечение САПР, не могут оперировать с требуемым количеством транзисторов, быстро возрастающим в соответствии с законом Мура. Возникает основное противоречие, связанное с одной стороны с быстрым ростом возможностей элементной базы, а с другой — с недостатком современных средств автоматизированного проектирования устройств данного класса [15].
Всё большее количество выпускаемых серийно микросхем можно назвать системами на одном кристалле. Система на Одном Кристалле (СОК, в английской языке System On a Chip) - отдельный чип, на котором, в зависимости от необходимости, интегрированы ядро RISC-процессора или DSP, память, программируемая логика, аналоговые функции, устройства коммуникационных интерфейсов и управления потреблением мощности. Ранее такие элементы требовали размещения на отдельных микросхемах. Реализуя на едином кристалле кремния большое число системных функций, эти микросхемы составляют наибольшую часть стоимости системы в целом. В большинстве сотовых телефонов, мультимедиа системах, домашних кинотеатрах или автомобильной электронике без таких микросхем обойтись уже нельзя. Сегодня система на кристалле стоит много меньше, чем аналогичная на стандартном микропроцессоре с равным числом интегральных транзисторов и сравнимыми затратами на проектирование [7].
Низкая цена - это не единственное преимущество данных систем. Такие качества как высокая производительность и надежность, малые потребляемые мощности, многофункциональность и удобства для пользователя, сокращение времени выхода конечного продукта на рынок, простота проектирования делают изготовление таких систем привлекательными как для заказчика, так и для проектировщика.
Цифровые системы на кристалле могут быть построены на различном аппаратном базисе. В настоящее время рынок программируемых логических интегральных микросхем (ПЛИС) является одним из наиболее динамично развивающихся. ПЛИС применяются в следующих направлениях:
аппаратные макеты цифровых устройств,
в случае мелко серийного производства (сокращение сроков выхода на рынок по сравнению с применением заказных и полузаказных интегральных микросхем),
программно определяемое радио - новая технология в системах связи,
реконфигурируемые вычислители,
Программное обеспечение, применяемое при разработке цифровых устройств, быстро морально устаревает вследствие высоких темпов развития элементной базы, результатом чего является необходимость его модернизации. Данное утверждение полностью правомерно и по отношению к САПР ПЛИС. Так, на данный момент, в современных коммерческих САПР ПЛИС, хорошо отработаны методы получения конфигурации ПЛИС по моделям устройств на уровне регистровых передач. Однако современные устройства ПЛИС обладают такой логической емкостью, что позволяют проектировать целые системы на одном кристалле, и соответственно для проектирования систем необходимо применять средства проектирования на системном уровне. В настоящее время нет однозначной, удовлетворяющей всех разработчиков аппаратуры методологии получения конфигурации ПЛИС по функциональной модели устройства на системном уровне.
Многократно используемый блок (Reusable Block) - однажды спроектированный, верифицированный функциональный блок, который может быть использован повторно» Такие блоки часто называют ядрами (Cores)» виртуальными компонентами (Virtual Component — VC) , макроэлементами, интеллектуальной собственностью (ТР - ядрами). В данной работе используется термин ядро, как наиболее употребляемое в настоящее время в русской и иностранной литературе. Ядро - это подпрограмма для
системы САПР» которая позволяет реализовать автоматизированными средствами закопченную функциональную часть проектируемого устройства в кристалле.
Многократное использование ядер интеллектуальной собственности (IP reuse) — это один из путей усовершенствования продуктивности проектирования систем на одном кристалле. Хотя многократное использование ядер было открыто и технически, и как бизнес концепция уже много лет назад [51], но только в последнее время систематическое использование, основанное на технологии EDA (Electronic Design Automation - автоматизация проектирования электронных приборов и устройств) позволило осуществить выход на полупроводниковый рынок.
Применение ядер при проектировании по технологии ПЛИС позволяет сократить время проектирования в несколько раз (например, с двух месяцев до двух недель). Это достигается за счёт отсутствия этапов проектирования тех элементов микросхемы, которые реализуются ядрами. Причём, данный метод может применяться для любой технологии производства микросхем.
Проектирование на основе ядер (Core-Based Design) становится все более популярным среди фирм изготовителей во всем мире [63]. Компании располагают своими библиотеками компонентов, которые не совместимы друг с другом. Этот факт замедляет, а иногда останавливает процесс проектирования из-за трудности или невозможности перевода ядер из одного формата в другой. Зачастую проектировщикам приходится тратить много времени для решения проблем верификации ядер в своих системах. Это противоречит принципам создания систем на кристалле на основе готовых блоков, где все направлено на облегчение и ускорение процесса проектирования.
Закрытость архитектур коммерческих САПР делает невозможным добавление собственных функциональных моделей устройств на системном уровне для получения по ним моделей устройства на уровне регистровых передач.
Существует популярный подход, позволяющий осуществить переход от функциональной модели на системном уровне к модели устройства на уровне регистровых передач - применение языков описания аппаратуры па системном уровне (SLDLs, system-level design languages). К таким языкам относятся: SystemC, Handel-C, OpenVera, Основным недостатком данного подхода является ограниченность групп алгоритмов, которые возможно применять для осуществления данного перехода, следствием чего является снижение качества получаемого решения (по сравнению с технологией ядер). Однако его несомненным плюсом является независимость от аппаратного базиса, в котором будет реализовано устройство [55].
Использование при проектировании таких языков, как VHDL и Verilog, позволяет отказаться от составления схем на большинстве этапов разработки СОК, Технология проектирования с помощью VHDL предполагает описание исходных алгоритмов функционирования аппаратуры и ее интерфейса на языке VHDL и автоматическую трансляцию этого описания до уровня логических схем и далее - до уровня масок микросхем или прошивки программируемых логических интегральных схем (ПЛИС). При этом схемы устройств в графическом виде практически не используются. Отсутствие ошибок в проекте автоматически контролируется средствами верификации. Как основное средство верификации используется моделирование функционирования устройства (или отдельного блока) на VHDL-симуляторе на всех этапах проектирования. Разработка современных вычислительных устройств без использования языков VHDL и Verilog стала практически невозможной [27],
Существует два основных способа создания ядер многократного использования. Первый подразумевает создание ядра на базе уже существующих разработок. Второй подразумевает создание совершенно новых ядер. Основной проблемой, с которой может столкнуться проектировщик, является отсутствие методик проектирования сложных вычислительных устройств или их блоков (отдельных составляющих) для
повторного использования. Существующие методики, как правило, разрабатываются и используются коммерческими фирмами и носят закрытый характер. Кроме того, такие методики ориентированы на конкретные аппаратные и программные средства и в большинстве случаев требуют полной модернизации при переносе на другие платформы.
Определим понятие «сложное ядро». Сложные ядра - это подкласс ядер, который относят к классу сложных технических систем, то есть это объекты* характеризующиеся следующими свойствами: целенаправленность, целостность, и членимость, иерархичность, многоаспектность и развитие. Сложные ядра требуют больших аппаратных затрат и больших затрат на проектирование. Их можно разделить на функциональные блоки. Блоками могут быть блоки памяти, блоки, выполняющие арифметические операции, блоки управления и другие блоки, выполняющие логические функции, то есть это блоки различного характера. Проектирование каждого из этих блоков требует особых методик. Например, если ядром выполняются различные арифметические операции и при этом необходимо хранить определенный объем информации во внутренней памяти, то в ядре выделяются отдельные блоки для выполнения арифметических операций и блоки памяти - это ядро является сложным.
Основной проблемой, с которой сталкивается проектировщик, при проектировании сложных ядер является отсутствие методик проектирования сложных вычислительных устройств или их блоков (отдельных составляющих) для повторного использования. Существующие методики, как правило, разрабатываются и используются коммерческими фирмами и носят закрытый характер. Кроме того, такие методики ориентированы на конкретные аппаратные и программные средства и в большинстве случаев требуют полной модернизации при переносе на другие платформы.
Существуют общие методики проектирования ядер. Методики проектирования сложных ядер являются либо закрытыми (используются разработчиками коммерческих САПР), либо применяются на сильно
ограниченном аппаратном базисе. Поэтому возникает острая необходимость разработки методики проектирования сложных ядер. Эта методика должна объединять методики проектирования ядер различного характера и применяться для различного аппаратного базиса. В данной работе основное внимание уделяется проектированию сложных ядер, применяемых в системах цифровой обработки сигналов.
Целью работы является исследование и развитие методики проектирования сложных цифровых ядер многократного использования в базисе ПЛИС.
Для достижения данной цели в работе ставятся и решаются следующие задачи:
Исследование современного процесса проектирования в САПР ПЛИС и элементного базиса ПЛИС, выявление наиболее перспективных классов устройств.
Исследование существующих методик проектирования ядер многократного использования в базисе ПЛИС, применяемых в современных системах САПР.
Разработка методики проектирования сложных цифровых ядер многократного использования в базисе ПЛИС.
Усовершенствование методики проектирования в рамках подхода основанного на представлении устройства в виде иерархии атшаратпо зависимых и аппаратно независимых примитивов.
Проверка методики на основе проектирования ядра многократного использования, выполняющего функцию быстрого преобразования Фурье и анализ полученных результатов.
Методы исследования. Для решения поставленных задач в работе использовались методы: теории САПР, теории графов, теории множеств, теории цифровой обработки сигналов.
Научная новизна работы. Новые научные результаты, полученные в работе, состоят в следующем:
Предложена методика описания модели сложного ядра многократного использования на языке VHDL.
Предложен маршрут проектирования сложных ядер многократного использования.
Практическая ценность. Разработанные методики и алгоритмы могут быть использованы при разработке программного обеспечения САПР цифровых устройств. Открытость материалов и ориентирование на взаимодействие с САПР ПЛИС позволяют разрабатывать собственные сложные ядра и включать их в состав таких САПР, а так же разрабатывать собственные автоматизированные средства для проектирования и применения ядер пользователя.
Разработанное информационное обеспечение позволяют сократить временные и материальные затраты при проектировании цифровых устройств, особенно при повторном использовании ядер.
Имеется возможность переноса данной методологии на другие технологии изготовления цифровых микросхем - такие как специализированные ИС (ASIC).
Реализация и внедрение результатов работы.
Работа по теме диссертации проводилась на кафедре ВТ ВлГУ, в Центре микроэлектронного проектирования и обучения, в рамках х./д. НИР, а так же в рамках Европейского проекта REASON - Research and Training Action for System On Chip Design (#IST-2000-30193). Полученные результаты исследований в виде методик и программного обеспечения внедрены в виде материалов отчетов в НИР №2609/01, №2704/02, № 2851/03, выполненных в рамках госзаказа, и в учебный процесс кафедры ВТ ВлГУ.
Апробация работы.
Основные положения и результаты работы докладывались и обсуждались на следующих семинарах и конференциях:
Международная научно-техническая конференция «Новые методологии проектирования изделий микроэлектроники» «New design methodologies» (Владимир, 2002, 2003, 2004 г);
Всероссийская научно-техническая конференция «Реконфигурируемые электронные средства в системах обработки информации» (Владимир, 2002 г,)
V международная научно-техническая конференция «Перспективные технологии в средствах передачи информации» (Владимир 2003);
НТК профессорско-преподавательского состава ВлГУ (2001-2005г);
Научно-практические семинары Центра микроэлектронного проектирования и обучения ВлГУ (2001 - 2005 г).
На защиту выносятся:
Методика описания сложного ядра многократного использования на языке VHDL.
Маршрут проектирования сложных ядер многократного использования.
Блок многократного использования, выполняющий функцию быстрого преобразования Фурье большой размерности.
Публикации по работе. По теме диссертации опубликовано 13 печатных работ, из них 3 стати в сборниках научных трудов и 10 тезисов докладов на Международных и Российских научно-технических конференциях.
Структура работы. Диссертация состоит из введения, четырёх глав, заключения, списка литературы. Общий объем диссертации - 125 страниц, в том числе - 116 страниц основного текста, 9 страниц списка литературы (108 наименований). Диссертация содержит 33 рисунка и 6 таблиц.
В первой главе диссертации приведен обзор средств и инициатив,
направленных на реализацию систем на одном кристалле, в том числе и в
базисе ПЛИС. Выделяются технологические возможности создания и
примеры готовых СОК. Приводится классификация СОК, Рассматриваются основные проблемы, возникающие при проектировании систем на одном кристалле и возможные пути их решения. Выделяется важность применения ядер многократного использования как важнейшего элемента при создании СОК, Обосновывается необходимость создания методики проектирования сложных ядер многократного использования.
Во второй главе рассматриваются теоретические вопросы проектирования ядер многократного использования. Предлагается методика проегстирования сложных ядер. Описывается маршрут проектирования сложных ядер многократного использования в базисе ПЛИС. Выделяются общие правила проектирования и правила, учитывающие реализацию на языке VHDL, Выделяются критерии эффективности ядер. Описываются основные особенности проектирования различных блоков сложных ядер.
В третьей главе рассматривается пример разработки ядра многократного использования на базе разработанной методики, выполняющего функцию быстрого преобразования Фурье большой размерности. Описаны основные преимущества и недостатки ПЛИС в качестве реализации ядра.
В четвертой главе приводится анализ разработанной методики и ядра многократного использования, полученного на её основе. Приводится сравнение с существующими коммерческими ядрами.
В заключении приведены основные результаты работы.
Обзор элементной базы систем на одном кристалле
С середины 90-х годов ряд крупнейших компаний вели активную работу по созданию СОК первого поколения. Так, в 1994 г. корпорация Motorola (www.motorola.com) анонсировала систему FlexCore для разработки устройств на базе миіфопроцессора 68000- Год спустя компания LSI Logic создала СОК, содержащую микропроцессор МІР, память и специальную логику управления. В дальнейшем данная СОК использовалась в миллионах игровых приставок Sony Playstation. В 1996 г. корпорация IBM (www.ibtn.com) разработала заказную СБИС (ASIC) СОК, в которой были объединены микропроцессор PowerPC 401, память типа SRAM, высокоскоростной аналоговый интерфейс и специальная логика [20].
Большинство экспертов сходятся во мнении, что основной технологический прорыв в области СОК удалось сделать корпорации IBM, которая на рубеже 1998—1999 гг. смогла реализовать сравнительно недорогой процесс объединения на одном кристалле логической части микропроцессора и оперативной памяти. В новой технологии, в частности, используется так называемая конструкция памяти с врезанными ячейками (trench cell).
Корпорация Toshiba представила однокристальный MPEG-2 кодек MP@ML (Main Profile@Main Level), построенный на основе настраиваемой архитектуры МсР (Media Embedded Processor). МеР - это настраиваемая архитектура встраиваемого RISC-процессора. Конфигурируемое ядро МеР-процессора с расширениями составляет медиа-модуль (Media Module). При необходимости можно объединить несколько МеР-модулей для создания специализированной системы на кристалле.
Можно так же отметить, что современные чипсеты для процессоров представляют собой тоже одну из разновидностей систем па одном кристалле. Они совмещают в себе функции огромного количества различных устройств: контроллер памяти, контроллер шины PCI, контроллер AGP, контроллер USB, ULTRA DMA контроллер периферийных дисков, и может содержать в себе ещё набор из звукового кодека, модема и сетевого контроллера. Компания VIA пошла ещё дальше, создав систему Eden, которая соединяет в себе центральный процессор и чипсет в одном кристалле. Хотя при данном подходе получаются решения с меньшим быстродействием, но они позволяют нацеливать свои изделия на рынок миниатюрных устройств и устройств малого потребления электроэнергии. Такие решения необходимы, например, на рынке ноутбуков и ручных компьютеров Надо заметить, что пока система от VIA у сборщиков готовых решений не пользуется большой популярностью и не вышла на широкий мировой рынок, оставаясь в основном на рынке Китая и Тайваня.
Вообще говоря, в СОК количество типов памяти доминирует над другими компонентами. Например, здесь обычно присутствуют буферы типа FIFO, кэш-память на базе SRAM, динамическая память (DRAM), постоянная память (ROM), флэш-память и т. п. Именно поэтому все фирмы-разработчики очень большое внимание уделяют проблемам встраивания в кристалл памяти.
По мнению специалистов, повышение пропускной способности между устройствами и памятью приведет к шквалу конфликтных обращений. Другой проблемой станет увеличение числа линий ввода-вывода. Так, собственные концепции по этому поводу имеются у некоторых ведущих разработчиков, например у корпораций NEC и Hitachi. В частности, NEC предложила для производителей ASIC гибкую структуру блока динамической памяти, состоящего из восьми блоков по 8 Мбит, Каждый блок в свою очередь состоит из восьми одномегабитных модулей, делящихся на массивы 8x16 из 8-кшюбитных микроячеек. Одна микроячейка может читать и записывать 32-разрядные данные одновременно, разделяя линии ввода-вывода с другой микроячейкой. 64-мегабитная макроячейка допускает 1024-разрядный ввод-вывод. В таком случае при тактовой частоте 100 МГц максимальная пропускная способность достигает 12,8 Гб, а среднее время доступа — 7,7 не, [2],
Достоинства и недостатки ПЛИС в качестве основы реализации систем на одном кристалле
Выделяются 2 типа поставщиков ядер многократного использования: I) внутренние (internal IP providers), использующие собственные наработки; и 2) внешние (external IP providers).
Для внешних поставщиков продажа их интеллектуальной собственности в виде ядер — главное направление бизнеса. В настоящее время большинство внутренних поставщиков - это группы проектировщиков в крупных компаниях, отвечающие за выпуск продукции. В будущем они должны выделятся в отдельные подразделения (IP группы) для более эффективного использования возможностей многократно используемых блоков (ядер).
Существующие средства САПР были изначально предназначены на проектирование, исходя из конкретной технологии изготовления, и направлены на один класс устройств (ASIC, DSP, микроконтроллеры и др.). При проектировании систем на кристалле возникает необходимость объединять данные средства и вести совместную разработку. Это, прежде всего, необходимо для полноценного моделирования на различных этапах проектирования не только отдельных элементов системы, но и всей системы в целом. Кроме того, здесь же встает вопрос о том, что могут использоваться различные методологии проектирования и кардинально отличаться маршруты проектирования таких частей. Возникает потребность согласования различных языков (модели на языках высокого уровня, VHDL описание, программный код для микроконтроллера и т.д.). Необходимо иметь специалиста, отвечающего за координацию всего проекта, имеющего очень высокую квалификацию - системного интегратора.
Часто возникает проблема оптимизации кода под конкретные платформы (например, одной фирмы) и невозможность его интеграции в проект другой платформы (фирмы). Для этого требуется частичная или полная переработка проекта, что сопоставимо по времени и ресурсам с созданием его с нуля.
Для продвижения технологии проектирования на основе многократно используемых ядер в 1996 году был образован интернациональный союз компаний - VSIA, главной целью которого являлось развитие открытых стандартов связи и тестирования функциональных блоков систем.
VSIA определяет, разрабатывает, утверждает, тестирует и поддерживает открытые стандарты применительно к форматам данных, методологиям тестирования, интерфейсам. Союз VSIA разрабатывает спецификации относительно внутреннего проектирования блоков интеллектуальной собственности, функциональной архитектуры компонентов подсистемы, процессов изготовления кристаллов, алгоритмов или технологий средств САПР.
Члены VSIA представляют четыре ключевые группы; компании -разработчики САПР, компании занимающиеся изготовлением микросхем, независимые разработчики ядер и объединяющие их системные компании. Каждый член союза имеет свои собственные интересы и продукты, но они также понимают, что только при поддержке общих стандартов и описаний интеллектуальной собственности они могут полностью использовать возможности проектирования систем на основе ядер (Рисунок 1.9). VSIA был разработан документ предполагаемого множества стандартов называющийся «Virtual Socket Interface» (VSI). Целью данного документа явилось определить или рекомендовать множество аппаратных и программных интерфейсов, форматов и методов проектирования для создания функциональных блоков, которые могли бы быть эффективно и правильно интегрированы, верифицированы и протестированы совместно с другими блоками на одном чипе [38, 81].
На сегодняшний день выделяют три типа многократно используемых блоков (ядер):
Программные (мягкие, soft) - блоки, представленные в форме синтезированного HDL (языка описания аппаратуры). Они являются наиболее гибкими. Однако недостатком таких ядер считается непредсказуемость в терминах рабочих характеристик, таких как временные параметры, занимаемая площадь, потребляемая мощность. Также велик риск, связанный с правами на интеллектуальную собственность, т.к. для интеграции блока в систему требуется RTL (Register Transfer Level - уровень регистровых передач) код.
Виртуальные (устойчивые, firm) - компоненты, структурно и топологически оптимизированные по производительности и занимаемой площади с помощью синтеза топологической структуры и размещения, возможно с использованием определенного класса технологических библиотек. Уровень детализации варьируется от размещения областей RTL подблоков относительно проложенных трасс, до параметрического синтеза для получения полностью размещенного списка соединений (Netlist). Виртуальные ядра являются компромиссом между программными и аппаратными. Они более гибки и удобны чем аппаратные, более предсказуемы по производительности и занимаемой площади, чем программные. Виртуальные компоненты включают комбинацию синтезированного RTL описания, опираются на технологические библиотеки, детализируют топологическую структуру и имеют полный или частичный список межсоединений (Netlist). Когда представлено полное описание (Netlist) предполагается, что тестовая логика уже присутствует, и что список
Правила создания ядер, используя язык описания аппаратуры VHDL
Язык описания аппаратуры VHDL, как и любой другой язык имеет ряд особенностей. В первую очередь это относится к интерпретации данного языка на стадии синтеза. Поэтому необходимо придерживаться ряда правил и рекомендаций, обеспечивающих правильное функционирование разрабатываемого ядра, а так же важным является «читаемость» кода, что важно при модернизации ядра. Приведем далее ряд правил, которых желательно придерживаться для получения универсального легко интегрируемого в проект заказчика ядра. Эти правила были систематизированы относительно проектирования сложных ядер. Данные правила не являются обязательным для применения, но их нарушение может осложнить во многих случаях интеграцию в конечном проекте. Могут измениться характеристики в реализации. Кроме того, правила учитывают возможность модернизации ядер. В данных правилах учитываются как особенности самого языка VHDL, так и возможности современных систем автоматизированного синтеза для ПЛИС. Эти правила относятся к стадии разработки моделей блоков на уровне регистровых передач.
1. Необходимо использовать тип std_logic для внешних портов. Нельзя назначать сигналам неизвестное значение У. В некоторых случаях могут создаваться некорректные результаты при моделировании и синтезе. Использовать значений по умолчанию или инициализаций для сигналов и переменных можно, хотя и не желательно, только для моделирования, но не синтеза (variable В: INTEGER:=0;). Такое назначение может привести к расхождениям при моделировании и реализации. Необходимо использовать сигнал сброса для задания всех сигналов и переменных.
2. Нельзя использовать порты с буфером для чтения выходных значений. Взамен этого нужно добавлять другие переменные или сигналы с тем же выходным значением. Это связано с тем, что порты буферного типа не могут быть соединены с портами другого типа и поэтому данный тип buffer распространяется на порты всего проекта.
3. Рекомендуется использовать определение компонент и констант для каждого ядра в одиночном модуле. Нужно пытаться писать один VHDL элемент проекта в одном файле. Имя файла должно быть такое же, как имя элемента. Рекомендуется пытаться использовать реализацию (instantiation) по имени (соответствующему), а не по размещению. Это упрощает отладку и читаемость кода. Рекомендуется использовать конфигурацию для определения заглавий (entities), архитектур (architectures) и компонент (components), например, для определения такого ярко выраженного представления. Это позволяет проводить трассировку различных архитектур на основе одного файла. Кроме того, это можно использовать при переходе с верхнего уровня проектирования на более низкий.
4. Желательно не смешивать в проекте различные стандарты VHDL (например, не смешивать конструкции VHDL 87 и VHDL 93).
5. Желательно компилировать каждый блок в отдельную библиотеку. Рекомендуется пользоваться константами и настраиваемыми параметрами (generics) для размера буферов, ширины шин и всех других параметров компонента. Это улучшает читаемость кода и позволяет применять его многократное использование.
6. Кодирование для синтеза. Строго рекомендуется читать из переменных, затем писать в них (чтение перед записью) если нет полной уверенности в своих действиях. Если переменные сначала записываются, а затем считываются, то это приводит к созданию длинной комбинации логики и триггеров-защёлок (или регистров-защёлок). Это следует из того, что переменные получают своё значение сразу же, а не так как сигналы. Далее приведен пример неправильной конструкции, которой необходимо избегать. PROCESS (CLK, RST_n) Variable out__var : std_log±c; BEGIN — PROCESS IF RST_n - 0 THEN out_var = 0 ; outsign2 = 0 ; ELS IF CLK event AND CLK = 4 THEN 0utsign2 = out__var; — чтение out_var = input 1 and input2; -- запись END IF; END PROCESS;
Кроме того, необходимо включать все сигналы, которые считываются внутри комбинированного процесса в его список чувствительности. Это делается для предотвращения появления нежелательных триггеров-защёлок.
7. Рекомендуется избегать использования длинных выражений ifhen else, а взамен использовать оператор case. Это предотвращает появление декодеров высокого приоритета и делает код более легко читаемым.
8. НеЛЬЗЯ ИСПОЛЬЗОВаТЬ Такие ВЫраЖеНИЯ Как [Ь = a after Х ns) или wait for х пзЛ Такие выражения используются только для моделирования.
9, Рекомендуется использовать сигнал clock enable (СЕ), как это показано ниже, с одним синхросигналом на процесс и не использовать два различных процесса, один для синхронизации, а другой для комбинаторной логики, Это связано с тем, что некоторые системы синтеза сами находят сигнал СЕ и назначают его. В противном случае ножка СЕ не будет задействована, что приведет к появлению дополнительной логики. Это стандартная ситуация для проектирования FPGA,
Выбор ПЛИС для реализации ядра БПФ
Входной буфер постоянно принимает данные с АЦП или другого источника на частоте синхросигнала и записывает их последовательно либо в инверсионном порядке. Выдача данных осуществляется после полной занятости буфера, то есть после поступления всех 8192 входных данных. Выдача данных происходит параллельно по общей шине, поступающей на вход основного буфера обрабатываемых данных. Такой блок можно разделить на стандартные блоки двухпортовой памяти (для кристаллов серии Virtexll можно использовать компонент RAMB16 S18S18). Каждый блок хранит 1024 значения по 18 бит каждое. Для хранения всех данных всего нужно 8 блоков. Соответственно при передаче данных можно задействовать вывод сразу 16 значений за такт (по два значения с блока), что требует 512 тактов на полную передачу в блок буфера обрабатываемых данных.
Выходной буфер выполнен аналогично с той лишь разницей, что сначала параллельно по шине считываются данные за 512 тактов, а потом происходит их последовательная выдача. Можно предусмотреть несколько вариантов выдачи данных. На выход могут поступать либо комплексные данные после последней стадии выполнения операции "бабочка", либо сразу вычисляться модуль комплексного значения для чего можно использовать вычислительные ресурсы «бабочки». В таком случае выходной буфер будет иметь размерность аналогичную выходному буферу.
Табличный блок значении синусов-косинусов используется для хранения коэффициентов W и может быть реализован аналогично на основе блочной памяти, но с инициализацией конкретных значений- Данная таблица используется только для считывания данных. Учитывая ограниченный набор возможных вариантов реализации ядра, табличные значения имеет смысл сгенерировать заранее программно в модели, а при реализации подставлять в виде константных таблиц.
Буфер обрабатываемых данных должен быть вдвое большего объема, нежели входной буфер, так как он должен хранить комплексные значения данных. Его задачей является выдача данных для обработки и запись данных обратно на свободные ячейки. Для одновременного выполнения данных операций можно предложить 2 варианта. При первом увеличивается в два раза используемая память, фактически используя 2 одинаковых буфера (на каждом цикле БПФ из одного буфера будут считываться данные, во второй записываться). При втором варианте можно использовать только один буфер. По одному адресу будет происходить и считывание и запись. В таком случае очень значительно увеличивается сложность формирователя адреса, поскольку требуется учесть не только все задержки распространения сигнала и требуется вводить дополнительную синхронизацию после каждого цикла БПФ, но и помнить на каждом цикле, куда были записаны предыдущие данные. Для этого можно ввести промежуточную таблицу соответствия реального адреса и адреса нахождения в буфере. Такая организация позволит сэкономить ячейки памяти. Это возможно реализовать при проектировании в конкретном кристалле, при заданных условиях, но такая организации может привести к проблемам реализации, когда речь идет о ядре многократного использования. Поэтому в данной работе был выбран первый вариант.
Рисунок 3.7 Блок буфера обрабатываемых данных Блок буфера обрабатываемых данных должен содержать в своем составе формирователь адреса (AddressCalculator) и перемежитель дайны (Switch), подчиняющиеся описанным выше алгоритмам. Данные элементы требуется выделить в отдельные блоки, так как их функционирование может различаться для разных вариантов реализации БПФ, Формирователь адреса должен подготавливать адреса для пары обрабатываемых данных из каждого блока памяти. Достаточно формировать только 2 адреса и направлять их на весь буфер во все блоки памяти. Необходимо также использовать блок задержки адреса, для подачи в блоки, записывающие обработанные на данном цикле данные.