Как стать автором
Обновить
280.88

FPGA *

Программируемые логические интегральные схемы

Сначала показывать
Период
Уровень сложности

RAM with Simple direct-mapped cache simulation on FPGA in Verilog

Время на прочтение5 мин
Количество просмотров4.9K

Simple direct-mapped cache simulation on FPGA




This article is a part of a course work for first year bachelor students of Innopolis University. All work is done in a team. The purpose of this article is to show an understanding of the topic, or to help to understand it using simulation.




Git repository link




Principle of work but from the user side should look like:


  • To write any data in memory, you need to access the RAM with data and address in which we want to write.
  • To access the data, we have to adress to cache. If the cache cannot find the necessary data, then it accesses the RAM by copying data from there.

When working with Verilog, it should be understood that each individual block of the program is represented as a module. As you know, the cache is not an independent part of fast memory, and for its proper operation it needs to take data from another memory block — RAM. Therefore, in order to simulate the work of the cache at the FPGA, we have to simulate whole RAM module which includes cache as well, but the main point is cache simulation.


The implementation consists of such modules:


  • ram.v — RAM memory module
  • cache.v — Cache memory module
  • cache_and_ram.v — module that operates with data and memory.
  • testbench.v and testbench2.v — module to show that main modules work perfectly.
Читать дальше →

Старт в Vivado 2022 c FPGA-тян

Уровень сложностиПростой
Время на прочтение4 мин
Количество просмотров1.7K

Всем снова здравствуйте, с вами Александр и та, кто, наверное, уже не нуждается в представлении.

Сегодня разберём, как создать свой первый проект в САПР Vivado 2022.

Читать далее

Симуляция высокоскоростных приёмопередатчиков с динамической реконфигурацией для ПЛИС Intel серии 10

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров1.8K

В этой статье мы подошли к самому "свежему" поколению ПЛИС фирмы Intel, а именно 10 поколение. И теперь мы будем создавать проект в среде симуляции для Arria 10.

Напомню, что высокоскоростные приёмопередатчики - это пара RX и TX, встроенные в ПЛИС, которые позволяют преобразовать параллельную шину данных на низкой частоте в последовательную на высокой при передаче данных и из последовательной в параллельную при получении данных. Они необходимы для реализации различных протоколов передачи данных. А динамическая реконфигурация в данном случае необходима для "автосогласования" скорости работы интерфейсов, например 1 / 2,5 /10 Gb Ethernet.

Читать далее

Лайфхак по разработке DMR на ПЛИС через генерацию HDL-кода в MATLAB

Время на прочтение6 мин
Количество просмотров7.1K

Однажды мне прилетела задача реализовать DMR на ПЛИС. Опустившись на дно интернета, я нашел лишь мануал ETSI и пару примеров по генерации кода – с этого начался мой тернистый путь изучения данной тематики. Недавно наткнулся на мем, и тут нахлынули воспоминания...

Читать далее

Подключаем Master устройство на шину Wishbone в системе LiteX

Время на прочтение5 мин
Количество просмотров1.6K

Давно я ничего не писал про LiteX. Во-первых, очень много работы. Во-вторых, пришлось почитать курс студентам, подготовка тоже дико отвлекала, но наконец семестр подходит к концу. Ну, и в-третьих, в своих опытах я на пару шагов дальше того, что описываю, и вот эти опыты меня затянули. Пока что там всё выглядит достаточно мрачно. Производительность там такая, что плакать хочется. В общем, было трудно прерваться, чтобы описать то, что находится ещё на гарантированно светлой стороне.  Но если вы читаете эти строки, то я себя пересилил.

Я уже многократно писал,  что рассматриваю LiteX как некий аналог подсистемы Qsys из среды разработки Quartus. То есть, как удобное средство составить шинно-ориентированную систему из множества готовых ядер. Но если Qsys – он только для Альтер, то LiteX – он подходит и для Altera (Intel), и для Xilinx, и для Lattice. А сейчас я по работе плотно вожусь именно с Латтисами. У Латтисов самое узкое место – это параметр FMax. И вот построение базовых систем на базе шины Wishbone у Litex получается очень красиво. Там FMax выходит достаточно высоким. Даже у Латтисов он превышает 100 МГц.

