Когда я подхожу к проблеме в C ++ или python, существует много библиотек, которые выполняют тяжелую работу над моим кодом. Я думаю о GNU GSL , BOOST или FFTW для C ++ и NumPy или SciPy для Python. Во многих отношениях тот факт, что эти ресурсы существуют, делает кодирование на этих соответствующих языках полезным, поскольку библиотеки не позволяют вам переписывать все низкоуровневые вещи с нуля.
Стандартные библиотеки IEEE, кажется, охватывают только самые основы, такие как типы данных (что-то вроде стандартных библиотек C).
Похоже, что в VHDL вы можете купить / найти некоторые «IP-ядра», которые решат проблему, вместо использования библиотеки с открытым исходным кодом. В Python, если я хочу поговорить с последовательным устройством, я просто import serial
и я в основном закончил. В VHDL я либо застрял бы в написании последовательного протокола с нуля, либо мне пришлось бы гуглить по различным репозиториям, пока я не нашел кого-то, кто произвел что-то подобное. Я бы тогда вставлял кусочки кода в свой проект, а не просто включал что-то и вызывал это. Аналогичным образом, если я хочу выполнить БПФ, я могу найти примеры БПФ в VHDL через Google, но не существует чего-то простого, такого как FFTW, которое я могу найти.
Существуют ли какие-либо всеобъемлющие библиотеки с открытым исходным кодом, которые я могу импортировать в свои проекты? Почему каждый, кажется, катит свой собственный код для стольких вещей?
Ответы:
Я разработчик и сопровождающий в библиотеке PoC . Мы стараемся предоставить такую библиотеку, состоящую из пакетов (коллекция новых типов и функций) и модулей. Он поставляется с обычными вычислениями, арифметикой, кросс-тактовыми компонентами, низкоскоростными компонентами ввода-вывода и стеком Ethernet / IP / UDP (следующий выпуск).
Как описано в @crgrace, довольно сложно создавать модули, которые:
Наша библиотека имеет внутренний механизм настройки (PoC.config), позволяющий различать поставщиков, устройства и даже подсемейства устройств, чтобы выбрать правильный код или оптимизированную реализацию. Он также различает синтез и код моделирования в некоторых точках.
Например,
PoC.fifo_cc_got
FIFO с интерфейсом «общие часы» (cc) и положил / получил сигналы для управления fifo. Fifo настраивается по ширине, глубине, битам состояния заполнения и типу реализации. Можно выбрать тип реализации RAM на основе LUT или On-Chip-RAM (ocram). Если этот fifo синтезирован с опцией ocram для Altera, он использует altsyncram; если выбран Xilinx, он использует общее описание BlockRAM и реализует арифметику указателей с помощью явной инстанцирования переноса (Xilinx XST не находит оптимального решения, поэтому это делается вручную).Есть 2 других типа fifo с интерфейсом «зависимые часы» (dc) и независимые часы (ic). Поэтому, если требуется переключиться с обычного fifo на поперечный fifo (PoC.fifo_ic_got), измените имя объекта, добавьте часы и выполните сброс для второго домена часов, вот и все.
Я думаю, это доказывает, что можно писать общие модули, которые работают на разных платформах и компилируются в разных инструментах (Spartan-> Virtex, Cyclone -> Stratix; ISE, Vivado, Quartus).
Помимо PoC, есть и другие библиотеки с открытым исходным кодом:
В «Discover Free и Open Source Кремний» ( Fossi проекты) на GitHub предлагает просматриваемую базу данных всех проектов GitHub , которые в основном используют VHDL , Verilog , SystemVerilog или любой другой важный язык описания аппаратных средств ( ЛВП ).
Смотрите также:
источник
Библиотеки с открытым исходным кодом, как вы описываете, не будут столь же полезны для VHDL или Verilog, как для языка программирования общего назначения. Это потому, что то, как вы реализуете данную функцию, может очень сильно зависеть от того, что вы пытаетесь сделать. Код, который хорош для FPGA и, вероятно, не так хорош для ASIC, и наоборот.
Кроме того, поскольку мы описываем аппаратное обеспечение, функция, которая выполняет БПФ, потребует такой специфики, как ширина слова и тактовая частота и стратегия сброса, чтобы связать вам руки и ограничить весь ваш дизайн. Если бы вы сделали функцию очень гибкой, это привело бы к огромным накладным расходам.
Наконец, посмотрите на размер вашего исполняемого файла, например, когда вы включаете много библиотек в C. Там есть куча раздувания. Это не имеет значения для разработки программного обеспечения (большую часть времени), но очень важно для FPGA и особенно для разработки ASIC. Нет смысла синтезировать кучу накладных расходов, которые вам не нужны.
Итак, суть в том, что таких библиотек нет, и ваш нынешний подход обоснован.
источник
VHDL и Verilog являются описательными языками и описывают аппаратные блоки. Последовательный драйвер в C ++ может переводиться в Serial IP в VHDL / Verilog.
opencores.org - самая большая на сегодняшний день база данных с открытым исходным кодом.
Для облегчения процесса поиска, загрузки и просмотра кода (через Github) вы можете использовать этот современный интерфейс:
http://freerangefactory.org/cores.html
Если, например, вы ищете серийный номер, вы можете оказаться здесь:
http://freerangefactory.org/cores/communication_controller/serial_uart_2/index.html
и непосредственно перейти к коду в GitHub. Там вы увидите, что вы можете довольно легко создать экземпляр последовательного модуля, подключить к нему собственную схему и начать отправку и получение данных. Это так же просто, как последовательные библиотеки в C ++.
Надеюсь, это поможет.
источник
Первый сайт, на который я захожу для такого рода вещей (как упомянул @MarkU) - opencores.org.
Например, существует параметризованный механизм FFT , написанный на VHDL, выпущенный по лицензии BSD. Статус «бета».
источник
Для проверки существует методология проверки VHDL с открытым исходным кодом (OSVVM).
OSVVM - это комплексная, продвинутая методология проверки VHDL, которая упрощает реализацию функционального покрытия, случайного ограничения и интеллектуальной рандомизации покрытия (интеллектуальная методология испытательного стенда). Это также облегчает реализацию общих файлов стенограммы, отчетов об ошибках, журналов (условной печати) и моделирования памяти.
Сайт и блог OSVVM находятся по адресу http://osvvm.org . Пакеты также доступны на github по адресу: https://github.com/JimLewis/OSVVM
источник