Все статьи цикла
Когда-то, в очень старые времена, в газетах журналисты применяли такую расхожую фразу — «письмо позвало в дорогу». Вот отрывки из письма Дмитрия, студента одного из российских университетов: «А книжку, которую Вы порекомендовали, в нашей библиотеке не нашел…», «…так как вижу, что спрос на литературу по ПЛИС (по крайней мере, здесь) очень велик… Спрос намного превышает предложение. Я считаю, что нужна книга с реализацией проекта от нуля до чего-то стоящего, и желательно для начинающих. В общем-то, Вы ближе всего подошли к решению данного вопроса».
Но для того чтобы автор смог решиться на такой шаг, как написание, пусть и небольшого, но все же учебного курса, понадобилось несколько лет общения с молодыми коллегами, студентами и преподавателями из различных университетов. Конечно, этот курс не заменит настоящего, полного изучения предмета, но все же автор надеется, что «Краткий курс HDL» (далее — КК) окажется полезным, в первую очередь тем, кто изучал цифровую схемотехнику по «безумно облегченным» университетским программам. Безусловно, есть хорошие книги и на русском языке, но, во-первых, большинство из них «про VHDL», а во-вторых, прочтите еще раз первую фразу из письма Дмитрия: эти книги почти недоступны студентам.
И еще надо добавить следующее. В отличие от многих изданий, выпущенных университетскими преподавателями, автор не ставил себе целью получить «учебник для изучения по программе ПЛИС за 4-й курс». Возможно, этот КК кому-то покажется сложным или избыточным. Может быть, кто-то из читателей захочет высказать свои замечания, предложения или прислать свои примеры. Пожалуйста, напишите об этом. Все ваши предложения будут учтены и размещены на сайте автора.
Автор не берется судить обо всех предметах, изучаемых сегодня в вузах по различным направлениям «электронных специальностей». Но общение со студентами и преподавателями ведущих петербургских вузов и письма читателей, обучающихся в различных университетах страны, наводят на довольно грустные размышления. Подведем итог: студентов многих, даже приборостроительных специальностей, вообще не учат технологии проектирования с применением FPGA, либо учат только «картинкам» (схемное описание проекта), либо дают только некоторые и очень краткие теоретические сведения по отладке проектов, но без практики на реальных аппаратных платформах.
Автор надеется, что читатели все же имеют некоторый опыт работы с электронными приборами. По крайней мере умеют читать схемы и понимают то, как работают простейшие узлы цифровых схем: триггеры, счетчики, мультиплексоры и т. д. Поэтому данный КК строится так, чтобы облегчить переход от схемных описаний устройств к описаниям на HDL. Но для того чтобы объяснить некоторые базовые принципы, сделано довольно подробное введение в КК.
Обычно все авторы стараются сделать свои учебники всеобъемлющими. Они стараются как можно более полно изложить материал, предназначенный для изучения. Масса примеров и тонкостей, много сокращений и специальных терминов — это обычное дело для таких книг. Однако для реальной жизни нужно совсем другое. Когда-то, очень давно, в 1977 году, автору посчастливилось купить переводную книгу издательства «Мир». Она называлась «Справочник по нелинейным схемам». Стиль изложения материала в этой книге был выбран очень необычный и не походил на все то, что издавалось у нас в стране. Книга была разделена на три части. Первая часть, объем которой не превышал 15%, содержала небольшое введение и «готовые к употреблению» схемы логарифматоров и перемножителей. Нужен синусно-косинусный генератор — вот схема, перечень компонентов, небольшое описание к ней. Вторая часть книги, примерно 35% от ее объема, представляла подробные примеры расчета и синтеза тех же самых логарифматоров и перемножителей. Но в этом разделе книги можно было посмотреть и быстро пересчитать основные характеристики схемы.
Почему потребовалось столь подробное описание структуры книги?
Да потому, что и «Краткий курс HDL» тоже хочется построить таким же образом. Если стоит задача сделать простой проект и довольно быстро, то 500–600 страниц англоязычного текста оказываются довольно серьезной преградой. Мало того, множество подробностей и тонкостей, возникающих при изучении языка, требуют много времени и сил. Именно поэтому автор стремился преследовать только одну цель: упростить разработку проектов с применением HDL-кодирования. Облегчить переход от проектирования в «картинках» к проектированию на языках HDL. Изучение такого «Краткого курса HDL» будет первым шагом на пути освоения методики проектирования на языках HDL. Тот, кто посчитает для себя необходимым сделать дальнейшие шаги по изучению HDL-кодирования, всегда сможет найти для себя «толстый» учебник и развить свои способности. Еще раз хочется подчеркнуть, что изучение языка — это не самоцель, это только средство для успешного выполнения проектов. И в данном контексте хочется привести лишь один пример. При создании тест-бенча можно делать поведенческое описание тестирования, а можно сделать подробное описание на уровне триггеров и вентилей, такое же, как описание самого тестируемого объекта. Безусловно, поведенческое описание гораздо легче создать. Но это надо уметь делать! И если стоит задача выполнить это быстро, а на изучение того, как это должно быть сделано, у вас нет времени, то структурное описание окажется создать легче, хотя и кода там будет больше, да и выглядит оно не так «красиво»…
И, наконец, еще одно замечание.
Первоначально «Краткий курс HDL» планировался только как очень краткое описание синтезируемых конструкций. Но в процессе работы над материалом автор пришел к твердому убеждению, что сегодня этого мало даже для краткого курса. Сейчас необходимо не только уметь быстро сформировать файл для микросхемы FPGA, содержащий пару счетчиков и дешифраторов. Разработчику необходимо уметь симулировать проект не на уровне отдельной микросхемы, а на уровне всей платы, содержащей FPGA, память и микроконтроллеры. А это подразумевает, что необходимо иметь очень четкое представление о том, как должна работать модель, как задать задержки и какие именно задержки в ней необходимы. Поэтому, сохранив первоначальное название, автор значительно расширил описание языковых конструкций и добавил большее количество примеров. Что же касается дополнительных разделов, то это, можно сказать, отдельные главы, и они более подробно описывают наиболее часто встречающиеся при проектировании проблемы.
Итак, вот что будет предложено читателям.
Герой известного кинофильма объяснял стратегию при помощи картошки. Ну, а мы, чтобы не отстать от классического шедевра, попробуем начать с яблок. Яблоки, какие они? Круглые, сочные, красные, «на снегу», «эх, яблочко» и так далее. Все это характеристики объекта, причем, ни одна из этих характеристик не описывает предмет целиком, а дает только свою часть описания. Точно таким же образом инженеры описывают разрабатываемое изделие. И на каждое изделие существует определенное стандартом количество документов, которые все вместе полностью описывают конкретное изделие. И называются они комплект конструкторской документации (КД). Каждый из входящих в него документов описывает какую-то одну сторону изделия. И при разработке узла какого-либо устройства нас в первую очередь будет интересовать то, какую функцию он выполняет, из чего состоит, как связан с другими узлами разрабатываемого изделия и по какому алгоритму работает.
И еще немного философии. При описании объектов люди пользуются различными абстракциями. Чаще всего в качестве абстрактного образа используется уличный светофор. Наверное, нет необходимости объяснять, почему… Точно так же и в схемотехнике. Кружочек, три черточки, одна поперечная линия и одна стрелка — это не описание транзистора, а только его условное обозначение на схеме. Но оно связано с описанием работы транзистора, возможно, оно связано и с его конструкцией. Таким образом, рассматривая условное графическое обозначение, можно представить то, как именно этот компонент будет работать. Более того, обычно мы рассматриваем компонент в схеме, то есть во взаимосвязи с другими компонентами. И опытный специалист, глядя на схему, в подавляющем большинстве случаев сразу скажет вам, как работает тот или иной ее узел.
Теперь давайте вспомним, что бывают такие схемы, которые не помещаются на одном листе. Или, например, какой-то фрагмент схемы повторяется многократно. Что делается в этом случае? Фрагмент выделяется в отдельный чертеж. При этом весь проект становится иерархическим. То есть на самом верхнем уровне чертеж состоит из прямоугольников, которые представляют собой части схемы, выделенные в отдельные чертежи. Те, кто программировал на языке высокого уровня, тут же вспомнят вызов функций. Действительно, принцип тот же самый. На более высоком уровне описания объекта присутствуют только «главные» характеристики объекта, а все то, что не соответствует этому уровню, находится в низших уровнях описания. То есть в описании функций или в тех самых отдельных чертежах, о которых шла речь ранее. Для примера можно представить себе механизм от заводной детской игрушки (наверное, каждый читатель имел в детстве опыт по «изучению внутренностей» заводных игрушек…). Что есть у такого механизма? Есть место, куда вставляется ключ, для того чтобы эту игрушку заводить, а из механизма выходит ось, которая вращает колеса игрушки. Все остальное сейчас для нас не так интересно: оно скрыто в корпусе механизма. Так что же с точки зрения схемотехники представляют эти два «внешних» для игрушечного механизма момента? Это две «точки подключения» механизма к остальному устройству. Точно так же и в схемотехнике: при создании иерархического проекта нас будет интересовать только то, как функционируют «квадратики», то есть то, что выделено в отдельные блоки, и как они подключаются ко всем остальным цепям верхнего проекта.
Теперь надо рассмотреть еще один момент. Если мы выделяем из схемы только один фрагмент и представляем его в виде «квадратика» на верхнем уровне, то тут все понятно. Что же происходит, когда надо компактно изобразить на чертеже верхнего уровня несколько одинаковых фрагментов? Решение здесь точно такое же. Выделяется унифицированный фрагмент схемы и из него делается чертеж нижнего уровня. А на верхнем уровне помещается столько «квадратиков», сколько нам нужно этих унифицированных узлов. Но как же мы узнаем, где и какой фрагмент находится и куда он подключается? По именам, которые мы даем при установке компонента в схему. Чтобы представить себе эту ситуацию более наглядно, вспомним, что комплект КД — это тоже только описание изделия. А вот серийные изделия на конвейере — это как раз полный аналог нашего случая. Так чем же отличаются новенькие автомобили, сходящие с конвейера? Они отличаются только своим «именем» — серийным номером.
Или другой пример: берем Си++, смотрим описание какого-нибудь класса. А также на то, как производится работа с экземпляром данного класса. Вот теперь мы подошли к объяснению терминов “instance” и “instantiate”. Фрагмент схемы, выделенный в описание нижнего уровня, будем называть “instance” — компонент. Размещение на схеме верхнего уровня такого фрагмента в виде блока будем называть установкой компонента — “instantiate”.
Итак, мы выяснили, что обсудим только часть описания изделия. Мы не будем обсуждать физическую сущность, конструкцию и прочее, все то, что не относится к схемотехнике. Мало того, «за кадром» останутся вопросы, связанные с алгоритмом функционирования. Они должны быть описаны в отдельном документе. Здесь же мы будем рассматривать только вопросы схемотехники. И так же, как при рассмотрении классических схем, можно сказать о том, как работает тот или иной узел, точно так же это суждение можно составить из HDL-описания блока. Но еще раз хочется напомнить, что классическое описание алгоритма работы устройства всегда должно быть сделано.
В чем же разница и в чем сходство таких языков? Мы уже выяснили, что любой предмет можно и нужно описывать следующим образом:
Будем считать, что читатель уже имел дело, пусть хотя бы и поверхностно, с одним из таких языков. (Ну, а если вы еще не работали с языками программирования, то вспомните ваши действия по управлению телевизором или СВЧ-печкой…). Язык программирования задает последовательность действий в фиксированной среде. Представим, что мы программируем микроконтроллер. Сам микроконтроллер от наших действий не меняется. Меняется только порядок обработки данных, поступающих в микроконтроллер и выдаваемых из него. При этом программист знает, что структура микроконтроллера и описание его команд приводятся в его комплекте документации. Микроконтроллер под управлением потока команд обрабатывает данные последовательно. Да, конечно, существуют процессоры, которые за один такт «умеют» выполнять несколько команд, есть каналы DMA, которые пересылают данные на периферийные узлы микроконтроллера для дальнейшей автономной обработки, но все же, в целом, обработка данных идет последовательно. Представим, что мы хотим произвести инкремент 100 переменных. Тогда в тексте программы это будет выглядеть так:
Х0++; Х1++; …. Х99++;
Можно сказать так: если представить, что каждая команда выполняется за один такт, то такой фрагмент программы будет выполнен микроконтроллером за 100 тактов.
Язык описания аппаратуры, в противоположность языку программирования, описывает связи в устройстве. А функционирование устройства будет происходить в соответствии с теми внешними воздействиями, которые будут к нему приложены. То есть разработчик аппаратуры, в соответствии с заданием для разработки, выбирает состав устройства и описывает этот состав и все связи устройства, пользуясь тем, что алгоритм его работы описан в комплекте документации или, если говорить более точно, в техническом задании, входящем в этот комплект. Поскольку составные части устройства могут работать независимо друг от друга, то для примера с инкрементированием 100 переменных на аппаратном уровне нужен будет всего лишь 1 такт. Конечно, скажет читатель, это же аппаратные «штучки», так можно сделать все, что разработчику угодно… Действительно, это так, но речь сейчас о другом. Дело в том, что в тексте описания аппаратуры, так же как и в тексте описания программы, будут присутствовать 100 строк примерно такого вида:
Хn = Хn +1;
Таким образом, внешне все очень похоже. Но только внешне. А по сути это будут 100 одновременных процессов. Необходимо еще раз подчеркнуть, что все процессы, изложенные на языке описания аппаратуры, идут одновременно. Конечно, языки описания аппаратуры кроме возможностей, предоставляемых структурным описанием, имеют набор возможностей и для поведенческого описания. Да, можно описать то, как должно работать устройство. Но здесь необходимо отметить, что поведенческое описание не всегда можно превратить в загружаемый в микросхему FPGA файл. Только самые элементарные поведенческие описания компилируются в синтезируемые конструкции. И из этого описания компилятор синтезирует опять только связи внутри устройства. А алгоритм работы на все устройство, как в целом, так и в этом случае, будет зависеть от связей и от входных воздействий на данное устройство.
Текст программы на языке программирования пишется для того, чтобы он исполнялся на процессоре. Конечно, программа может быть написана на языке высокого уровня, который сам по себе не зависит от аппаратной платформы. Но компилятор с языка высокого уровня переводит весь текст программы в исполняемый код для определенного целевого процессора, на котором он и выполняется. И в текст программы могут быть добавлены фрагменты, которые позволяют на этапе ее отладки совершать какие-либо дополнительные действия. Можно применить условную компиляцию и вставить дополнительно фрагменты программы, позволяющие гибко перестраивать текст под нужды программиста. Текст описания аппаратуры на HDL-языке пишется и для того, чтобы провести симуляцию работы устройства, и для того, чтобы получить «прошивку», то есть загружаемый в FPGA файл. Поэтому в этих языках есть часть языковых конструкций, которые применяются только для симуляции и не могут быть синтезированы в аппаратные узлы. Разработчик обязан следить за тем, чтобы при описании того узла, который должен быть загружен в FPGA, применялись только синтезируемые конструкции языка или библиотечные компоненты, поставляемые производителем FPGA.
Общее — это то, что проекты и в том, и в другом языке строятся иерархически. Часть кода выделяется в классы, и экземпляры классов инстанциируются в проект. Используются библиотеки.
Далее необходимо отметить тенденцию по объединению этих языков. Дело в том, что сейчас появились версии языков программирования SystemC, System Verilog, позволяющие выполнять проекты на языке Си, с последующей автоматической компиляцией этих проектов на языки HDL.
Когда автора на одной из встреч в университете спросили студенты: «Что же нам надо изучать: VHDL или Verilog?», то ответ был такой: «А вы готовы пренебречь половиной рабочих мест только потому, что вы не захотели выучить оба эти языка?»
Нет нужды объяснять, что, как минимум, надо понимать оба этих языка. А на каком языке специализироваться? Есть такое негласное правило: фирма должна делать разработки на том языке программирования, на котором пишет ее лучший программист. Но, поскольку в нашей стране большинство книг написано университетскими преподавателями, а не разработчиками аппаратуры, то есть явный перекос в сторону VHDL. В то время как довольно большая часть инженеров с успехом пользуется языком Verilog. Поэтому автор уделит значительно больше внимания именно этому языку программирования. Практически, это и будет учебник по языку Verilog, а небольшие вкрапления примеров на VHDL помогут сравнить эти два языка и при необходимости быстрее перейти с одного языка на другой.
Схемное описание проекта, или «картинки» — это наиболее простое и доступное решение для небольших проектов. Оно, несомненно, наглядно и просто. И на этом все преимущества схемного описания проекта заканчиваются. Можно лишь добавить, что при использовании библиотек компонентов, поставляемых фирмой-изготовителем, удается применять параметризированные компоненты. Недостатки также очевидны. При увеличении сложности и объема проекта объем файлов тоже растет, и отладка такого проекта становится сложной. Более подробно об этом можно будет прочитать в тех разделах КК, где будут описаны методики отладки пользовательских проектов.
В любом языке, как в обычном разговорном, так и в техническом, есть свои устоявшиеся нормы и критерии. Есть свои слова для определения объектов и событий, а есть слова заимствованные. Когда заимствованные слова теряют свою новизну, то они воспринимаются уже как свои, «родные». Более сотни лет тому назад в литературных кругах шли дискуссии о «мокроступах» — так предлагали называть калоши некоторые отечественные литераторы, но в обиход вошло «импортное» слово. А когда СССР был ведущей научной державой, то все народы ввели в свои словари и начали применять слово «спутник». То же самое происходит и в других областях знаний. Те термины, которые первыми входят в оборот, получают наиболее широкое употребление. К сожалению, в той области знаний, к которой относится данная книга, наша страна сегодня не является лидером. Поэтому здесь нам приходится пользоваться терминологией, базирующейся на принятых во всем мире англоязычных терминах. Естественно, часть из этих терминов имеет понятный и привычный перевод. Но некоторые из них могут показаться читателю непривычными. Однако поскольку подавляющее большинство литературы в этой области написано на английском языке, то читателю, рано или поздно, придется к такой литературе обратиться. Поэтому автор не считает нужным вводить какие-либо «более литературные термины», для того чтобы читатель мог подготовить себя к чтению англоязычной литературы.
Теперь несколько слов о том, «как это работает». Если вы увидите такое выражение:
2+2 = 4;
то это, конечно, равенство. И тут все должно быть понятно.
Выражение Y = X в математике называют уравнением. А вот в языках HDL смысл такого выражения будет зависеть от того места, где оно приведено. Если выражение используется как математическое, то тут все понятно. А вот в том случае, когда такое выражение применяется для описания передачи сигналов от одних компонентов схемы к другим, его смысл меняется. При описании схемы используются термины операция и операнд. Операнды различаются на те, которые находятся справа и слева от знака операции.
Теперь необходимо познакомиться с теми терминами, которыми пользователь оперирует при описании проекта на языке Verilog.
Термин «назначение на цепь»: assign — назначить; assignment — назначение.
В терминах HDL приведенный пример можно трактовать так. Есть цепи Y — это приемник данных и X — это источник данных. И этим выражением цепи Y назначаются те данные, которые ей передает цепь X. При моделировании под выражениями Y и X понимаются и переменные.
Утверждение. Еще раз обратимся к нашему примеру. Вот такие выражения:
Y = X или Y <= X.
Это не формула, не уравнение. Это нечто совсем другое. В англоязычной литературе для такого выражения применяется термин statement (утверждение).
Драйвер сигнала. Это тот компонент схемы, который управляет сигналом в какой-либо конкретной цепи. Одна цепь может иметь несколько драйверов.
Instance — установленный в проекте пользователя компонент, представляющий собой экземпляр того, что сделано в описании модуля. Аналогичен применяемому в С++ экземпляру класса.
Положительный фронт — переход сигнала из состояния низкого уровня в состояние высокого уровня.
Отрицательный фронт — переход сигнала из состояния высокого уровня в состояние низкого уровня.
Примечание. В данном описании оставлены некоторые термины на английском языке, для того чтобы читатель смог в дальнейшем легко узнать их в англоязычной литературе.
Все приведенные в книге примеры являются учебными и могут использоваться в том виде, в каком приведены. Автор не несет ответственности за применение этих примеров читателями в своих разработках.
Продолжение следует
  Работа в среде Quartus II помимо очевидных плюсов, заложенных