В предыдущих статьях мы уже научились добавлять в систему устройства, доступные по шине через регистры команд-состояний (CSR), а также пассивные (Slave) устройства с шиной Wishbone. Сегодня мы добавим на шину активное (Master) устройство. Поехали!

Читать далее

FPGA Weekly News #004

Время на прочтение4 мин
Количество просмотров1.5K

Ребята из FPGA комунити каждый день делают небольшую подборку новостей из мира FPGA и решили поделиться ею с читателями хаба FPGA. Внимание: возможны повторы!

Читать далее

FPGA Weekly News #003

Время на прочтение5 мин
Количество просмотров2K

Ребята из FPGA комунити каждый день делают небольшую подборку новостей из мира FPGA и решили поделиться ею с читателями хаба FPGA. Внимание: возможны повторы!

Читать далее

Построение отказоустойчивой системы Embedded Linux на базе модуля Mars ZX3 фирмы Enclustra

Время на прочтение5 мин
Количество просмотров5.8K
В связи с загруженностью специалистов, несколько лет назад мы вынуждены были отдать одну разработку контрагентам. Разработка велась на модуле Mars ZX3 фирмы Enclustra, в котором используется SOC ARM+FPGA Zynq-7020. Для сборки Linux использовался BSP от Enclustra (bsp-xilinx), который был немного модифицирован.

В процессе тестирования разработанного программного обеспечения, мы сразу же столкнулись с отказами ПО при выключении питания. При анализе, обнаружилось, что команды конфигурирования, отправляемые на устройство по сети, записывались в файлы, которые, при сбое питания, иногда оказывались пустыми или отсутствовали совсем. Это вынудило нас пересмотреть идеологию построения переданной нам сборки Linux. Сам процесс построения системы хорошо описан на сайте изготовителя модуля, поэтому не буду на нем останавливаться. Опишу только то, что позволило решить стоящую перед нами задачу повышения надежности и предотвращения отказов.
Читать дальше →

Самосинхронные схемы. Вычисление логических функций непосредственно по графу событий. Часть 3. Декомпозиция

Время на прочтение7 мин
Количество просмотров2.1K
Напомню важный вывод из предыдущих частей. Для циклического последовательного поведения, не содержащего кратных сигналов (переключающихся за цикл более двух раз), минимальная логическая функция каждого сигнала может быть представлена в следующем виде (естественно при отсутствии CSC конфликтов):

1)

$x=a*b*...*c+x*f+g+h+...+i,$



где a*b*...*c — это импликанта, состоящая из одной или более переменных. g+h+...+i — это возможно пустое множество импликант, состоящих из одной переменной. x*f — это импликанта из 2 переменных, наличие которой в минимальной форме не обязательно. Все переменные, кроме x, могут входить в формулу как в прямом, так и в инверсном виде, в зависимости от расстановки знаков соответствующих событий. Все переменные входят в формулу в качестве аргументов строго по одному разу.

Прежде чем идти дальше, подробнее рассмотрим такое явление как декомпозиция. Интересует прежде всего декомпозиция, которая сохраняет самосинхронность. При декомпозиции логической функции НЕ-И-ИЛИ в качестве нового элемента можно выделить:

а) одну или более импликант,
б) несколько сигналов (переменных) одной импликанты,
в) один входной инвертор.
Читать дальше →

Асинхронный дешифратор

Время на прочтение3 мин
Количество просмотров6.4K
Как и обещал в предыдущей статье, речь в этой статье пойдет о представлении в асинхронном виде операций над адресами. В качестве примера опишу операцию дешифрации адреса. Сразу же хочу предупредить инсинуации, с которыми столкнулся после опубликования предыдущей статьи. Речь пойдет о целиком и полностью асинхронном устройстве. И прошу, не надо ссылаться на реферат узбекского университета. Якобы асинхронный дешифратор можно получить из синхронного с помощью нехитрых манипуляций. Заодно вопрос тем, кто утверждает, что асинхронный процессор произведен 20 лет назад. Как это удалось без асинхронного дешифратора?

Итак, об асинхронном дешифраторе. После размышлений я пришел к выводу, что единственный вменяемый путь синтеза асинхронного дешифратора это поэтапное удвоение разрядности адреса с помощью схемы надстройки над двумя дешифраторами вдвое меньшей разрядности. Доказать что альтернативного пути нет я не берусь. Но могу утверждать что альтернативный путь (если он есть) куда более затратен по количеству добавляемых новых сигналов.

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

