Как получить дизайн процессора на FPGA

20

Недавно я отправился в долгий путь самообучения логической конструкции. Конечным продуктом этого является функциональный 16-битный процессор, который работает точно так же, как это было разработано в симуляторе . Сейчас я только начал изучать возможность использования кремния с помощью ПЛИС. Я знаю, что мне придется внести множество корректировок в арену ввода / вывода (реальный мир отличается от среды моделирования) и обнаружил, что я полностью разработал проект в программе, которая не экспортирует списки соединений или код HDL. так что все, что у меня есть, - это схема.

Но, если предположить, что я каким-то образом доберусь до точки, где у меня есть список соединений или код HDL моего дизайна, каков мой следующий шаг, чтобы превратить его в кремний? Из того, что я прочитал, похоже, что ПЛИС - это мое решение, но просмотр сайтов Xilinx и Altera заставляет меня кружить голову. Я лаю не на том дереве? По сути, я ищу простое английское описание следующего шага для парня с функциональной схемой процессора. Как только я знаю, в каком направлении идти, я могу взломать книги и выяснить все, что мне нужно знать о том, как туда добраться. Также обратите внимание, я нахожусь на Mac OS X, но у меня есть окно XP для Windows, которое я могу подключить, если мне это абсолютно необходимо.

Рори О'Хэйр
источник
Какая программа сделал ты свой дизайн в? Там могут быть сторонние конвертеры там.
Коннор Вольф

Ответы:

17

Поздравляю с дизайном вашего процессора. Да, FPGA , безусловно, ваш следующий шаг. Но вам не очень понятно, что заставляет вашу голову кружиться. Я предполагаю, что это большое количество различных устройств в продаже. Вы также не говорите, какой симулятор вы используете.
Когда вы синтезируете дизайн, синтезатор должен предоставить вам отчет об используемых ресурсах , таких как количество вентилей и ОЗУ. Это должно дать вам представление о том, какие детали подходят для вашего дизайна. Убедитесь, что у вас достаточно запаса . Выберите часть, которая имеет дополнительную оперативную память , которая понадобится вам для запуска программ на вашем процессоре.

редактировать (ваш комментарий)
Вам нужна система разработки для конкретного производителя. Альтера и Силинкс - крупные игроки, и у обоих есть свои верующие. Какой из них вы выбираете, не так важен, у обоих достаточно разных частей, чтобы удовлетворить ваши потребности.
Если вы выберете Xilinx, у него есть программное обеспечение ISE WebPACK Design , которое бесплатно (большая загрузка на 3,4 ГБ). Ограничения по сравнению с более продвинутыми версиями программного обеспечения не должны беспокоить вас в настоящее время.
Далее вам нужна доска для разработки. Вы должны иметь представление о том, какую ПЛИС вам нужно выбрать. Если вы идете на Xilinx, я бы выбрал спартанецМожет быть, Spartan-6, Virtex уже слишком высокого класса IMO. По-прежнему есть из чего выбирать, в основном разные дополнения на доске. Вам понадобится плата с несколькими переключателями и светодиодами. Я бы присматривал за разъемом клавиатуры и модулем дисплея.
В Xilinx есть несколько плат, а для ПЛИС Xilinx есть также Digilent , Avnet , Xess и многие другие.

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

Я забыл рассказать немного о ПЛИС. ПЛИС - это, по сути, большой набор вентилей с программируемыми связями между ними, так что вы можете создать практически любую логическую функцию / систему с ними. За несколько поколений ПЛИС стали более продвинутыми и теперь имеют оптимизированные блоки для эффективного создания таких функций, как ОЗУ. Синтезатор вашего программного обеспечения для разработки создает схему соединений между воротами. Это не хранится постоянно в FPGA, но должно быть загружено при включении питания из внешней конфигурации флэш-памяти. Вот где будет храниться ваш дизайн. Как и любая другая флэш-память, ее можно стирать и перезаписывать множество раз.