инженерами Altera, таит некоторые нюансы, связанные с тонкостями
настройки приложений программы и организации ведения проектов Quartus II.
Неочевидным минусом является то, что программа и документация к ней
написаны на родном языке её авторов, а значит на неродном
для большинства русскоговорящего контингента инженеров.
Нарастающая сложность проектов требует внимания к деталям,
а значит научиться думать на двух языках одновременно.
Избежать возможной неопределённости можно с помощью
документов раздела «Quartus II по-русски».
Приятного чтения!
Это мой перевод 2 главы 1 раздела 1 тома Quartus II Handbook.
Volume 1: Design and Synthesis.
2.Quartus II Incremental Compilation for Hierarchical and Team-Based Design
Без средства «инкрементная компиляция» сложно представить современный проект на ПЛИС. Инкрементная компиляция позволяет зафиксировать уже разработанные части проекта, чтобы они не загружали компилятор, пока будут разрабатываться другие модули; позволяет обмениваться готовыми модулями между разработчиками; планировать размещение будущего проекта в чипе, резервируя место под модули. Облегчает достижение проектом временных ограничений. В общем, значительно экономит ваше время. |
Титульный
Введение  2-1 Решим, стоит ли использовать процесс инкрементной компиляции   2-1   Линейный процесс компиляции без создания разделов   2-2     Интеллектуальная компиляция Quartus II   2-3   Процесс инкрементной компиляции с разделами проекта   2-3   Нисходящая версия процесса восходящей компиляции   2-6 Руководству по быстрому старту – общий подход к процессу инкрементной компиляции   2-7   Подготовка проекта к нисходящей инкрементной компиляции   2-8   Компиляция проекта с использованием инкрементной компиляции   2-9 Решим, какие блоки проекта будут его разделами   2-9   Влияние разделов проекта на оптимизацию проекта   2-10   Отчёты статистики разделов   2-11   Временные отчёты разделов   2-13   Советник по инкрементной компиляции   2-13   Использование разделов с помощью инструментов синтеза сторонних разработчиков   2-15     Synplicity Synplify Pro/Premier и Mentor Graphics Precision RTL Plus   2-15     Другие инструментарии синтеза   2-15   Сравнение Назначений разделов проекта и Назначений физического размещения   2-15 Создание назначений разделов проекта   2-16   Создание разделов проекта с помощью Планировщика разделов проекта   2-16   Создание разделов проекта в Окне разделов проекта   2-18   Создание разделов проекта в Навигаторе проекта   2-18   Создание разделов проекта с помощью Tcl скриптов   2-19   Имя раздела   2-19 Установка типа списка соединений для раздела проекта  2-19   Уровень сохранения компоновки   2-21   Пустые разделы   2-22   Где хранятся базы данных списков соединений?   2-23   Какие изменения перезапускают автоматический синтез раздела?   2-23     Определим, когда в разделах перезапускается синтез при изменении исходного кода   2-24     Форсированное использование списка соединений пост-компоновка после внесения изменений в раздел   2-25 Создание архитектуры проекта с назначениями локализации LogicLock   2-25   Привлекательные преимущества Начальной Временной Оценки   2-28   Какие изменения в LogicLock перезапускают компоновку?   2-28 Экспорт и импорт разделов   2-29   Файлы экспорта разделов Quartus II (. qxp)   2-30   Общие сведения об инкрементной компиляции в восходящем проектировании   2-30     Подготовка проекта для инкрементной компиляции в восходящем проектировании   2-31     Создание и компиляция проектов нижнего уровня   2-31     Экспорт низкоуровневых проектов   2-32     Включение или импорт низкоуровневых проектов в головной проект   2-32     Выполнение инкрементной компиляции в головном проекте   2-32   Типы списков соединений для импортированных разделов   2-33   Экспорт низкоуровневого раздела для использования его в головном проекте   2-34   Экспорт низкоуровневого блока внутри проекта   2-35   Использование .qxp файла в качестве исходного файла в головном проекте   2-36   Импорт низкоуровневого раздела в головной проект   2-36   Импорт назначений и расширенные настройки импорта   2-38     Свойства разделов проекта после импортирования   2-38     Импортирование назначений раздела из подпроекта   2-38     Файлы Ограничений Проекта Synopsys для временного анализатора Quartus II TimeQuest   2-38     Импортирование назначений LogicLock   2-38     Импорт других назначений для блоков   2-39     Импорт глобальных назначений   2-39     Расширенные настройки импорта   2-39       Позволить создавать новые назначения   2-39       Снабдить назначениями все модули в импортированном блоке   2-39       Назначение разрешения конфликтов: регионы LogicLock   2-39       Назначение разрешение конфликтов: прочие назначения   2-40   Генерация скриптов раздела восходящего проектирования для менеджера проекта  2-40     Создание проекта   2-41     Исключенные разделы   2-41     Назначения из головного проекта   2-41     Назначения виртуальных выводов   2-42       Временные и локальные назначения для виртуальных выводов   2-42       Назначения регионов LogicLock   2-43       Назначения продвижения глобальных сигналов   2-43       Генерация сборочного файла   2-44   Импорт SDC ограничений из низкоуровневого проекта   2-45     Создание . sdc файла с общими ограничениями для проекта   2-46       Пример первого шага: Руководитель проекта создает файл .sdc с общими ограничениями проекта для проекта нижнего уровня   2-47     Создание .sdc файла со специальными ограничениями для проекта   2-47       Пример второго шага: Разработчик проекта нижнего уровня создает файл .sdc со специальными ограничениями раздела     Объединение SDC файлов в головном проекте   2-48       Пример третьего шага: Руководитель проекта выполняет окончательный временной анализ и заканчивает работу   2-48 Рекомендованные процессы проектирования и примеры компиляции  2-49   Уменьшение времени компиляции при изменении исходного файла для одного раздела   2-49   Оптимизация размещения для критичных ко времени разделов для достижения временного завершения   2-50   Сохранение результатов для выбранных разделов перед добавлением других разделов   2-51   Инкрементная отладка с помощью Логического Анализатора SignalTap II   2-52   Выполнение командного проекта в восходящем проектировании   2-53     Разрешение конфликтов назначений во время импорта   2-55     Импортирование раздела для многократного использования   2-55   Выполнение итерации проекта в восходящем проектировании   2-56   Создание макроса на аппаратном уровне (или предкомпилированных блоков проекта) для повторного использования IP   2-57   Использование экспортированного раздела для передачи проекта без включения исходных файлов   2-59 Ограничения в инкрементной компиляции  2-60   Сохранение точных временных характеристик   2-61   Когда размещение и разводка не могут быть в точности сохранены   2-61   Использование инкрементной компиляции с архивными файлами Quartus II   2-61   Поддержка формальной верификации   2-61   Импорт зашифрованного IP ядра в восходящем проектировании   2-61   Выводы SignalProbe и менеджер инженерных изменений в Планировщике Чипа   2-62     Разделы, связанные с выводами SignalProbe или изменениями ЕСО   2-62     Экспортируемые разделы   2-63   Встроенный логический анализатор SigalTap II в процессе восходящей компиляции   2-64   Интерфейс логического анализатора в процессе восходящей компиляции   2-64   Миграция проекта с разделами в различные чипы   2-64   Компиляция HardCopy и процесс миграции   2-65     Чипы HardCopy APEX и HardCopy Stratix   2-65     Процесс миграции HardCopy ASIC   2-65     Автономные компиляции HardCopy ASIC   2-65   Назначения, сделанные в исходном коде HDL в восходящем проектировании   2-65   Ограничения в разделах мегафункций   2-65   Упаковка регистров и границы разделов   2-66   Упаковка I/O регистров   2-66   Ограничения в скриптах раздела восходящего проектирования   2-66     Предупреждения о дополнительных тактах в отношении скриптов раздела восходящего проектирования   2-67     Файл ограничения проекта Synopsys для временного анализатора TimeQuest в скриптах раздела восходящего проектирования   2-67     Поддержка дикой карты в скриптах раздела восходящего проектирования   2-67     Полученные такты и PLL в скриптах раздела восходящего проектирования   2-67     Назначение выводов для блоков GXB и LVDS в скриптах раздела восходящего проектирования   2-68     Временные назначения для виртуальных выводов в скриптах раздела восходящего проектирования   2-68     Порты головного проекта, ведущие к множеству выводов проектов нижнего уровня в скриптах раздела восходящего проектирования   2-68 Поддержка скриптов  2-69   Подготовка проекта для инкрементной компиляции   2-69   Создание разделов проекта   2-69   Настройка свойств разделов проекта   2-70   Создание назначений локализации архитектуры – исключение или фильтрация определенные элементов чипа (таких как блоки памяти и DSP)   2-71   Генерация скриптов раздела восходящего проектирования   2-71     Поддержка командной строки   2-72   Экспорт раздела для использования в головном проекте   2-73   Импорт раздела нижнего уровня в головной проект   2-74   Создатель файлов   2-74   Рекомендуемый процесс разработки и примеры приложений компиляций – скриптирование и операции с командной строкой   2-74     Уменьшение времени компиляции, когда изменяется исходный файл для одного раздела – пример с командной строкой   2-75     Оптимизация размещения для критичных ко времени разделов   2-75 Заключение   2-76 |
Введение   3-1
    Что такое Tcl?   3-2 Quartus II Tcl пакеты   3-2     Загрузка пакетов   3-3 Quartus II Tcl API помощь   3-3     Опции командной строки: -t, -s, и —tcl_eval   3-6         Запуск Tcl скрипта   3-6         Режим интерактивной оболочки   3-6         Определение в качестве Tcl   3-7     Использование окна Quartus II Tcl консоли   3-7 Сквозной процесс проектирования   3-7 Создание проектов и назначений   3-8     Проекты в чипах HardCopy   3-8 Компиляция проектов   3-9     Пакет flow   3-9     Компиляция всех версий   3-9 Отчёты   3-10     Создание .csv файлов для Excel   3-11 Временной анализ   3-12 Автоматическое исполнение скрипта   3-12     Примеры исполняемых компонентов   3-13     Контролирование процессов   3-14     Отображение сообщений   3-14 Другие средства скрипта   3-14     Обычное наименование шины   3-15     Опция сокращения имён   3-15     Использование коллекции команд   3-15         Команда foreach_in_collection   3-16         Команда get_collection_size   3-16     Использование команды post_message   3-16     Доступ к аргументам командной строки   3-17         Использование пакета cmdline   3-17 Использование оболочки Quartus II Tcl в интерактивном режиме   3-19 Использование оболочки tclsh   3-20 Основы Tcl скриптов   3-20     Пример “Hello world”   3-20     Переменные   3-20     Подстановка   3-21         Подстановка значения переменной   3-21         Подстановка вложенной команды   3-21         Подстановка обратным слешем   3-21     Арифметика   3-21     Списки   3-22     Массивы   3-22     Контролирующие структуры   3-23     Процедуры   3-24     Входные/выходные файлы   3-25     Синтаксис и комментарии   3-25 |