Читать дальше →

Статический временной анализ demystified. Часть 2

Время на прочтение5 мин
Количество просмотров9.1K
Многие начинающие разработчики не до конца понимают значение таких параметров триггера как время установки (Setup) и удержания (Hold). Про метастабильность и природу этих двух параметров написано достаточно много (https://habrahabr.ru/post/254869/), поэтому сосредоточимся на том, как бороться с нарушениями Setup и Hold в процессе проектирования схем.
Читать дальше →

Верификация FPGA. Что это?

Время на прочтение4 мин
Количество просмотров16K
По воле судьбы я занимаюсь несколько лет верификацией конфигураций ПЛИС. И с самого начала меня поражало малочисленность информации по данному вопросу.

Если не все, то многие здесь слышали про ПЛИС. Возможно некоторые даже плотно с ними работали, но, думаю, с верификацией проектов на ПЛИС сталкивалось намного меньше людей. Сегодня я расскажу о процессе верификации.
Читать дальше →

Чем отличается изобретатель вечного двигателя от просто изобретателя?

Уровень сложностиПростой
Время на прочтение3 мин
Количество просмотров4.6K

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

Предположим к вам обратился товарищ, который хочет чтобы вы дали ему контакты принимающих решения менеджеров и топ-алгоритмистов в условном Микрософте. Зачем? После обмена репликами, где он сначала сопротивляется, выясняется что он изобрел новый алгоритм сортировки. В качестве доказательства он показывает программу на питоне, которая, по его словам, сортирует 10 чисел быстрее чем сортировка по умолчанию на питоне.

Читать далее

Ближайшие события

Сложные цепи из последовательных звеньев и параллельных шин — согласование цифрового сигнала внутри таких схем

Уровень сложностиСредний
Время на прочтение8 мин
Количество просмотров2.4K

Нет согласующих резисторов в FPGA - что мешает реализовать целый ряд схем, но зато есть чем заменить их для цифрового сигнала внутри таких схем. Пытался найти в сети альтернативу согласующему резистору для применения внутри синтезируемой схемы, поисковик выдал скромный результат поиска, содержанием которого оказалось ничего по существу - категоричное нет на всех форумах, и иногда что-то близкое, но моей задачи не решающее. Да и собственно в схеме развёрнуты две задачи - некоторый кэш нового типа и механизм управления таким кэшем, по сути - часть процессора нового типа.

Тут нужно много вникать. И если Вы не верите IDE Logisim Evolution - можете просто пройти мимо и не принимать тут изложенный материал во что-то нужное и полезное. Тем более что это в общем-то работа новичка, который просто развивает свой проект и взгляды в новых областях, сталкивается с новыми задачами и решает их новыми способами.

Читать далее

Инженерный хакатон YADRO для студентов

Время на прочтение2 мин
Количество просмотров2.9K

14-15 мая 2022 г. YADRO впервые в России проведёт инженерный хакатон для студентов старших курсов.

Студенты смогут прокачать навыки проектирования современных микропроцессоров на базе архитектуры RISC-V и попробовать свои силы в решении практических задач маршрута проектирования системы на кристалле (СнК) по направлениям:

  • RTL проектирование;
  • функциональная верификация;
  • топологическое проектирование.
Читать дальше →

Делаем блок SPI to AVALON_MM для USB-устройства на базе FX3

Время на прочтение18 мин
Количество просмотров2.7K
В предыдущей статье мы научились подавать Vendor команды в устройство USB3.0 на базе контроллера FX3 и реализовали программную шину SPI. Сегодня мы продолжим начатое и сделаем компонент SPI to Avalon_MM. Может возникнуть вопрос: мы же уже умеем работать с шиной Avalon_MM через JTAG средствами TCL-скриптов, зачем нам что-то ещё?

Дело в том, что когда мы работаем на чистом TCL, как делали это здесь и здесь, всё замечательно. Но для задач, гоняющих десятки или даже сотни мегабайт, этот вариант слишком медленный. Поэтому мы вынуждены добавить программу на С++, работающую через USB 3.0.

Вариант с TCL-сервером, к которому обращается плюсовая программа, рассмотренный в этой статье, требует сложной ручной подготовки при каждом запуске. Надо обязательно запустить среду исполнения (для Windows и Linux они разные), запустить серверный скрипт, а затем – в программе синхронизировать работу с данными по USB и с командами через TCP. Не люблю такие сложности. Оставим те варианты под случаи, когда они не создают трудностей. Здесь же у нас есть USB-устройство, мы всё равно с ним работаем, вот и будем обращаться к шине AVALON_MM через него. Приступаем.


Читать дальше →

Знакомство с FPGA iCE40 UltraPlus Mobile Development Platform от фирмы Lattice Semiconductor

Время на прочтение6 мин
Количество просмотров3.4K

Введение


Всем доброго времени суток, друзья! Недавно на работе обзавелись новенькой навороченной платой iCE40 UltraPlus Mobile Development Platform от фирмы Lattice Semiconductor. Со слов разработчиков на официальном сайте iCE40 UltraPlus MDP — это плата, на которой расположены 4 ПЛИС iCE40 UltraPlus, каждая из которых управляет своим набором периферии. В набор входят:

  • мобильный дисплей с разрешением 240x240 с интерфейсом MIPI DSI;
  • датчик изображения с разрешение 640x480 (OVM7692);
  • малопотребляющие микрофоны в количестве 4 штук;
  • BLE модуль для беспроводной передачи данных;
  • программируемая SPI Flash память;
  • пак различных датчиков (давления, компас, гироскоп и акселерометр);
  • ну и всякие кнопочки и лампочки.

Вся круть данного кита заключается в том, что на нем с помощью специальных программных пакетов можно разворачивать нейронные сети для работы с видео и звуком. И это не говоря уже о том, что ПЛИСы фирмы Lattice являются низкопотребляемыми, малогабаритными и достаточно дешевыми.
Читать дальше →

Очередной подход к RS-триггеру, теперь с TLA+

Время на прочтение4 мин
Количество просмотров2.8K
Я уже моделировал RS-триггер как полностью синхронную схему. Но в некоторых приложениях таких моделей не достаточно, требуется рассмотреть переходные процессы, которые могут возникнуть. TLA+ разработан для анализа параллельных асинхронных систем. Поупражнявшись в решении головоломок с его помощью, можно начать применять этот инструмент и для более серьезных задач.
Читать дальше →

Часть 4. Модель вычисления логических функций по графу для асинхронных параллельных процессов

Время на прочтение8 мин
Количество просмотров2.1K
Перейдем к вычислению логических функций по графу для более широкого класса поведений. Будем рассматривать циклические автономные поведения, не содержащие кратных сигналов (или по другому: не содержащие индексированных событий). Еще одно ограничение: для удобства не будем рассматривать соединение параллельных ветвей по ИЛИ. Рассматриваем только соединение по И, то есть событие инициируется только тогда, когда сработают все его события-предшественники.

Для описания поведения будем использовать STG, но с дополнительными ограничениями. Для каждого плэйса количество входящих в него и выходящих из него дуг равно строго по одной. Соответственно, плэйс с входящей и выходящей дугами можно рассматривать как одну дугу, соединяющую два события (перехода). Соответственно маркировка перемещается по дугам. Так как поведения с кратными сигналами сейчас не рассматриваются, индексы при событиях запрещены, они не нужны. Пустые события запрещены. Также запрещена ситуация, когда две дуги, входящие в одно событие, выходят из событий, которые не параллельны друг другу (частный случай — из одного и того же события). Цель этого — избавиться от дуг, не несущих смысловой нагрузки. В остальном рассматривается корректное (нормальное, живое, безопасное) с точки зрения STG поведение с учетом вышеизложенных ограничений. Поведение не содержит CSC конфликтов.

Читать дальше →

Неожиданный взгляд на асинхронные схемы, независящие от скорости

Время на прочтение4 мин
Количество просмотров3.7K
В асинхронной науке центральное место занимает свойство схем, называемое независимостью от скорости, по английски speed independent (далее SI). Считается, что это свойство является аналогом независимости асинхронных схем от задержек логических элементов. Неудивительно, что термин SI упоминается практически в каждой работе по асинхронике. Но периодически по части этого термина возникают какие-то смутные сомнения. Не случайно, что все чаще этот термин заменяется другим термином, именуемом самосинхронностью. Прояснить эту ситуацию поможет обращение к первоисточнику. Речь идет о втором томе книги Р. Миллера «Теория переключательных схем», а если точнее, о главе 10, именуемой «Теория переключательных схем, не зависящих от скорости».

Читать дальше →