stevenvh
источник
Я использовал Logisim, который отлично подходит для схем, но в нем отсутствует метод вывода чего-либо, кроме картинок (png, jpeg и т. Д.). Что касается путаницы с ПЛИС, то это отчасти связано с огромным количеством устройств, но также я не нахожу ресурсов, объясняющих основы и основы. Если я поставлю свой процессор там, как он взаимодействует с внешним миром? Какое оборудование мне нужно? Могу ли я перепрограммировать ПЛИС повторно? и т. д. и т. д. На самом деле это просто полное отсутствие знакомства с предметом. Полагаю, мне нужен стартовый справочник, но нигде его не найти.
Рори О'Хара
2
Ваши вопросы по порядку: 1) ПЛИС взаимодействуют с внешним миром через контакты ввода / вывода. Разница в том, что вы можете выбирать контакты, в отличие от специальных чипов. 2) Вы можете начать со стартового комплекта, комплекта для разработки или подобного. Это будет иметь ПЛИС, некоторые разъемы для ввода / вывода и источники питания на плате. Большинство также включают программиста; если не забудешь получить. 3) Да, вы можете перепрограммировать ПЛИС. Программа хранится на кристалле в том, что по сути является гигантским регистром сдвига. При запуске выделенный конечный автомат или внешний источник загружает его в чип.
Майк ДеСимоне
9

Я не знаком с инструментами Xilinx, но я с инструментами Altera, поэтому я расскажу вам об их. Шилинкс и другие не должны быть слишком разными.

Verilog