Введение   1-1
PLD процесс проектирования   1-2     Процесс функциональной симуляции RTL   1-3     Процесс временной симуляции на уровне вентилей   1-4     Конвертирование формата BDF в формат HDL   1-4 Библиотеки симуляции   1-5     Функциональная симуляция RTL   1-5     Временная симуляция на уровне вентилей   1-6     Файлы симуляции списков соединений   1-6     Генерация файлов списков соединений для пост-синтез симуляции   1-7     Генерация файлов списков соединений для временной симуляции на уровне вентилей   1-7     Генерация файлов списков соединений для временной симуляции в различных временных моделях   1-8 EDA компилятор библиотек симуляции   1-9     Запуск EDA компилятора библиотек симуляции в графической оболочке   1-10     Запуск EDA компилятора библиотек симуляции из командной строки   1-11 Использование средства NativeLink   1-11     Установка пути к исполняемым файлам EDA симулятора   1-11     Конфигурирование настоек NativeLink   1-12     Запуск RTL функциональной симуляции с помощью средства NativeLink   1-14     Запуск временной симуляции на уровне вентилей с помощью средства NativeLink   1-14     Установка файлов тестовых стендов в средстве NativeLink   1-14 Заключение   1-16 |
Программные требования   2-1
Процесс проектирования с программой ModelSim-Altera или ModelSim/QuestaSim   2-2 Библиотеки симуляции   2-2     Предварительно скомпилированные библиотеки симуляции в программе ModelSim-Altera   2-2     Файлы библиотек симуляции в программе Quartus II   2-3     Запрещение временных нарушений в регистрах   2-3 Выполнение симуляции в программе ModelSim-Altera   2-3     Выполнение функциональной симуляции   2-3         Установка проекта Quartus II для программы ModelSim-Altera   2-4         Компиляция и загрузка проектов в программе ModelSim-Altera   2-4         Выполнение симуляции   2-4     Выполнение пост-синтез симуляции   2-4     Выполнение временной симуляции на уровне вентилей   2-4 Выполнение симуляции в программе ModelSim/QuestaSim   2-5     Симуляция VHDL проектов в графической оболочке   2-5         Выполнение функциональной симуляции   2-5         Выполнение пост-синтез симуляции   2-6         Выполнение симуляции на уровне вентилей   2-7     Симуляция Verilog HDL проектов в графической оболочке   2-7         Выполнение функциональной симуляции   2-7         Выполнение пост-синтез симуляции   2-8         Выполнение симуляции на уровне вентилей   2-9     Симуляция VHDL проектов в командной строке   2-9         Выполнение функциональной симуляции   2-9         Выполнение пост-синтез симуляции   2-11         Выполнение симуляции на уровне вентилей   2-12     Симуляция Verilog HDL проектов в командной строке   2-13         Выполнение функциональной симуляции   2-13         Выполнение пост-синтез симуляции   2-14         Выполнение симуляции на уровне вентилей   2-15     Передача параметрической информации от Verilog HDL к VHDL   2-15     Ускорение симуляции   2-16 Симуляция проектов, имеющих передатчики   2-16     Функциональная симуляция чипов Stratix GX   2-17         Выполнение функциональной симуляции VHDL (ModelSim-Altera)   2-17         Выполнение функциональной симуляции VHDL (ModelSim/QuestaSim)   2-17         Выполнение функциональной симуляции Verilog HDL (ModelSim-Altera)   2-17         Выполнение функциональной симуляции Verilog HDL (ModelSim/QuestaSim)   2-17     Временная симуляция на уровне вентилей для чипов Stratix GX   2-18         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim-Altera)   2-18         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim/QuestaSim)   2-18         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim-Altera)   2-18         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim/QuestaSim)   2-19     Функциональная симуляция чипов Stratix II GX   2-19         Выполнение функциональной симуляции VHDL (ModelSim-Altera)   2-19         Выполнение функциональной симуляции VHDL (ModelSim/QuestaSim)   2-19         Выполнение функциональной симуляции Verilog HDL (ModelSim-Altera)   2-20         Выполнение функциональной симуляции Verilog HDL (ModelSim/QuestaSim)   2-20     Временная симуляция на уровне вентилей для чипов Stratix II GX   2-20         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim-Altera)   2-20         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim/QuestaSim)   2-20         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim-Altera)   2-21         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim/QuestaSim)   2-21     Функциональная симуляция чипов Stratix IV GX   2-21         Выполнение функциональной симуляции VHDL (ModelSim-Altera)   2-21         Выполнение функциональной симуляции VHDL (ModelSim/QuestaSim)   2-21         Выполнение функциональной симуляции Verilog HDL (ModelSim-Altera)   2-22         Выполнение функциональной симуляции Verilog HDL (ModelSim/QuestaSim)   2-22     Временная симуляция на уровне вентилей для чипов Stratix IV GX   2-22         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim-Altera)   2-22         Выполнение временной симуляции на уровне вентилей VHDL (ModelSim/QuestaSim)   2-22         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim-Altera)   2-23         Выполнение временной симуляции на уровне вентилей Verilog HDL (ModelSim/QuestaSim)   2-23     Функциональная симуляция чипов Stratix V GX   2-23         Выполнение функциональной симуляции VHDL (ModelSim-Altera)   2-24         Выполнение функциональной симуляции Verilog HDL (ModelSim-Altera)   2-24         Выполнение функциональной симуляции Verilog HDL (ModelSim/QuestaSim)   2-24     Транспортные задержки   2-24 Использование средства NativeLink с программой ModelSim-Altera или ModelSim/QuestaSim   2-24 Верификация сообщений об ошибке в ModelSim/QuestaSim   2-25 Генерация файла дампа изменений временных значений (. vcd) для PowerPlay Power Analyzer   2-25 Просмотр временных диаграмм из .wlf файла   2-26 Поддержка скриптов   2-26     Генерирование списка соединений для пост-синтез симуляции в ModelSim/QuestaSim   2-27         Tcl команды   2-27         Командная строка   2-27     Генерирование списка соединений для временной симуляции на уровне вентилей в ModelSim/QuestaSim   2-27         Tcl команды   2-27         Командная строка   2-28 Лицензирование программы и установка лицензии в ModelSim-Altera Subscription Edition   2-28     Переменная LM_LICENSE_FILE   2-29 Заключение   2-29 |
Это мой перевод 7 главы 2 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
7.The Quartus II TimeQuest Timing Analyser
Средство TimeQuest — обязательный инструмент разработки любого более-менее сложного проекта. Временной анализатор Quartus II TimeQuest – это следующее поколение инструментария временного анализа, который поддерживает формат промышленного стандарта SDC и позволяет разработчикам создавать, управлять и анализировать сложные временные ограничения, а также выполнять расширенную временную верификацию. |
Титульный
Введение   7-1 Начало работы с временным анализатором Quartus II TimeQuest   7-2   Установка временного анализатора Quartus II TimeQuest   7-2 Процесс компиляции с указаниями временного анализатора Quartus II TimeQuest   7-2 Запуск временного анализатора Quartus II TimeQuest   7-4   Непосредственно из программы Quartus II   7-4   В автономном режиме   7-4   В режиме командной строки   7-4 Общий вид временного анализатора   7-6   Анализ тактов   7-10     Контроль времени установки   7-10     Контроль удержания тактов   7-11     Восстановление и удаление   7-12   Мультицикловые пути   7-14   Метастабильность   7-15   Пессимизм общих тактовых путей   7-16   Такты в качестве данных   7-18 Руководство по процессу временного анализа в Quartus II   7-19   Создание временного списка соединений   7-20   Прочитать файл ограничений проекта Synopsys   7-20   Обновление временного списка соединений   7-20   Генерация временных отчётов   7-20 Коллекции   7-21   Примеры приложений   7-22 Файл ограничения SDC   7-22   Компоновка и временной анализ с помощью файлов SDC   7-22   Определение SDC файлов для размещения и разводки   7-23   Определение SDC файлов для статического временного анализа   7-23   Первенство файла ограничений Synopsys   7-23 Спецификация тактов   7-24   Такты   7-24     Сгенерированные такты   7-25   Виртуальные такты   7-28   Мульти-частотные такты   7-29   Автоматическое детектирование тактов   7-30   Получение тактов PLL   7-30   Ограничения тактов по умолчанию   7-33   Тактовые группы   7-33   Эффективные характеристики тактов   7-35     Задержка тактов   7-35     Неопределённость тактов   7-36   Вычисление тактовой неопределённости   7-37     Межтактовые переходы   7-38     Внутритактовые переходы   7-38     Тактовые переходы интерфейса I/O   7-38 Спецификация I/O   7-39   Задержки входа и выхода   7-39     Установка входной задержки   7-39     Установка выходной задержки   7-41 Спецификация задержки и расфазировки   7-42   set_net_delay   7-42   set_max_skew   7-43 Временные исключения   7-44   Приоритеты   7-44   Ложный путь   7-44   Минимум задержки   7-45   Максимум задержки   7-46   Мультицикловый путь   7-47   Аннотированная задержка   7-48   Примеры применения   7-50 Удаление ограничений и исключений   7-51 Временные отчеты   7-51   report_timing   7-52   report_exceptions   7-55   report_metastability   7-57   report_clock_transfers   7-57   report_clocks   7-58   report_min_pulse_width   7-59   report_net_timing   7-60   report_sdc   7-61   report_ucp   7-61   report_bottleneck   7-62   report_datasheet   7-64   report_rskm   7-64   report_tccs   7-65   report_partitions   7-66   report_path   7-66   report_net_delay   7-68   report_max_skew   7-69   check_timing   7-70   report_clock_fmax_summary   7-73   create_timing_summary   7-73 Средства временного анализа   7-74   Многоугольный анализ   7-74   Расширенные временные назначения I/O и модели трассировки платы   7-76   Назначение «дикой карты» и коллекции   7-76   Сброс проекта   7-78   Межпробник   7-78     locate   7-78 Графическая оболочка (GUI) временного анализатора TimeQuest   7-79   Интерфейс и опции программы Quartus II   7-80   Панель вида   7-81     Панель вида: Дробление   7-81     Панель вида: удаление разделённых окон   7-82   Панель задач   7-83     Открытие проекта и запись файла ограничений проекта Synopsys   7-83     Папка установки списка соединений   7-83     Папка отчётов   7-84     Папка макросов   7-84   Панель консоли   7-85   Панель отчётов   7-85   Ограничения   7-85   Поиск по имени   7-87   Панель объектов   7-88   Редактор SDC   7-89 Заключение   7-89 |
Это мой перевод вводной главы 4 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
In system debugging
Даётся вводная информация о средствах отладки проекта в системе. Приводится методика выбора оптимального средства отладки с точки зрения использования доступных ресурсов и скорости получения данных. Приведено краткое сравнение таких средств: SignalProbe,встроенный логический анализатор SignalTap II, использование внешних логических анализаторов, редактор памяти и констант в системе, исходники и пробники в системе. |
Введение   IV-1
  Экосистема отладки в чипе   IV-1     Инструменты анализа для RTL узлов   IV-3     Использование ресурсов   IV-4     Использование выводов   IV-5     Улучшенное удобство в применении   IV-6   Инструменты, оказывающие воздействие   IV-8     Исходники и пробники в системе   IV-8     Редактор содержимого памяти в системе   IV-8     Мегафункция интерфейса виртуального JTAG   IV-9   Заключение   IV-9 |