Первое, что вам нужно сделать, это выучить Verilog . Это может повредить вашей голове, потому что Verilog (и несколько похожий VHDL) был изначально разработан как язык моделирования и множество конструкций (например, #5что означает «ждать 5 временных шагов», временной шаг, как правило, наносекунда). Таким образом, существует множество ограничений, которые необходимо учитывать, чтобы сделать ваш код Verilog синтезируемым , то есть компилируемым в поток битов для ПЛИС.

Однако самый большой шок заключается в том, что вы пишете в Verilog (и VHDL) поведение, которое вы ожидаете от системы , и компилятор выводит правильную логику из вашего описания. Если вы не будете осторожны, вы можете получить много неприятных ошибок от этого.

Например, D-триггер выглядит так:

always @(posedge RESET or posedge CLK)
begin
    if(RESET)
        Q <= 1'b0;
    else if(CLK_ENA)
        Q <= D;
end

Здесь описывается, как работает DFF, и компилятор должен проанализировать его и выяснить, хотите ли вы DFF. Это @(...)называется списком чувствительности , который представляет собой список сигналов, которые запускают переоценку кодового блока; таким образом, в этом блоке Qизменяется только при наличии нарастающего фронта RESETили CLK(это для сброса активного высокого уровня). Если вы что-то забудете в списке чувствительности (который должен содержать все правые переменные без каких-либо posedgeили negedgeмодификаторов для блока комбинационной логики), компилятор будет синтезировать защелки по мере необходимости, а не вызывать ошибку. Сумасшедший, но это так, потому что Verilog изначально был языком моделирования, который скрывал (и, следовательно, не требовал) детали реализации. VHDL такой же, но гораздо более многословный.

Наконец, новая версия Verilog называется SystemVerilog был выпущен несколько лет назад , что делает написание синтезируемого кода намного проще . Если возможно, выучите этот язык, поскольку Xilinx ISE и Altera Quartus II поддерживают его. Основная проблема - полное отсутствие хорошего справочного материала.

Версия DFF SystemVerilog убирает пару мелких вещей:

always_ff @(posedge RESET, posedge CLK)
begin
    if(RESET)
        Q <= '0;
    else if(CLK_ENA)
        Q <= D;
end

Обратите внимание, что сигналы в списке чувствительности разделены запятыми. Это потому, что orсбивает с толку, так как andне мог работать там. Также обратите внимание на замену 1'b0(одного 0бита) на '0(символ, который расширяется до необходимого количества 0битов в зависимости от того, для чего он назначается; гораздо более гибкий с параметризованными модулями). Наконец, обратите внимание на замену always(которая может использоваться для чего угодно; комбинационная логика, защелки и триггеры), для always_ffкоторой требуется синтезировать содержимое в триггеры. Также есть список, always_combкоторый исключает список чувствительности, поскольку он просто определяет чувствительность от входов к блоку.

Программное обеспечение для проектирования Altera называется Quartus II, и вы будете искать Web Edition . (Подписные издания довольно дороги и нужны только для самых быстрых или самых последних моделей FPGA.)

Грустная часть в том, что я не нашел хорошую книгу на эту тему. То, что я узнал, я собрал воедино из нескольких источников, таких как книги Verilog, которые не очень хорошо рассказывают, что можно синтезировать, а что нет, и пример кода. В Quartus II есть команда «вставить шаблон», которая вставляет код шаблона для нескольких общих структур, от D-триггеров до конечных автоматов.

Демо-оборудование

После того, как вы внедрили свой процессор в Verilog, вам нужно его собрать. В настоящее время пусть Quartus выберет чип (вам нужно выбрать семейство; я бы порекомендовал Cyclone IV) и распиновку. Как только он наберется, вы узнаете, сколько чипа вам нужно. Он сообщит вам, сколько логических элементов, триггеров, битов ОЗУ и т. Д. Вы использовали. Убедитесь, что вы не более 50% на любой из них; если это так, посмотрите на микросхему, которую выбрал компилятор, и вручную выберите следующую большую (в логических элементах) микросхему, которая имеет как минимум столько же контактов, и повторяйте, пока вы не получите коэффициент использования менее 50%.

Затем идите в магазин за демонстрационной платой, в которой есть чип по крайней мере такой же большой, как тот, который вы наконец-то собрали. Убедитесь, что у вас есть периферийные устройства и / или разъемы ввода / вывода, которые вам понадобятся. Нередко создается дочерняя плата, которая подключается к разъему расширения для обеспечения недостающего оборудования.

Теперь, когда вы выбрали свое оборудование, выясните реальные распиновки и используйте планировщик выводов, чтобы поставить правильные сигналы на правильные выводы. На демонстрационной плате будет руководство пользователя, в котором будет указано, какие выводы подключены к каким устройствам или контактам разъемов на демонстрационной плате.

После того, как вы установили распиновку, создайте ее заново, чтобы она использовала нужные вам выводы. Имейте в виду, что некоторым сигналам, таким как системные часы, потребуются специальные входные контакты (поэтому они направляются прямо на внутренние ФАПЧ).

Используйте программатор для загрузки вашего дизайна прямо в FPGA (тот сдвиговый регистр, о котором я упоминал некоторое время назад). Теперь вы находитесь в привычном цикле отладки edit-compile-run. Удар по нему, пока он не работает.

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

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

Удачи!

Майк ДеСимоне
источник
Отлично, это очень полезно. Просто чтобы проверить одну вещь, я слышал о схематическом захвате. Это реальная альтернатива обучению verilog? Я научусь этому, если придется, но если в этом нет необходимости на 100%, я бы не стал добавлять его в огромный список вещей, которые мне уже нужно выяснить. Спасибо большое.
Рори О'Хара
Честно говоря, не совсем. Одна большая проблема заключается в том, что вы находитесь в зависимости от программы захвата схемы: если она берет вашу схему и генерирует неверный Verilog, что вы можете сделать? Принимая во внимание, что написание Verilog даст вам необходимые полномочия для исправления всех ошибок. Основная причина, однако, заключается в том, что есть вещи, которые схематический захват никогда не будет делать так же хорошо, как Verilog: параметризованные модули, разделение и объединение шин - это те, которые сразу же приходят на ум.
Майк ДеСимоне
1
Существуют ли какие-либо инструменты, которые могут превратить немного более «описательный» аппаратный язык в Verilog или VHDL (например, если я хочу, чтобы net Z был триггером, чей ввод данных представляет собой комбинацию A, B и C, которая асинхронно сбрасывается при C и D верны, было бы неплохо иметь возможность сказать что-то вроде, Z:= A & (B # C); Z.ar = C & D;не беспокоясь о списках чувствительности и тому подобном).
Суперкат
Altera Quartus позволяет вам вводить свой дизайн в виде схемы или AHDL (версия VHDL от Altera) или любой их комбинации, возможно, включая другие HDL. (будучи старомодным, я в основном использовал схематический ввод для своих проектов CPLD и FPGA с небольшим AHDL.)
Питер Беннетт
Просто чтобы быть ясно, AHDL не является версией VHDL. И VHDL, и Verilog являются языками логического вывода , где ваш код описывает поведение желаемой схемы, и компилятор должен вывести реализацию из этого поведенческого описания. Это наследие того факта, что оба начинали как языки симуляции и были повторно использованы для синтеза. AHDL - это декларативный язык, где вы объявляете примитивы (например, триггеры, таблицы истинности) и то, как они связаны, так что компилятору не нужно угадывать. AHDL восходит к 80-м годам и намного ближе к ABEL.
Майк ДеСимон
5

Да, FPGA - это почти наверняка ваше решение!

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

  1. поставщики инструментов ПЛИС не очень хорошо их поддерживают
  2. Это не портативный

После того, как вы написали HDL, если вы не будете напрямую вставлять вещи из библиотеки поставщиков с помощью их различных «мастеров IP» или напрямую вставлять компоненты из их библиотек, у вас будет код, который вы сможете честно портировать на другие чипы. легко (гораздо больше, чем, например, портирование встроенного C IME)

Кроме того, у вас есть намного лучшая среда для тестирования и проверки, поскольку вы можете писать тесты, которые «понимают» вашу функциональность и могут проверить результаты для вас, а не смотреть на сигналы, чтобы увидеть, все ли выглядит хорошо.

Большие 2 ЛПВП - это VHDL и Verilog. Вы можете прочитать этот ответ о том, как они отличаются ...

VHDL или Verilog?

Я также сказал бы, что MyHDL также стоит посмотреть, если вы уже знаете Python - дает вам огромную возможность проверки, но все же большую часть низкоуровневого контроля, который дает «нормальный» HDL.

После того, как вы выберете HDL, а затем начнете работать (опять же, извините!) В симуляции, вы окажетесь в состоянии, в котором вы можете протолкнуть его через инструменты вендора и изучить следующий большой кусок задачи - после того, как он симулирует правильно, всегда есть больше усилий, чем вы думаете, чтобы это синтезировать :)

Если вы знакомы со схемами и можете получить лицензию, LabviewFPGA может вам подойти.

Мартин Томпсон
источник
3

Получите копию Быстрого Прототипирования Цифровых Систем Хэмблена и др .:

http://users.ece.gatech.edu/~hamblen/book/bookte.htm

В основном используется VHDL, который я предпочитаю Verilog.

Он включает в себя очень простой 8-разрядный процессор uP3, который я реализовал на своем собственном оборудовании Altera FLEX 10K несколько лет назад, используя более раннее издание книги. Я перенесу его на эту плату Cyclone II за 25 долларов, когда получу свою «лицевую панель» PCB. Он также включает в себя процессор MIPS и Altera NIOS II. Вы можете выполнить упражнения uP3, описанные в книге, с помощью бесплатных инструментов Altera Quartus II, переписать код своего процессора в VHDL и заставить его работать на плате Cyclone II. В качестве альтернативы, Quartus II имеет схему ввода, и вы должны иметь возможность непосредственно вводить схему, моделировать ее и запускать на Cyclone II.

Леон Хеллер
источник
1

Если сложность - крутая кривая обучения с инструментальными навыками, то следуйте по самому легкому пути. Актел (сейчас Микросеми) имеет Libero , пакет инструментов FPGA, которые требуют нулевого чтения и которыми легко начать пользоваться: сразу после установки. На самом деле вы можете создавать схемы там вручную, и с помощью нескольких щелчков мышью они загружаются в физическую ПЛИС, и экраны на пути к этому очень самоочевидны.

dext0rb
источник
0

Если вы решите изучать язык ЛПВП, то, где вы находитесь, может повлиять на то, какой язык лучше. В Европе VHDL более популярен. В США Verilog более популярен, за исключением оборонной промышленности, которая является VHDL. (Министерство обороны США первоначально создало VHDL) Это означает, что люди, находящиеся рядом с вами, могут лучше помочь на одном или другом языке. Но если вы ищете помощь онлайн, то это может быть неактуально.

Другие книги для рассмотрения - « Быстрое прототипирование цифровых систем: издание SOPC», которое относится к платам Altera DE1 и DE2. Уже есть несколько различных компьютеров, портированных на DE1 и DE2, чтобы дать вам идеи, как они работают. Minimigtg68 (Amiga), FpgaGen (Sega Genesis) и т. Д. Перенесены на эту доску, чтобы посмотреть примеры.

Если ты пойдешь в Силинкс, сейчас я вхожу в две книги. Прототипирование ПЛИС от Verilog Примеры: версия Xilinx Spartan-3 Прототипирование ПЛИС от VHDL Примеры: Версия Xilinx Spartan-3 Хотя я не знаю какой-либо конкретной платы, чтобы рекомендовать их. Я с нетерпением ожидаю появления скорой платы FPGA Arcade, но забываю, будет ли на ней Xilinx или что-то еще.

billt
источник
0

Нашел этот вариант, что является дальнейшим развитием Logisim, теперь называется Logisim Evolution. Они реализовали функцию экспорта в VHDL из схем логической схемы, встроенной в logisim.

Его можно найти здесь: https://github.com/reds-heig/logisim-evolution

Знаю, что этот вопрос старый, но он помог мне кучу, и надеюсь, что это поможет кому-то еще.

LaptonSpark
источник