Введение   13-1
  Отладка с использованием средства SignalProbe   13-1     Резервирование выводов SignalProbe   13-2     Выполнение полной компиляции   13-3     Назначение исходников для выводов SignalProbe   13-3     Добавление регистров линиям пути до вывода SignalProbe   13-4     Выполнение SignalProbe компиляции   13-5     Анализ результатов SignalProbe компиляции   13-5 Процессы SignalProbe ECO   13-6     Процесс SignalProbe ECO с инкрементной компиляцией Quartus II   13-6     Процесс SignalProbe ECO без инкрементной компиляции Quartus II   13-7   Общие вопросы о средстве SignalProbe   13-8 Поддержка скриптов   13-11     Создание вывода SignalProbe   13-11     Удаление вывода SignalProbe   13-11     Разрешение вывода SignalProbe   13-11     Запрещение вывода SignalProbe   13-11     Выполнение SignalProbe компиляции   13-11     Перемещение предыдущих выводов SignalProbe в версии программы Quartus II 6. 0 и старше   13-12     Пример скрипта   13-12     Использование SignalProbe для семейства чипов APEX™   13-12     Добавление исходников SignalProbe   13-12     Выполнение SignalProbe компиляции   13-13     Запуск SignalProbe в интеллектуальной компиляции   13-13     Осмысление результатов SignalProbe компиляции   13-14     Средства анализа разводки SignalProbe   13-15     Поддержка скриптов SignalProbe для чипов APEX   13-15 Резервирование выводов SignalProbe   13-16     Добавление исходников SignalProbe   13-16     Назначение стандартов I/O   13-16     Добавление регистров к линиям пути   13-16     Автоматический запуск SignalProbe   13-17     Ручной запуск SignalProbe   13-17     Разрешение или запрещение всей SignalProbe разводки   13-17     Запуск SignalProbe в интеллектуальной компиляции   13-17     Позволять SignalProbe модифицировать результаты предыдущей компоновки   13-17   Заключение   13-18 |
Это мой перевод 14 главы 4 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
14. Design Debugging Using the SignalTap II Embedded Logic Analyzer
Этот логический анализатор помогает отлаживать проект FPGA путём пробирования состояний внутренних сигналов без использования внешней обвязки. Все захваченные сигналы данных легко сохраняются в памяти чипа, пока вы не будете готовы для чтения и анализа данных. Обладая достаточными ресурсами внутренней памяти и логических элементов FPGA, вы достаточно просто сможете построить любую схему события (или последовательности событий), по которому данные будут защёлкиваться в памяти встроенного анализатора. SignalTap II — это наиболее экономичный способ получения многофункционального логического анализатора для быстрой и эффективной отладки проектов любой сложности. |
Введение   14-1
    Требования к программе и оборудованию   14-2 Процесс разработки с использованием встроенного логического анализатора SignalTap® II   14-4 Задачи процесса встроенного логического анализатора SignalTap® II   14-4     Добавление встроенного логического анализатора SignalTap® II в ваш проект   14-5     Конфигурирование встроенного логического анализатора SignalTap® II   14-5     Определение состояний триггеров   14-6     Компиляция проекта   14-6     Программирование выбранного чипа или чипов   14-6     Запуск встроенного логического анализатора SignalTap II   14-6     Наблюдение, анализ и использование захваченных данных   14-6 Добавление встроенного логического анализатора SignalTap® II в ваш проект   14-6     Создание и разрешение файла SignalTap II   14-7         Создание файла SignalTap II   14-7         Разрешение или запрещение файла SignalTap II в текущем проекте   14-8     Встраивание нескольких анализаторов в один FPGA   14-9     Мониторинг ресурсов, используемых встроенным логическим анализатором SignalTap II   14-9     Использование менеджера плагинов MegaWizard для создания вашего встроенного логического анализатора   14-10         Создание HDL описания с использованием менеджера плагинов MegaWizard   14-10         Порты мегафункции SignalTap II   14-13         Размещение встроенного логического анализатора SignalTap II в вашем HDL коде   14-14 Конфигурирование встроенного логического анализатора SignalTap® II   14-14     Назначение такта захвата   14-14     Добавление сигналов в файл SignalTap II   14-15         Сохранение сигнала   14-17         Назначение сигналов данных с помощью поиска узлов   14-17         Назначение сигналов данных с помощью обозревателя технологической карты   14-18         Использование опций для сигналов из списка узлов   14-19         Защищённые от захвата сигналы   14-19     Добавление сигналов с помощью плагина   14-19     Добавление регистров состояний конечного автомата   14-20         Изменение и восстановление мнемонических таблиц для конечных автоматов   14-22         Дополнительные возможности анализа   14-22     Определение глубины замеров   14-23     Сбор данных в RAM определённого типа   14-23     Выбор режима для буфера сбора данных   14-23         Несегментный буфер   14-24         Сегментный буфер   14-24     Использование средства квалификации памяти   14-25         Режим входной порт   14-27         Переходный режим   14-28         Условный режим   14-29         Режим старт/стоп   14-30         Базовое состояние   14-31         Показ прерываний данных   14-31         Запрещение квалификатора памяти   14-31     Менеджер нескольких файлов SignalTap II и конфигураций   14-32 Определение триггеров   14-33     Создание базовых состояний триггера   14-33     Создание расширенных состояний триггера   14-34         Примеры выражений расширенных состояний триггера   14-35     Контроль процесса состояний триггера   14-36         Последовательный триггер   14-36         Настраиваемые триггеры базовых состояний   14-38         Язык описания процесса триггера SignalTap II   14-42         Метки состояний   14-42         Булевы соотношения   14-43         Список действий   14-43         Действия манипуляции с ресурсами   14-43         Действия контроля буфера   14-44         Действие перехода состояния   14-44         Использование средства квалификатора памяти базовых состояний   14-45     Определение позиции триггера   14-48     Создание триггера включения   14-49         Разрешение триггера включения   14-49         Управление и конфигурирование состояний триггера включения и триггера в запущенном времени   14-50     Использование внешних триггеров   14-51         Входной триггер   14-51         Выходной триггер   14-51         Использование выхода триггера одного анализатора как входа триггера другого анализатора   14-52 Компиляция проекта   14-53     Быстрые компиляции с инкрементной компиляцией Quartus II   14-53         Разрешение инкрементной компиляции в вашем проекте   14-54         Использование инкрементной компиляции со встроенным логическим анализатором SignalTap II   14-55     Предотвращение изменений вынужденной перекомпиляции   14-57     Сохранение временных параметров во встроенном логическом анализаторе SignalTap II   14-57     Анализ ресурсов и характеристик   14-57 Программирование выбранного чипа или чипов   14-59     Программирование одного чипа   14-59     Программирование нескольких чипов для отладки нескольких проектов   14-60 Запуск встроенного логического анализатора SignalTap II   14-60     Запуск с триггером включения   14-62     Запуск с триггером в запущенном времени   14-62     Выполнение форсированного триггера   14-62     Опции реконфигурации в запущенном времени   14-63     Статусные сообщения SignalTap II   14-65 Наблюдение, анализ и использование захваченных данных   14-66     Наблюдение захваченных данных   14-66     Захват данный с использованием сегментных буферов   14-67     Создание мнемоники для последовательности битов   14-69     Автоматическая мнемоника с плагином   14-69     Локализация узлов в проекте   14-69     Сохранение захваченных данных   14-70     Конвертация захваченных данных в другие форматы файлов   14-70     Создание файла списка SignalTap II   14-71 Другие средства   14-71     Использование функции SignalTap II MATLAB MEX для захвата данных   14-71     Использование SignalTap II в лаборатории   14-73     Удалённая отладка с использованием встроенного логического анализатора SignalTap II   14-73         Установка оборудования   14-73         Установка программы на удалённом ПК   14-73         Установка программы на локальный ПК   14-74         Установка SignalTap II на локальный ПК   14-75     Использование встроенного логического анализатора SignalTap II в чипах с конфигурацией Bitstream Security   14-75     Обратная совместимость с предыдущими версиями программы Quartus II   14-76 Поддержка скриптов в SignalTap II   14-76     Опции командной строки SignalTap II   14-76     Опции Tcl команд SignalTap II   14-78 Пример проекта: использование встроенного логического анализатора SignalTap II в системах разработки SOPC   14-79 Примеры приложений процесса настраиваемого триггера   14-79     Пример проекта 1: Определение позиции настраиваемого триггера   14-80     Пример проекта 2: Захват, когда срабатывает triggercond1 ожидать десять тактов между triggercond2 и triggercond3   14-80 Заключение   14-81 |
Введение   15-1
Выбор логического анализатора   15-1     Необходимые компоненты   15-2     Поддержка чипов FPGA   15-3 Отладка вашего проекта с использованием интерфейса логического анализатора   15-3     Создание LAI файла   15-4         Создание нового файла логического анализатора   15-5         Открытие существующего файла интерфейса внешнего анализатора   15-5         Сохранение файла интерфейса внешнего анализатора   15-5     Конфигурирование основных параметров файла интерфейса логического анализатора   15-5     Разводка выводов файла интерфейса логического анализатора по доступным I/O выводам   15-6     Разводка внутренних сигналов к банкам интерфейса логического анализатора   15-7     Использование поиска узлов   15-7     Разрешение интерфейса логического анализатора перед компиляцией вашего проекта Quartus II   15-8     Компилирование вашего проекта Quartus   II 15-8     Программирование вашего FPGA, используя интерфейс логического анализатора   15-9     Использование интерфейса логического анализатора с несколькими чипами   15-10     Конфигурирование банков в файле интерфейса логического анализатора   15-10     Получение данных в вашем логическом анализаторе   15-10 Расширенные средства   15-11     Использование интерфейса логического анализатора в инкрементной компиляции   15-11     Создание различных элементов интерфейса логического анализатора в одном FPGA   15-11 Выводы   15-12 |
Это мой перевод 16 главы 4 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
16. In-System Updating of Memory and Constants
Это прекрасное средство отладки. С его помощью можно просматривать данные во внутренней памяти Altera, а также в реальном времени изменять их. Удобное средство для обновления программы встроенного процессора, а также для подбора коэффициентов цифрового фильтра. |
Введение   16-1
Общее представление   16-1 Поддержка мегафункций чипом   16-2 Использование обновления в системе памяти и констант в вашем проекте   16-2 Создание модифицируемых в системе памяти и констант   16-3 Запуск редактора содержимого памяти в системе   16-3     Менеджер элемента   16-4     Редактирование данных в редакторе Hex   16-6     Импорт и экспорт файлов памяти   16-6     Просмотр содержимого памяти и констант   16-6     Поддержка скриптов   16-8     Программирование чипа, используя редактор содержимого памяти в системе   16-8     Пример использования редактора содержимого памяти в системе вместе с встроенным логическим анализатором SignalTap II   16-9 Заключение   16-9 |
Это мой перевод 17 главы 4 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
17. Design Debugging Using In-System Sources and Probes
Данное средство дополняет использование SignalTap II и SignalProbe. С его помощью вы можете создать исходные стимулы и проследить реакцию на их воздействие. Таким образом, оно позволяет создавать примитивное воздействие, например, нажатие на виртуальную кнопку или срабатывание виртуального датчика, с тем, чтобы уже в более мощных средствах отладки проследить реакцию на это воздействие. |
Это мой перевод 11 главы 3 раздела 3 тома Quartus II Handbook.
Volume 3: Verification.
11. Transceiver Link Debugging Using the System Console
Средство Transceiver Toolkit появилось в 10 версии программы Quartus II. Оно предназначено для отладки и настройки цепей высокоскоростных приёмопередатчиков. Transceiver Toolkit позволяет проводить тестирование между платами, тестирование между чипами на одной отладочной плате, а также тестирование внутренней обратной связи в одном канале, без необходимости использования внешних обратных связей. Критерием тестирования является частота появления ошибочных битов (BER). |
Введение в Transceiver Toolkit   11-1
    Интерфейс пользователя Transceiver Toolkit   11-2 Примеры проектов отладки цепи приёмопередатчика   11-3     Установки тестов для цепи отладки   11-3     Компиляция примеров проектов   11-8     Изменение назначений выводов   11-8 Настройки тестовой цепи в Transceiver Toolkit   11-9     Загрузка проекта в System Console   11-9     Компоновка аппаратных ресурсов   11-9     Создание каналов   11-10     Запуск тестов цепи   11-11     Просмотр результатов в средстве EyeQ   11-12 Использование Tcl в System Console   11-13     Запуск Tcl скриптов   11-14 Использование сценариев   11-14     Линковка одного проекта с одним чипом, подключение через один кабель USB-Blaster   11-15     Линковка двух проектов с двумя отдельными чипами на одной плате (цепь JTAG), подключение через один кабель USB-Blaster   11-15     Линковка двух проектов с двумя отдельными чипами на разных платах, подключение через отдельные кабели USB-Blaster   11-15     Линковка одного проекта с двумя отдельными чипами   11-15     Линковка несвязанных проектов   11-16     Сохранение ваших установок в виде Tcl скриптов   11-16     Проверка корректности каналов после создания цепи   11-16     Использование рекомендованного DFE процесса   11-17     Запуск синхронных тестов   11-17     Разрешение внутренней последовательной обратной связи   11-18 Быстрый проводник по использованию Transceiver Toolkit в программе Quartus II   11-18     Подготовка к использованию Transceiver Toolkit   11-18     Работа с примерами проектов   11-19     Редактирование примеров проектов   11-20     Задание цепи в Transceiver Toolkit для тестов высокоскоростных цепей   11-21     Запуск тестов Auto Sweep   11-22     Запуск тестов EyeQ   11-22     Запуск ручных тестов   11-23     Использование обычного процесса   11-23     Посмотрите онлайн демонстрацию   11-24 Заключение   11-24 |
ПЛИС (Программируемая Логическая Интегральная Схема) — это интегральная схема, предназначенная для построения цифровых цепей из описания на специальном языке программирования. Другими словами, ПЛИС представляет собой чип, как бы содержащий в себе кучу элементов наподобие 74HCxx. Какие именно это будут логические элементы, какие между ними будут связи, и какие связи будет иметь получившаяся схема с внешним миром, определяется на этапе программирования ПЛИС.
Примечание: Насколько я смог выяснить, в русском языке на сегодняшний день термины ПЛИС и FPGA (Field-Programmable Gate Array, Программируемая Пользователем Вентильная Матрица), принято считать взаимозаменяемыми, что будет использовано далее по тексту. Однако стоит знать о существовании и альтернативной точки зрения, согласно которой FPGA (ППВМ) является одной из разновидностей ПЛИС (PLD, Programmable Logic Device).
Для программирования FPGA используются языки описания аппаратуры (HDL, Hardware Description Language). Среди них наибольшей популярностью пользуются Verilog (и его диалекты, в частности SystemVerilog), а также VHDL. Языки во многом похожи, но имеют разный синтаксис и различаются в некоторых деталях. Если Verilog — это такой C мира описания аппаратуры, то VHDL — соответственно, Pascal. Насколько мне известно, VHDL несколько менее популярен, в частности, из-за его многословности по сравнению с Verilog. Из преимуществ VHDL (или недостатков, кому как) можно назвать строгую статическую типизацию. Verilog же иногда допускает неявное приведение типов. Если продолжать аналогию с C и Pascal, языки различаются не настолько сильно, чтобы не выучить их оба.
На данный момент лидирующими производителями FPGA являются компании Altera (сейчас принадлежит Intel) и Xilinx. По информации из разных источников, вместе они контролируют не менее 80% рынка. Из других игроков стоит отметить Actel (куплена Microsemi), Lattice Semiconductor, Quicklogic и SiliconBlue. С железом от Xilinx можно работать только из среды разработки от Xilinx (называется Vivado), а среда разработки от Altra (называетя Quartus) понимает только железо от Altera. То есть, полный вендор лок, и выбирая конкретную FPGA для своего проекта, вы автоматически выбираете и инструменты разработки соответствующего производителя, их техническую поддержку, документацию, условия лицензирования софта, политику касаемо прекращения поддержки железа, и так далее.
FPGA часто используются в задачах, где некие вычисления хочется существенно ускорить, реализовав их прямо в железе. Например, FPGA нашли широкое применение в области обработки сигналов, скажем, в осциллографах, анализаторах спектра, логических анализаторах, генераторах сигналов, Software Defined Radio и даже некоторых мониторах. В частности, в LimeSDR используется Altera Cyclone IV, а в осциллографе Rigol DS1054Z стоит Xilinx Spartan-6, а также ProASIC 3 от компании Actel. Еще из применений, о которых я слышал, могу назвать компьютерное зрение, распознавание речи и биоинформатику. Есть и другие проекты, в частности по разработке веб-серверов и СУБД, работающих на FPGA [PDF]. Но, насколько мне известно, это направление все еще остается сильно экспериментальным.
Как говорится, лучший Linux тот, который использует ваш знакомый гуру по Linux.
Мой знакомый гуру по FPGA в лице Дмитрия Олексюка посоветовал начать с девборды Arty Artix-7 от компании Digilent. Используемой в ней FPGA является Artix-7 от Xilinx. Сам Digilent не производит доставку в Россию, но устройство доступно и на AliExpress, хотя и с заметной наценкой (официальная цена составляет 99$). Также его продают на eBay. Это довольно мощная плата, которая, тем не менее, стоит вполне адекватных денег.
Fun fact! Если вам просто хочется попрограммировать на Verilog или VHDL, строго говоря, покупать какую-либо плату с FPGA не требуется. Первое время можно ограничиться симулятором, работа с которым будет рассмотрена далее.
Из интересных особенностей платы можно назвать расположение гнезд совместимым с Arduino-шилдами способом. Также в комплекте с платой идет вкладыш, по которому можно получить лицензию на Vivado, открывающую все его возможности. Лицензия действует один год с момента активации, а также привязана к одному компьютеру по типу ОС и MAC-адресу.
По доставке. Я слышал, что устройства с FPGA на борту имеют большие шансы не пройти таможню. Магазин на AliExpress, ссылку на который я привел выше, доставляет платы в Россию через курьерскую службу СПСР. Для прохождения таможни потребовалось заполнить онлайн-форму с паспортными данными (только данные, без фото) и контактным телефоном, как этого требует текущее российское законодательство. После этого плата была доставлена курьером прямо до двери без каких-либо вопросов.
Среда разработки Vivado доступна для скачивания на сайте Xilinx. Будьте морально готовы к тому, что перед скачиванием вам придется пройти регистрацию и заполнить довольно подробную форму о себе. Скачиваем архив под названием «Vivado HLx 2017.2: All OS installer Single-File Download». Не перепутайте случайно с каким-нибудь «Vivado Lab Solutions», это совершенно не то, что нужно. Архив весит более 20 Гб, поэтому запасаемся терпением.
Распаковываем архив, запускаем инсталлятор. Ставим Vivado HL System Edition. Полная его версия займет на диске 47 Гб. Лично я снял галочку напротив Software Development Kit и оставил поддержку только 7 Series устройств, что уменьшило размер до 12 Гб. Забегая немного вперед отмечу, что такой конфигурации оказалось вполне достаточно.
Перед запуском Vivado нужно добавить в него поддержку Arty Artix-7, так как из коробки он ничего об этой плате не знает. Делается это как-то так:
cd ~/opt/xilinx/Vivado/2017.2/data/boards/board_files
wget https://github.com/Digilent/vivado-boards/archive/master.zip
unzip master.zip
mv vivado-boards-master/new/board_files/* ./
rm -r vivado-boards-master
rm master.zip
Также скачиваем отсюда и сохраняем куда-нибудь файл Arty_Master.xdc. Он понадобится нам далее. Файл содержит описание находящихся на плате светодиодов, переключателей и так далее. Без него поморгать светодиодами на Verilog будет непросто.
В Vivado говорим File → New Project… В качестве типа проекта выбираем RTL Project, ставим галочку Do not specify sources at this time. В диалоге выбора типа платы находим в списке Arty.
Первым делом добавляем к проекту скачанный ранее XDC файл. Копируем его в каталог с проектом. Затем говорим File → Add Sources… → Add or create constraints → Add Files, находим копию файла, жмем Finish. В дереве файлов проекта (Sources) в группе Constraints появится файл Arty_Master.xdc, или как вы там назвали копию. Открываем его и раскомментируем все строчки в группах Clock signal, Switches и LEDs.
Далее говорим File → Add Sources… → Add or create design sources → Create File. В типе файла выбираем SystemVerilog, в имени файла вводим что-нибудь вроде hello. Говорим Finish. Далее появится диалог Define Module, который предложит накликать интерфейс модуля. Диалог довольно бесполезный, потому что то же самое удобнее сделать прямо в коде, так что жмем Cancel.
В дереве исходников находим новый файл hello.sv, он будет в группе Design Sources. Открываем и пишем следующий код:
`timescale 1ns / 1psmodule hello(
input logic CLK100MHZ,
input logic [3:0] sw,
output logic [3:0] led
);
always @(posedge CLK100MHZ)
begin
if(sw[0] == 0)
begin
led <= 4’b0001;
end
else
begin
led <= 4’b0000;
end
end
endmodule
Если все было сделано правильно, на этом этапе Vivado у вас будет выглядеть как-то так (кликабельно, PNG, 71 Кб):
Компиляция программы осуществляется в два этапа — синтез (synthesis) и имплементация (implementation). На этапе синтеза программа транслируется в абстрактную цепь из логических вентилей и прочих элементов. На этапе имплементации принимается решение о том, как прошить эту цепь в конкретную железку.
Запустим синтез, сказав Flow → Run Synthesis, или просто нажав F11. В правом верхнем углу вы увидите индикацию того, что процесс идет. Он может занимать довольно много времени, в зависимости от вашего компьютера и сложности программы. На моем ноутбуке синтез приведенной выше программы выполнился где-то секунд за 10. Если теперь сказать Flow → Open Synthesized Design, то можно увидеть красивую картинку вроде такой:
Настало время прошить нашу плату. Говорим Flow → Run Imlementation, затем Flow → Generate Bitstream. Подключаем плату к компьютеру по USB, в Vivado говорим Flow → Open Hardware Manager → Open target → Auto Connect → Program device. Потребуется указать путь к bit-файлу. У меня он был следующим:
./first-project.runs/impl_1/hello.bit
Говорим Program. Теперь на плате горит светодиод LD4, если переключатель SW0 опущен (см приведенную выше фотографию платы). Если же переключатель поднят, светодиод не горит. Простенько, конечно, но это же «hello, world», чего вы ожидали? 🙂
Симуляция — это виртуальное выполнение кода на Verilog или VHDL прямо на вашем компьютере, безо всяких там ПЛИС’ов. Это одновременно и отладочный инструмент, и своего рода фреймворк для покрытия кода тестами.
При знакомстве с симуляцией первое, что я обнаружил, было то, что она у меня не работает. В логах было просто:
ERROR: [XSIM 43-3409] Failed to compile generated C file […]xsim_1.c.
Google по этой ошибке находил только всякую ерунду в стиле «попробуйте отключить антивирус». В итоге решить проблему помогло добавление флага -v 2
в скрипт ~/opt/xilinx/Vivado/2017.2/bin/xelab. С его помощью я выяснил, что Clang, бинарник которого Vivado таскает за собой, падает со следующей ошибкой:
/a/long/path/to/clang: error while loading shared libraries:
libncurses.so.5: cannot open shared object file: No such file or
directory
А эта ошибка и ее решение уже описаны на Arch Wiki. Лично я просто скопировал уже существующий файл из каталога Vivado_HLS:
cp ~/opt/xilinx/Vivado_HLS/2017.2/lnx64/tools/gdb_v7_2/libncurses.so.5\
~/opt/xilinx/Vivado/2017.2/lib/lnx64.o/libncurses.so.5
… после чего все заработало. Итак, а теперь, собственно, пример симуляции.
По аналогии с тем, как ранее мы создавали hello.sv, создаем новый файл hello_sim.sv в группе Simulation Sources. В файле пишем следующий код:
`timescale 1ns / 1psmodule hello_sim();
logic clck_t;
logic [3:0] sw_t;
logic [3:0] led_t;
hello hello_t(clck_t, sw_t, led_t);
initial begin
clck_t <= 0;
sw_t <= 4’b0000; #1; clck_t <= 1; #1; clck_t <= 0; #1;
assert(led_t === 4’b0001);
sw_t <= 4’b0001; #1; clck_t <= 1; #1; clck_t <= 0; #1;
assert(led_t === 4’b0000);
end
endmodule
В дереве исходников делаем правый клик по файлу, выбираем Source Node Properties. В секции Used In снимаем галочки Synthesis и Implementation. Мы же не хотим, чтобы какие-то там тесты засоряли нашу далеко не резиновую FPGA?
Теперь говорим Flow → Run Simulation → Run Behavioral Simulation. В итоге вы увидите что-то примерно такого плана:
Можно видеть, что когда sw[0] равен нулю, led[0] равен единице, и наоборот. При этом все изменения происходят по фронту тактового сигнала. Похоже, что программа работает корректно. Ну и на ассертах ничего не свалилось, что как бы намекает.
Архив с описанным выше проектом можно скачать здесь. В качестве дополнительных источников информации я бы рекомендовал следующие:
А пишите ли вы под FPGA? Если да, то на каком языке и какого производителя предпочитаете?
Дополнение: Также вас могут заинтересовать статьи Головоломка с логическими вентилями и решение на HDL и Знакомимся с iCEstick и полностью открытым ПО для разработки под FPGA.
Метки: FPGA, Электроника.
В табл. 2.13 приведен перечень команд программы OrCAD Capture и их краткое описание.
Таблица 2.13. Команды OrCAD Capture (начало).
Команда | Назначение | |
---|---|---|
Меню File (Файл) | ||
New… | Создание нового документа: | |
Project… | Вызов Мастера создания проекта аналогового или смешанного устройства (Analog or Mixed-Signal Circuit), печатной платы (PC Board) или создание не специализированного проекта (Schematic) | |
Design | Создание схемы | |
Library | Создание библиотеки символов | |
VHDL File | Создание файла в формате VHDL | |
Text File | Создание текстового файла | |
PSpice Library | Создание библиотеки моделей PSpice | |
Открытие существующего документа: | ||
Project… | Проект (файл *.opj) | |
Design… | Схема проекта (файл *.dsn) | |
Library… | Библиотека символов (файл *.olb) | |
VHDL File- | Файл в формате VHDL (файл *.vhd) | |
Text File… | Текстовый файл (файл *.txt) | |
PSpice Library | Библиотека моделей PSpice (файл *.lib) | |
Close | Закрытие текущего окна (если схема была изменена, ее предлагается сохранить) | |
Close Project | Закрытие текущего проекта | |
Save (CTRL + S) | Сохранение внесенных изменений в текущем проекте | |
Save As… | Сохранение внесенных в проект изменений в новом файле, имя которого указывается по дополнительному запросу | |
Archive Project… | Архивирование проекта (Library – библиотека, Output files – выходные файлы, Referenced projects – участвующие проекты) | |
Export Selection… | Вставка на схему блока, занесенного ранее в библиотеку | |
Import Selection… | Запись в библиотеку выбранного блока | |
Print Preview… | Предварительный просмотр и масштабирование схемы |
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.
Verilog, Verilog HDL (англ. Verilog Hardware Description Language) — это язык описания аппаратуры, используемый для описания и моделирования электронных систем. Verilog HDL, не следует путать с VHDL (конкурирующий язык), наиболее часто используется в проектировании, верификации и реализации (например, в виде СБИС) аналоговых, цифровых и смешанных электронных систем на различных уровнях абстракции.
Разработчики Verilog сделали его синтаксис очень похожим на синтаксис языка C, что упрощает его освоение. Verilog имеет препроцессор, очень похожий на препроцессор языка C, и основные управляющие конструкции «if», «while» также подобны одноимённым конструкциям языка «C».
Следует отметить одну из самых важных отличительных особенностей программирования логики (Verilog, VHDL и т.д.) освоив которую, сразу же все возвращается на круги свои. Всё дело в том, что в ПЛИС все процессы выполняются одновременно! В то время как привычная и понятная нам процессорная техника работает иначе – последовательно. Уяснив эту важную отличительную особенность можно смело пытаться программировать.
Все плюсы и минусы СБИС ПЛИС освещаются в других разделах. Тут же хотелось бы продолжить уже конкретнее о языке описания аппаратуры Verilog.
Автор является приверженцем FPGA Xilinx, поэтому большинство примеров будет именно в пакете ISE 14.4, а времяночки из симулятора ModelSim 6.5b.
Теоретический материал был найден на просторах интернета, а так же в книгах с полки. С литературой и интернет ресурсами по теме Verilog можно ознакомиться в соответствующих разделах сайта.
Статья ни в коем случае не претендует на полноту описания языка Verilog. И, конечно, она не может заменить множества книг, которые Вам придется прочитать, если Вы всерьез займетесь проектированием цифровых микросхем. Тем не менее, эти уроки послужат практическим навыком начинающим разработчикам.
Для серьёзного обучения было бы правильно ознакомиться с международным стандартом — IEEE Std 1364-2001(стандарт на Verilog 2001).
Многие пытаются учить немецкий язык при помощи самоучителя и затем бросали. Разочаровывались в своих лингвистических способностях, но возможно, что самоучитель был подобран неудачно. Чем же должен отличаться такой самоучитель, и какую информацию нести. Прежде всего, выбирая самоучитель, необходимо обратить внимание на то, чтобы он был полным, качественным поурочным или потекстовым самоучителем. То есть, если в тексте встречаются новые слова, то они должны быть в задании после предоставленного текста или урока. Поэтому пробежав их глазами, будет возможность запомнить большинство из новых слов.
Для такого обучения не годиться один словарь, где придется искать необходимые слова. Больше времени будет уходить на поиск необходимых слов, чем на их заучивание. Также хороший пошаговый самоучитель немецкого языка должен предоставлять кроме поурочного словаря, повторяемость всех выученных слов. Так, каждое новое слово, должно повторяться на протяжении нескольких уроков, пока полностью не усвоиться. Если слово встретиться в первом уроке, а потом после десятого, то к этому времени оно забудется, это и будет снижение эффективности.
В самоучителе должен быть правильный подбор слов, это обеспечит качественную повторяемость вне самоучителя. Ведь никто не говорит, что после самостоятельного обучения можно начать бегло говорить или читать на немецком. Для этого необходимо пытаться читать учебники и книги, статьи в интернете и газеты. Можно пробовать разговаривать на немецком с людьми, которые его знают, слушать радио или телевидение. При правильном подборе в самоучителе слов, они будут часто встречаться, как при чтении, так и при общении. Благодаря этому слова быстро запомнятся, но при этом стоит всегда правильно учить произношение слов, так как переучивать будет более сложно.
Для понимания устной речи будет недостаточно записей, необходимо включать радио или телевидение и не пытаться слушать, а заниматься своими делами. К речи необходимо привыкать, нужно дать ушам возможность привыкнуть к чужой речи. Первое время она будет казаться непонятным и сложным потоком, но через время можно будет услышать выученные знакомые слова. После этого начать понимать, где начало незнакомого слова и конец, а так как слово повторяется часто среди известных слов, его смысл станет понятен. Если смотреть на сложность изучения немецкого языка, то его можно отнести к одному из сложных европейских языков.
Немецкий язык на данный момент является одним из перспективных языков. Во всем мире больше ста двадцати миллионов говорят на нем, так как это их родной язык. Для дипломатии, туризма или бизнеса он является вторым во всем мире. Для Восточной и Центральной Европы это самый важный иностранный язык. Во многих странах Европы предпочитают общение на немецком языке английскому. Даже в Японии почти семьдесят процентов всех студентов изучают немецкий язык.
Шкаф № В104.1 |
05.12.08г. |
|
|
1. | Фрунзе А.В. Микроконтроллеры? Это же просто! Том 1. |
|
|
2. | Фрунзе А.В. Микроконтроллеры? Это же просто! Том 2. |
|
|
3. | Фрунзе А.В. Микроконтроллеры? Это же просто! Том 3. |
|
|
4. | Микроконтроллеры фирмы ATMEL семейства AVR .Справочник КТЦ МК. |
|
|
5. | Голубцов М.С., Кириченкова А.В. Микроконтроллеры AVR: от простого к сложному. |
|
|
6. | Голубцов М.С. Микроконтроллеры AVR: от простого к сложному. |
|
|
7. | Баранов В.Н. Применение микроконтроллеров AVR: схемы, алгоритмы, программы. |
|
|
8. | Евстифеев А.В. Микроконтроллеры AVR семейств Tiny и Mega фирмы «ATMEL». |
|
|
9. | Белов А.В. Самоучитель по микропроцессорной технике. |
|
|
10. | Трамперт В. AVR-RISC микроконтроллеры. |
|
|
11. | Трамперт В. Измерение, управление и регулирование с помощью AVR микроконтроллеров. |
|
|
12. | Гребнев В.В. Микроконтроллеры семейства AVR фирмы ATMEL. |
|
|
13. | Микропроцессорные системы. Уч. пособие для вузов. |
|
|
14. | Предко М. Руководство по микроконтроллерам. Том 1. |
|
|
15. | Предко М. Руководство по микроконтроллерам. Том 2. |
|
|
16. | Иди Ф. Сетевой и межсетевой обмен данными с микроконтроллерами. |
|
|
17. | Васильев А.Е. Микроконтроллеры. Разработка встраиваемых приложений. |
|
|
18. | Мортон Дж. Микроконтроллеры AVR. Вводный курс. |
|
|
19. | Кравченко 10 практических устройств на AVR-микроконтроллерах. Книга 1 (с CD). |
|
|
20. | Ревич Ю. Занимательная микроэлектроника. |
|
|
|
Шкаф № В102.1 |
|
|
21. | System Application Guide (Analog Devices). |
|
|
22. | Practical Analog Design Techniques (Analog Devices). |
|
|
23. | Mixed-signal and DSP Design Techniques (Analog Devices). |
|
|
24. | Analog-Digital Conversion (Analog Devices). |
|
|
25. | Руководство пользователя сигнальными процессорами семейства SHARC ADSP-2106x. |
|
|
26. | ADSP-2100 Family. EZ-Kit Lite Reference Manual. |
|
|
27. | Гуртов В.А., Осауленко Р.Н. Физика твердого тела для инженеров. |
|
|
28. | Горелик С.С., Дашевский М.Я. Материаловедение полупроводников и диэлектриков. |
|
|
29. | Кобаяси Н. Введение в нанотехнологию. |
|
|
30. | Архитектура ЭВМ и язык ассемблера. (лекции МГУ ВМК В.Г. Баула) и другое. |
|
|
31. | Гуртов В. Твердотельная электроника. |
|
|
32. | Банах Д.Т., Джонс Т., А.Дж. Каламейя Autodesk Inventor. |
|
|
33. | Шалин П. Реестр Windows XP. Специальный справочник. |
|
|
34. | Омельченко Л., Федоров А. Самоучитель Microsoft Windows XP. |
|
|
35. | Якусевич В.В. BIOS Setup Полное руководство. |
|
|
36. | Симмонс К. Головная боль Windows XP. |
|
|
|
|
|
|
|
Шкаф № В102.2 |
|
|
37. | Волин М.Л. Паразитные процессы в радиоэлектронной аппаратуре |
|
|
38. | Барнс Дж. Электронное конструирование: методы борьбы с помехами. |
|
|
39. | Стешенко В.Б. EDA. Практика автоматизированного проектирования радиоэлектронных устройств. |
|
|
40. | Бойко В.И. и др. Схемотехника электронных систем. Цифровые устройства. |
|
|
41. | Хоровиц П., Хилл У. Искусство схемотехники. Том 3.\ |
|
|
42. | Бабич Н.П., Жуков И.А, Компьютерная схемотехника. Методы построения и проектирования. |
|
|
43. | Грушвицкий Р.И., Мурсаев А.Х., Угрюмов Е.П. Проектирование систем на микросхемах с программируемой структурой. |
|
|
44. | Угрюмов Е.П. Цифровая схемотехника. |
|
|
45. | Потапов Ю.В. Сиcтема проектирования печатных плат PROTEL. |
|
|
46. | Джексон Р.Г. Новейшие датчики. |
|
|
47. | Фрайден Дж. Современные датчики. Справочник. |
|
|
48. | Крекрафт Д., Джерджли С. Аналоговая схемотехника. Схемы, системы, обработка сигнала. |
|
|
49. | Фрике К. Вводный курс цифровой электроники. |
|
|
50. | Гадзиковский В.И. Методы проектирования цифровых фильтров. |
|
|
51. | Эннс В.И., Кобзев Ю.М. Проектирование аналоговых КМОП-микросхем. Краткий справочник разработчика. |
|
|
52. | Тревис Дж., Кринг Дж. LabVIEW для всех. |
|
|
53. | Суранов А.Я. LabVIEW 8.20: справочник по функциям. |
|
|
54. | Визильтер Ю.В., Желтов С.Ю., Князь В.А., Ходарев А.Н., Моржин А.В. Обработка цифровых изображений с примерами на LabVIEW и IMAQ Vision. |
|
|
55. | Кехтарнаваз Н., Ким Н. Цифровая обработка сигналов на системном уровне с использованием LabVIEW. |
|
|
56. | Федосов В.П., Нестеренко А.К. Цифровая обработка сигналов в LabVIEW. |
|
|
57. | Болл Б., Даф Х. Red Hat Linux 8/9. Настольная книга пользователя. |
|
|
58. | Зотов |
|
|
59. | Гук М. Аппаратные интерфейсы ПК. |
|
|
60. | Блюм П. LabVIEW: стиль программирования. |
|
|
|
|
|
|
|
Шкаф № В102.3 |
|
|
61. | Аналого-цифровое преобразование. Под ред. У. Костера. |
|
|
62. | Никамин В.А. Аналого-цифровые и цифро-аналоговые преобразователи. Справочник. |
|
|
63. | Медведев Б.Л., Пирогов Л.Г. Практическое пособие по цифровой схемотехнике. |
|
|
64. | Каплан Д., Уайт К. Практические основы аналоговых и цифровых схем. |
|
|
65. | Бойт К. Цифровая электроника. |
|
|
66. | Музылева И. Элементная база для построения цифровых систем управления. |
|
|
67. | Корис Р., Шмидт-Вальтер Х. Справочник инженера-схемотехника. |
|
|
68. | Бёрд Дж. Физика. От теории к практике. Кн. 1. Механика. Оптика. Термодинамика. |
|
|
69. | Бёрд Дж. Физика. От теории к практике. Кн. 2. Электричество. Магнетизм. |
|
|
70. | Перельройзен Е.З. Проектируем на VHDL. |
|
|
71. | Суворова Е.А., Шейнин Ю.Е. Проектирование цифровых систем на VHDL. |
|
|
72. | Бибило П.Н. Основы языка VHDL. |
|
|
73. | Потехин Д.С., Тарасов И.Е. Разработка систем цифровой обработки сигналов на базе ПЛИС. |
|
|
74. | Кнышев Д.А., Кузелин М.О. ПЛИС фирмы «XILINX»: описание структуры основных семейств. |
|
|
75. | Бибило П.Н. Системы проектирования интегральных схем на основе языка VHDL. |
|
|
76. | Бибило П.Н., Авдеев Н.А. VHDL . Эффективное использование при проектировании цифровых систем. |
|
|
77. | Мальцев П.П., Гарбузов Н.И., Шарапов А.П., Кнышев Д.А. Программируемы логические ИМС на КМОП-структурах и их применение. |
|
|
78. | Тарасов И.Е. Разработка цифровых устройств на основе ПЛИС XILINX с применением языка VHDL. |
|
|
79. | Кузелин М.О., Кнышев Д.А., Зотов В.Ю. Современные семейства ПЛИС фирмы «XILINX». |
|
|
80. | Бродин В.Б., Калинин А.В. Системы на микроконтроллерах и БИС программируемой логики. |
|
|
81. | Дьяконов В.П. Справочник по применению сиcтемы PC MatLAB. |
|
|
82. | Дьяконов В.П. MATLAB 6.5 SP1/7.0+Simulink 5/6 в математике и моделировании. |
|
|
83. | Юкио Сато. Обработка сигналов. Первое знакомство. |
|
|
84. | Семенов Б.Ю. Шина I2C в радиотехнических конструкциях. |
|
|
85. | Ёсикадзу Суэмацу. Микрокомпьютерные системы управления. Первое знакомство. |
|
|
86. | Кечиев Л.Н. Проектирование печатных плат для цифровой быстродействующей аппаратуры. |
|
|
87. | Немудров В., Мартин Г. Системы-на-кристалле. Проектирование и развитие. |
|
|
88. | Ватанабэ М. Проектирование СБИС. |
|
|
89. | Соловьев В.В. Проектирование цифровых систем на основе программируемых логических интегральных схем. |
|
|
90. | Поляков А.К. Языки VHDL и VERILOG в проектировании цифровой аппаратуры. |
|
|
91. | Грушвицкий Р.И., Мурсаев А.Х., Угрюмов Е.П. Проектирование систем на микросхемах с программируемой структурой. |
|
|
92. | Джонсон Г., Грэхем М. Конструирование высокоскоростных цифровых устройств: начальный курс черной магии. |
|
|
93. | Джонсон Г., Грэхем М. Высокоскоростная передача цифровых данных: высший курс черной магии. |
|
|
94. | Титце, Шенк в 2-х т. |
|
|
95. | Волович Схемотехника аналоговых и аналого-цифровых электронных устройств. |
|
|
96. | Бибило Основы языка VHDL. |
|
|
97. | Казеннов Г.Г. Основы проектирования интегральных схем и систем. |
|
|
98. | Эннс В.И., Кобзев Ю.М. Проектирование аналоговых КМОП-микросхем. Краткий справочник разработчика. (еще раз) |
|
|
99. | Алексеенко А.Г. Основы микросхемотехники. |
|
|
100. | Коледов Л.А. Технология и конструкции микросхем, микропроцессоров и микросборок. |
|
|
101. | МОП-СБИС. Моделирование элементов и технологических процессов. Под ред. Р.А. Суриса. |
|
|
102. | Кунву Ли Основы САПР. |
|
|
103. | Хайнеман Р. PSPICE. Моделирование работы электронных схем. (c CD) |
|
|
Что такое VHDL?
Теперь, прежде чем вдаваться в подробности о VHDL, давайте сначала посмотрим, как и почему возникла необходимость в VHDL.
Почему именно VHDL?
Преимущества VHDL
Краткая история происхождения VHDL
Теперь, когда мы получили достаточно информации о VHDL, давайте продолжим проектирование цифровых схем с использованием VHDL.
Здесь еще раз, прежде чем двигаться дальше, я советую всем вам прочитать две очень хорошие книги по VHDL.
Эти книги предоставят вам полную информацию о VHDL и послужат вашим спутником в вашем путешествии по изучению VHDL. Приведенная выше информация также была взята из этих двух книг. Я также советую вам постоянно ссылаться на эти книги по мере того, как вы продвигаетесь дальше с этой серией руководств по VHDL.
Итак, я думаю, теперь вы все очень взволнованы изучением VHDL. Давайте сначала посмотрим, как спроектировать цифровую схему с использованием средств VHDL: « Каков поток проектирования VHDL?»
Расчетный поток VHDL
Это поток проектирования цифровой схемы с использованием VHDL. Поскольку VHDL также является одним из видов языков программирования, он также имеет свою программную структуру (аналогичную другим языкам программирования, таким как структура программы C). Итак, в качестве следующего шага давайте узнаем, что такое структура программы VHDL?
Структура программы VHDL
Структура программы VHDL такая:
Декларация библиотеки:
БИБЛИОТЕКА ieee
ИСПОЛЬЗУЙТЕ ieee.std_logic_1164.all
Декларация юридического лица:
Архитектура:
На этом завершаются основы VHDL, процесс его проектирования и структура программы.В следующем руководстве мы увидим различные программы VHDL для цифровых схем и разные стили моделирования для программ VHDL.
VHDL — это язык описания оборудования (HDL). HDL немного похож на язык программирования, но имеет другое назначение.Вместо того, чтобы использоваться для разработки программного обеспечения, HDL используется для определения компьютерного чипа. VHDL может использоваться для описания любых типов схем и часто используется при проектировании, моделировании и тестировании процессоров, ЦП, материнских плат, FPGA, ASIC и многих других типов цифровых схем.
Имя VHDL — это вложенная аббревиатура. Это означает VHSIC Hardware Description Language . VHSIC означает Very High Speed Integrated Circuit . Помимо описания быстрого процессора, это было название программы правительства США в 1980-х годах, миссией которой были исследования и разработки в области очень быстродействующих интегральных схем (быстрых компьютерных микросхем).
Наряду с крупными достижениями в области материаловедения, алгоритмов, дизайна микросхем, литографии и десятка других связанных областей, VHSIC разработал VHDL.
Первый официальный стандарт языка был разработан IEEE в 1987 году и известен как IEEE 1076. С тех пор было выпущено несколько редакций, последняя из которых вышла в 2008 году. В дополнение к «базовому» языку, указанному в 1076, существует — это ряд расширений, кодифицированных в других спецификациях:
VHDL был основан на Ada и широко заимствован из него как в синтаксисе, так и в концепциях.Затем это было дополнено концепциями, специфичными для оборудования, такими как многозначная логика, физический параллелизм и расширенный набор логических операторов. VHDL также может индексировать массивы как в возрастающем, так и в убывающем порядке, тогда как Ada (как и большинство других языков программирования) индексирует только в возрастающем порядке.
Большинство языков программирования, по сути, являются процедурными — компьютер последовательно выполняет одну команду за другой. VHDL другой. Это аппаратный язык, описывающий (реальную или смоделированную) физическую структуру.Эта структура состоит из большого количества модулей, и каждый модуль действует одновременно с любым другим модулем.
Итак, внутри каждого модуля есть процедурный поток инструкций, который чем-то похож на небольшую автономную программу — с переменными, потоками управления, условными операторами, циклами. Каждый модуль имеет один или несколько входов, а также один или несколько выходов. Входные данные указываются в структуре, называемой объектом , а автономная логика определяется в архитектуре .
Рассмотрим идею «логического элемента И», где у нас есть два входа и один выход. Если оба входа «включены» (истина, 1), то выход «включен»; в противном случае выход «выключен». Таким образом, используя VHDL, мы определяем два входа и один выход. Допустимые значения этих входов и выходов будут определены в модуле std_logic
, который импортируется как библиотека на обычном языке программирования. Затем архитектура определит внутреннюю работу нашего «логического элемента И», чтобы он работал так, как мы только что обсудили.
Модуль std_logic
представляет собой интересный аппаратно-зависимый тип значения. Оно похоже на значение BOOLEAN, присутствующее в языках программирования (один бит: истина или ложь), но может иметь диапазон значений, поскольку представляет собой фактический электрический импульс в физической системе:
U
: не инициализировано. Этот сигнал еще не установлен. X
: неизвестно. Невозможно определить это значение / результат. 0
: логика 0 1
: логика 1 Z
: высокий импеданс Вт
: слабый сигнал, не могу сказать, должен ли он быть 0 или 1. L
: Слабый сигнал, который, вероятно, должен перейти на 0 H
: Слабый сигнал, который, вероятно, должен перейти на 1 -
: Неважно.Так в миниатюре создается полный дизайн VHDL. Достаточно простые, логически автономные модули операций ввода-вывода создаются и соединяются друг с другом, образуя вычислительные машины, способные выполнять различные типы задач. Дизайн VHDL может описывать полностью функционирующий компьютер общего назначения или кодировать единственный алгоритм, такой как доказательство работы методом грубой силы, используемое для майнинга биткойнов.
Важно понимать, что дизайн VHDL — это не программа — она не запускается и не выполняется. Как план, он определяет архитектуру. Как только проект завершен, он обычно моделируется для тестирования в программном тестовом стенде, а затем синтезирует , что означает, что он преобразуется в физический дизайн, который может быть реализован на реальной микросхеме или печатной плате.
Ресурсов для изучения VHDL очень много.Мы собрали одни из лучших.
Все эти книги посвящены VHDL:
Основным конкурентом VHDL является Verilog. Оба языка используются для проектирования оборудования, поэтому существует ряд книг, в которых основное внимание уделяется базовым концепциям проектирования и разработки и используется как VHDL, так и Verilog.
VHDL — один из двух основных языков описания оборудования. Другой — Verilog. Большинство разработчиков оборудования знакомы с обоими языками, а также с языками операционных систем низкого уровня, такими как Cand C ++.
В первой части этой серии статей мы сосредоточились на дизайне оборудования, включая некоторые определения VHDL для характеристик ввода / вывода части CPLD.В части 2 мы описали логику VHDL CPLD для этой конструкции. В части 3 мы покажем весь проект VHDL и связанные с ним тесты, используемые для доказательства того, что мы действительно разработали то, что мы начали проектировать.
Во-первых, давайте соберем все части предыдущего дизайна в единый список. Это дает нам отличный обзор дизайна и помогает нам разработать стратегию тестирования. Вот полный дизайн нашего механизма сбора данных:
Исходя из приведенного выше кода, среда Xilinx ISE упрощает создание базовой структуры для кода тестовой среды.Чтобы начать процесс, выберите «Новый источник» в пунктах меню «Проект». Это запускает «Мастер нового исходного кода». В мастере выберите «VHDL Test Bench» и введите имя нового модуля (нажмите «Далее», чтобы продолжить). Затем «Мастер создания нового источника» позволяет вам выбрать источник для связи с новым источником (в данном случае «acpeng» из приведенного выше кода VHDL), а затем нажать «Далее». Затем мастер создает необходимую структуру для модуля тестового стенда (см. Ниже).
Приведенная выше структура включает большую часть кода, необходимого для нашего тестового стенда.Он включает в себя раздел объявления компонента (строки 19–38), объявления и инициализации входного сигнала (строки 41–48), объявления вывода (строки 50–59) и создание экземпляра тестового компонента (строки 67–85). Фреймворк также содержит некоторые стандартные процессы для наших двух часов (Mclk — строки 87-94 и Sclk — строки 96-102, плюс определяет тактовые частоты — строки 62-63) и тупиковую версию процесса стимула (tim_proc: process — строки 105-118), которые будут использоваться для создания необходимых стимулов для тщательного тестирования нашего дизайна.
Этот фреймворк дает нам хорошую отправную точку для создания нашего полного тестового стенда. Мне нравится начинать разработку своего испытательного стенда с изучения основ, а затем расширять генерацию стимулов до тех пор, пока мы должным образом не протестируем нашу конструкцию. Мои первые шаги обычно сосредоточены на генерации часов. Для этого нам нужно будет настроить некоторые константы, чтобы они соответствовали нашим целевым тактовым частотам, а также некоторые незначительные изменения, чтобы мы могли подавить тактовую частоту SPI (Sclk) для времени, когда мы передаем или получаем данные от устройств SPI.
Это достаточно просто. Приведенные выше операторы изменяют тактовую частоту Master (Mclk) и тактовую частоту SPI (Sclk) на их соответствующие частоты (8 МГц и 10 МГц). Теперь нам нужно немного изменить логику генерации тактовых импульсов SPI. Сначала нам нужно создать два сигнала, чтобы помочь в логике стробирования. Первый сигнал, Sclk_inh, используется для включения и отключения синхросигнала. Второй сигнал, Sclk_raw, представляет собой замещающий тактовый сигнал. Мы будем генерировать стробируемый тактовый сигнал с помощью Sclk_raw, который будет назначен нашему входу Sclk для нашего UUT (тестируемого устройства).
Определив новые сигналы, мы теперь можем изменить логику в нашем Sclk_process. В этом процессе мы создадим непрерывный тактовый сигнал с помощью Sclk_raw, который переключается каждую половину периода Sclk_period, генерируя свободно работающие тактовые импульсы 10 МГц. Наряду с этой последовательностью генерации тактовых импульсов мы создаем вход Sclk, объединяя наш сигнал Sclk_raw с сигналом Sclk_inh. Таким образом, всякий раз, когда Sclk_inh установлен на «1», Sclk будет переключаться на 10 МГц, в противном случае он будет удерживаться на «0».Мы будем использовать сигнал Sclk_inh в нашем процессе optim_proc для синхронизации данных SPI на нашем устройстве и из них.
Теперь нам нужно создать процесс для генерации смоделированных данных АЦП для нашей конструкции. Для этой задачи нам нужен счетчик, чтобы отслеживать данные, которые должны быть отправлены из нашего моделирования АЦП (ADCcount). Затем нам нужно создать процесс для обработки генерации строки ADC_Data. В процессе мы ждем нарастающего фронта ADC_LRCK (левый / правый тактовый сигнал АЦП — строка 109).Мы используем этот нарастающий фронт для инициализации как нашего сигнала ADCcount значением обратного отсчета для последовательности генерации данных АЦП (32 или «10000» в двоичном формате в строке 110), так и ADC_Data равным «1» (строка 111). Затем мы ждем спада сигнала ADC_LRCK (строка 112). Оттуда мы входим в цикл, в котором сгенерируем простое переключение строки ADC_Data для нашей симуляции (строка 114). Установив сигнал ADC_Data, мы ждем, пока спад ADC_BCK не ускорит нас до следующего цикла (строка 115).В строке 116 мы уменьшаем значение ADCcount, которое проверяется в строке 113, чтобы определить, когда мы сгенерировали достаточно данных для моделирования реакции нашего АЦП на последовательность сигналов ADC_LRCK и ADC_BCK (вы можете вернуться к I2S / SPI Сроки для формата DSP и nvSRAM запишите диаграмму из части 2 этой статьи, чтобы просмотреть желаемую последовательность АЦП) .
Хорошо, теперь нам нужно соединить все части вместе и начать что-то делать, но сначала давайте составим план атаки на то, как протестировать устройство.Мне нравится начинать любой тест с импульса сброса (от высокого к низкому, с последующим возвратом к высокому) и короткой задержки (давая нам шанс увидеть, что наш главный конечный автомат — Eng_State находится в состоянии ожидания до тех пор, пока не будет получена команда). Затем мы должны отправить команду SPI, чтобы установить размер выборки и запустить последовательность сбора. Остальные просто ждут, пока не запустится сборка пакетов. Это примерно все, что нужно для проверки базовой функциональности устройства. Конечно, мы могли бы добавить дополнительный тест для выполнения всех подсчетов размера выборки (от 1 до 127), но на данный момент этого должно быть достаточно.
Итак, быстро пройдя через это, строки 124-157 заменяют старое тело процессаtim_proc. Как и планировалось, у нас есть короткая последовательность сброса и удержания (строки 124–130) и последовательность команд SPI для установки счетчика выборки на единицу и установки флага «Выполнить» (строки 132–157).
Теперь мы можем приступить к просмотру данных моделирования. Запустив моделирование и зафиксировав первые 2,5 мкс, мы можем изучить эффекты импульса сброса и команды SPI.
Давайте начнем с изучения двух наших бесплатных тактовых сигналов (mclk и sclk_raw), чтобы убедиться, что они были сгенерированы правильно. Для mclk мы видим, что сигнал завершает 4 цикла за первые 500 нс, что дает нам период 500 нс / 4 или 125 нс, что дает нам частоту 8 МГц. Хорошо, пока у нас есть одна правая. Для sclk_raw мы видим, что сигнал завершает 5 циклов за первые 500 нс, что дает нам период 500 нс / 5, 100 нс, что дает нам частоту 10 МГц.Хорошо, двое на двоих. Глядя на сигнал sclk, который является логическим И для sclk_raw и sclk_inh, мы видим, что в течение первых 1000 нс трасс этот sclk постоянно низкий. На данный момент это то, что мы хотим.
Теперь давайте посмотрим, как на дизайн влияет линия сброса. На графиках выше сигнал сброса начинается с установленного уровня (низкий), через 100 нс он сбрасывается, повторно утверждается еще через 100 нс и затем окончательно отпускается. При просмотре первых 500 нс ни одна из трасс (кроме mclk и sclk_raw) не меняется.Это показывает нам две вещи: во-первых, сброс не имел реального эффекта, не было разницы между нашим состоянием включения и нашим состоянием сброса. Это также показывает, что сигнал adc_bck (который является младшим битом seqcount, удерживается на низком уровне во время сброса). После сброса сброса и завершения двух циклов mclk adc_bck начинает переключаться (с частотой 2 МГц).
Хорошо, теперь, чтобы сдвинуть дело с мертвой точки, нам нужно отправить на устройство команду SPI с установленным битом «RUN», чтобы начать пакет сбора данных. Для этого нам нужно выбрать часть (CS = ’10’) и предоставить правильные данные и тактовые последовательности (Примечание: поскольку линия CS установлена на «10», линия SDO переходит из трех состояний в состояние Low, текущее состояние флага Run).Итак, на отметке 1.1us (800ns после сброса линии сброса, строки 130-132 нашего тестового стенда) устройство выбрано. Через 100 нс линия данных SPI (sdi) устанавливается на высокий уровень. Это будет старший бит команды SPI или наш бит RUN. После 50 нс сигнал sclk_inh повышается до «1», что позволяет генерировать импульсы Sclk (8 импульсов от 1,3 до 2,05 мкс). Отсюда тестовый стенд будет использовать границы sclk, чтобы мы могли синхронизировать изменения строки данных SPI с sclk. После того, как сигнал Sclk перешел в высокий уровень, а затем в низкий (строки 137-138), мы очищаем сигнал SDI, готовясь отправить шесть нулей на периферийную защелку SPI (старшие биты CycleCnt).Затем испытательный стенд ожидает в течение шести циклов Sclk (строки 140–151, фиксируются старшие биты CycleCnt). После шести циклов Sclk SDI переводится в «1», чтобы установить младший бит регистра CycleCnt. Теперь мы ждем еще один импульс Sclk, а затем очищаем строку sclk_inh (строки 153-155), отсекая генерацию импульса Sclk. Чтобы завершить последовательность записи SPI, мы ждем 250 нс и повторно устанавливаем строки CS в состояние «без выбора» или «11» (строки 156-157 @ 2.3 нас).
Просматривая до сих пор трассировки, есть несколько вещей, на которые следует обратить внимание: 1) тактовые импульсы на линии Sclk передаются через устройство на линию Eng_Sck (здесь нет проблем, поскольку и ADC_CS, и nvSRAM_CS находятся на высоком уровне), 2) все данные в линии SDI передаются в линию Eng_So.Ни то, ни другое не является реальной проблемой. Код VHDL мог бы подавить сигналы Eng_Sck и Eng_So во время обмена данными с периферийной защелкой SPI внутри устройства, но это добавило бы сложности конструкции и, возможно, увеличило бы использование ресурсов в CPLD (всегда приятно иметь немного лишних ресурсов на случай, если вам понадобится внести изменения в будущем). Еще одна заслуживающая внимания вещь происходит прямо перед тем, как мы входим в состояние «без выбора» на линиях CS, при 2,25 мкс линия SDO переходит в высокий уровень (прямо перед тем, как вернуться в три состояния).Пока устройство находится в состоянии фиксации внутреннего периферийного SPI (CS = ’10’), линия SDO постоянно управляется с состоянием флага Run. Поскольку мы только что закончили посылать команду «Выполнить» детали, мы видим эффект этой команды, который теперь вызывает повышение уровня линии SDO. Это показывает нам, что устройство фактически распознало нашу команду и готовится начать цикл сбора данных.
На этом этапе код тестовой среды находится в стадии «ждать вечно», ожидая, пока устройство завершит последовательность сбора данных.Итак, давайте посмотрим дальше во времени и посмотрим, правильно ли работает устройство. Теперь давайте немного уменьшим масштаб и рассмотрим запись «заголовка» в микросхему nvSRAM.
«Заголовок» — это не что иное, как начальная часть последовательности записи в пакетном режиме для нашего устройства nvSRAM. Последовательность представляет собой 8-битный код операции записи (‘00000010’b), за которым следует выровненное по правому краю 24-битное адресное поле (7 нулей, за которыми следует 17-битный начальный адрес nvSRAM, равный нулю).Изучая приведенные выше трассировки, начиная с ~ 2.25us, мы видим, что строка nvSRAM_CS переходит в состояние выбора (‘0’). Так будет на протяжении всей остальной последовательности сбора данных. Вскоре после того, как nvSRAM_CS переходит в низкий уровень, мы видим 32 импульса сигнала Eng_Sck вместе с данными nvSRAM с шестью нулями, единицей и еще 19 нулями (измеренными на переднем фронте Eng_Sck).
Теперь давайте посмотрим на первую последовательность примеров АЦП. Здесь стробируется АЦП (ADC_LRCK), за которым следует серия последовательных битовых тактовых импульсов (ADC_BCK).
Увеличив масштаб для более подробной информации о сигналах АЦП (ниже), мы можем увидеть начало цикла АЦП. На заднем фронте ADC_BCK ADC_LRCK переходит в высокий уровень, а затем возвращается в низкий уровень на следующем заднем фронте ADC_BCK. В этот момент первый бит данных АЦП (MSB левого канала) присутствует в строке Eng_So (в данном случае «0»). Чтобы синхронизировать бит данных АЦП в nvSRAM, он должен быть стабильным для нарастающего фронта Eng_Sck. Пока вроде все идет правильно.На изображении выше мы можем видеть схему переключения «1» и «0» (генерируемую строками 113-117 внутри нашего процесса ADCcmp в тестовой среде). Всего в строках Eng_So и ADC_data 32 бита (16 последовательностей «0» / «1»), а также 32 цикла тактовых импульсов Eng_Sck (запись двух значений АЦП в виде четырехбайтовой записи в nvSRAM). ADC_BCK продолжает синхронизацию через кадр ADC, как подробно описано в спецификации для части ADC.
После проверки цикла АЦП мы снова уменьшаем масштаб и смотрим на полный цикл лазерного диода (ниже).В полном цикле сигнала LaserHiLow есть 16 циклов АЦП (считая импульсы ADC_LRCK).
После проверки цикла лазерного диода мы снова уменьшаем масштаб и смотрим на полный цикл сбора данных (ниже). В полном цикле сбора данных имеется 32 цикла лазерных диодов (с учетом импульсов LaserHiLow). В конце цикла сбора данных мы видим короткий высокий импульс сигнала Int (прерывание), который информирует μProcessor о завершении запрошенного цикла.
На этом этап проверки практически завершен. Вроде все заработало. Ну, в процессе был небольшой сбой, который я не заметил раньше. При тестировании заголовка nvSRAM я заметил небольшую ошибку с размещением высокого импульса на линии Eng_SO. Трассы моделирования были исправлены, но теперь мне нужно исправить источник VHDL для устройства. Итак, вот изменение:
Строки 180–184 вверху заменены на строки 180–183 внизу.Эффект изменения заключается в том, чтобы немного сдвинуть «1» в последовательности заголовков nvSRAM назад во времени. В верхней последовательности строка ENG_SO имеет высокий уровень от seqcount «001011» до «001100». В нижней последовательности линия ENG_SO имеет высокий уровень от «001100» до «001101». Кодирование нижней последовательности проще в том, что мы можем игнорировать младший бит seqcount и инициировать изменение битов с 4 на 1 (игнорируя бит 0).
Уф, я думаю, что добрался (наконец) до конца. Мы провели идею или спецификацию на этапах проектирования оборудования, кодирования VHDL и, наконец, тестирования.Я еще раз доказал себе (и, надеюсь, вам) важность тестирования. Ошибки скрываются там, все, что вам нужно сделать, это найти их и исправить.
Пока позже,
Ген
Вам также может понравиться … (продвигаемый контент)
Как уже говорили другие, вам нужно узнать о цифровом дизайне, прежде чем изучать VHDL. Но пусть это вас не пугает, это не так уж и сложно. Я считаю, что вы можете очень быстро начать работу с VHDL, если получите книги, доску и программное обеспечение, которые я рекомендую ниже.
«Цифровой дизайн» Фрэнка Вахида — отличная книга для людей, которые хотят узнать о цифровом дизайне с нуля. Мы использовали эту книгу во вводном курсе по цифровому дизайну, где мы также познакомились с VHDL. Вам не нужно глубоко копаться в этой книге, прежде чем вы сможете немного поиграть с VHDL (хотя эта книга не учит никакому VHDL) .
Я помню эту книгу как очень удобную для читателя.
http: // www.amazon.com/dp/0470044373/?tag=stackoverfl08-20
Затем вам действительно нужно купить или получить доступ к плате FPGA и некоторым учебным материалам, в которых используется и объясняется конкретная плата FPGA, которую вы выбираете.
Несмотря на то, что у меня был доступ к плате FPGA в моем университете, я решил купить плату, чтобы я мог поиграть с VHDL дома.
В университете мы использовали плату virtex-pro Spartan-3E 100 MHz (точное название не помню). А для дома я купил плату Nexys2, которая также принадлежит к семейству spartan-3E и является отличной платой для начинающих программистов ПЛИС.
http://www.digilentinc.com/Products/Detail.cfm?Prod=NEXYS2
Для VHDL мы использовали книгу Понга П. Чу «Прототипирование FPGA на примерах VHDL», которая является отличной книгой для быстрого получения некоторого опыта работы с VHDL без необходимости читать слишком много скучных страниц.
Книга также познакомит вас с программным обеспечением «Xillinx ISE».
http://www.amazon.com/FPGA-Prototyping-VHDL-Examples-Spartan-3/dp/0470185317
Для программного обеспечения мы использовали Xillinx ISE, совместимый как с Linux, так и с Windows (я использовал его в основном в Linux).В университете мы использовали старую версию Xillinx ISE, потому что новая версия не была совместима с платой virtex pro. Это было худшее программное обеспечение, которое я когда-либо использовал, оно было полно ошибок и сводило всех с ума!
НО дома и на моем ноутбуке я использовал новейшую версию Xillinx ISE, которая была великолепным программным обеспечением и не содержала досадных ошибок. Единственное, для чего я не использовал Xillinx ISE, — это перенос синтезированного VHDL (файлов .bit) на мою плату, для этого я просто использовал программное обеспечение Digilent Adept (небольшая программа, созданная Digilent, для передачи файлов и тестирование платы).Но также должна быть возможность настроить Xillinx для передачи синтезированного VHDL, если вы не такой ленивый, как я.
Итак, если вы хотите использовать Xillinx ISE, обязательно купите плату, совместимую с более новой версией Xillinx ISE, чтобы избежать лишней головной боли. Например плата Nexys2.
Мы также использовали какой-то отличный инструмент для отладки, думаю, это был ModelSim. Это также должно быть включено в загрузку веб-пакета Xillinx ISE, если я не ошибаюсь.
Ссылка на Xillinx ISE:
http: // www.xilinx.com/ise/logic_design_prod/webpack_faq.htm#2b
99,99 долл. США
Нет на складе, но можно заказать. Зависит от доступности издателя.
Эта книга помогает читателям создавать хорошие описания VHDL и моделировать проекты VHDL.Он обучает VHDL с использованием избранных примеров задач, которые решаются шаг за шагом и с точными объяснениями, так что читатели получают четкое представление о том, как должен выглядеть хороший код VHDL.
Книга разделена на восемь глав, охватывающих различные аспекты, от самых основ синтаксиса VHDL и концепции модуля до реализаций логических схем VHDL. В первой главе подробно объясняются сущность и архитектура программы VHDL. Во второй главе объясняются реализации схем комбинационной логики на языке VHDL, а в следующих главах представлена информация о моделировании программ VHDL и показано, как определять типы данных, отличные от стандартных, доступных в библиотеках VHDL.В свою очередь, пятая глава объясняет реализацию синхронизированных последовательных логических схем, а шестая показывает реализацию регистров и пакетов счетчиков. Последние две главы книги подробно описывают, как компоненты, функции и процедуры, а также числа с плавающей запятой реализованы в VHDL.Книга предлагает обширные упражнения в конце каждой главы, предлагая читателям изучить VHDL, выполнив это и написав хороший код.
Java | Универсальный, параллельный, объектно-ориентированный язык высокого уровня на основе классов |
C | Универсальный, процедурный, переносной язык высокого уровня |
Python | Универсальный, структурированный, мощный язык |
C ++ | Универсальный, переносимый, многопарадигмальный язык произвольной формы в свободной форме |
C # | Сочетает в себе мощность и гибкость C ++ с простотой Visual Basic |
JavaScript | Интерпретируемый, основанный на прототипах, язык сценариев |
PHP | PHP уже много лет находится у руля Интернета |
Ruby | Универсальный, скриптовый, структурированный, гибкий, полностью объектно-ориентированный язык |
Сборка | Как можно ближе к написанию машинного кода без записи в чистом шестнадцатеричном формате |
Swift | Мощный и интуитивно понятный язык программирования общего назначения |
Groovy | Мощный, опционально типизированный и динамический язык |
Go | Скомпилированный статически типизированный язык программирования |
Pascal | Императивный и процедурный язык, разработанный в конце 1960-х годов |
Perl | Высокоуровневый, универсальный, интерпретируемый, скриптовый, динамический язык |
R | Фактический стандарт для статистиков и аналитиков данных |
COBOL | Общий бизнес-ориентированный язык |
Scala | Современный, объектно-функциональный, мультипарадигмальный язык на основе Java |
Fortran | Первый язык высокого уровня, использующий первый компилятор |
Scratch | Язык визуального программирования для детей 8-16 лет |
Lua | Разработан как встраиваемый язык сценариев |
Logo | Диалект Lisp, который отличается интерактивностью, модульностью и расширяемостью |
Rust | Идеально подходит для систем, встраиваемых систем и других систем, критичных к производительности. Код |
Lisp | Уникальные возможности — отлично подходят для изучения конструкций программирования |
Ada | АЛГОЛ-подобный язык программирования, расширенный от Pascal и других |
Haskell | Стандартизованный, универсальный, полиморфно, статически типизированный язык |
Схема | Универсальный функциональный язык, унаследованный от Lisp и Algol |
Prolog | Декларативный язык логического программирования общего назначения |
Forth | Императивный язык программирования на основе стека |
Clojure | Диалект языка программирования Lisp |
Julia | Высокопроизводительный язык высокого уровня для технических вычислений |
SQL | Доступ и управление данными, хранящимися в системе управления реляционной базой данных |
Erlang | Универсальный, параллельный, декларативный, функциональный язык |
VimL | Мощный язык сценариев редактора Vim |
OCaml | Универсальный, мощный язык высокого уровня |
Awk | Универсальный язык, разработанный для сканирования и обработки шаблонов |
Racket | Платформа для разработки и реализации языков программирования |
BASIC | Семейство универсальных языков программирования высокого уровня |
CoffeeScript | Очень лаконичный язык программирования, транскомпилируемый в JavaScript |
LaTeX | Профессиональная система подготовки документов и язык разметки документов |
Elixir | Относительно новый функциональный язык, работающий на виртуальной машине Erlang |
Dart | Оптимизированный для клиента язык программирования для быстрых приложений |
ABAP | Расширенное программирование бизнес-приложений |
F # | Универсальный, строго типизированный, многопарадигмальный язык.Часть ML |
Chapel | Язык параллельного программирования в разработке в Cray Inc. |
Dylan | Многопарадигмальный язык, поддерживает функциональное и объектно-ориентированное программирование |
D | Язык системного программирования общего назначения с синтаксисом типа C |
Solidity | Объектно-ориентированный язык высокого уровня для реализации смарт-контрактов |
XML | Набор правил для определения семантических тегов, описывающих структуру и значение |
Vala | Объектно-ориентированный язык с автономным компилятором, который генерирует код C |
ECMAScript | Наиболее известен как язык, встроенный в веб-браузеры |
Kotlin | Статически типизированный язык программирования общего назначения с выводом типа |
TypeScript | Строгий синтаксический надмножество JavaScript, добавление необязательной статической типизации |
Markdown | Синтаксис форматирования обычного текста, предназначенный для удобства чтения и записи |
Pike | Интерпретируемый, универсальный, высокоуровневый, кроссплатформенный, динамический язык |
HTML | Язык разметки гипертекста |
Фактор | Динамический стековый язык |
Objective-C | Язык общего назначения, который является надмножеством C |
Standard ML | Один из двух основных диалектов языка ML |
Алиса | Образовательный язык с интегрированной средой разработки |
Agda | Функциональный язык с зависимой типизацией, основанный на интуиционистской теории типов |
Значок | Язык высокого уровня общего назначения |
PureScript | Маленький строго статически типизированный язык с выразительными типами |
Tcl | Динамический язык, основанный на концепциях оболочек Lisp, C и Unix |
Eiffel | Объектно-ориентированный язык |
ClojureScript | Компилятор для Clojure, ориентированный на JavaScript |
QML | Иерархический декларативный язык для макета пользовательского интерфейса с синтаксисом в соответствии с JSON |
VHDL | Язык описания оборудования высокоскоростной интегральной схемы |
OpenCL | Язык открытых вычислений |
Elm | Функциональный язык, компилируемый в JavaScript |
VHDL материал