Поведение BRAM FIFO при переполнении

10 марта 2016 г. 11:10 ПЛИС  

Небольшая заметка с результатами симулации переполнения простой однотактовой FIFO с счетчиком объема data_count в симуляторе Xilinx ISIM.

 

Оптимизация конфигурации ПЛИС по площади (Уменьшение занимаемых ресурсов)

28 февраля 2016 г. 13:32 ПЛИС  

Конкретная микросхема выбранного для разработки семейства ПЛИС обычно выбирается уже после разработки конфигурации и тестирования ее в симуляторе исходя из занимаемого объема. Тем не менее бывают случаи когда в конфигурациию добавляется новый функционал и она перестает помещаться в существующую микросхему, либо  когда еще при выборе процент переполнения очень мал (например синтезатор говорит что занят 101% LUT), и не хочется переплачивать много за следующую микросхему. В обоих случаях можно попробовать уменьшить объем занимаемый ПЛИС. Второй случай конечно не рекомендуется рассматривать если в дальнейшем функционал будет расширятся хотя бы минимально - всегда лучше оставлять небольшой запас.

Пример синхронизации асинхронных сигналов и симуляции асинхронных схем на VHDL

30 января 2016 г. 23:44 ПЛИС  

При захвате любых входных сигналов которые могут измениться асинхронно по отношению к основному синхросигналу микросхемы могут возникать некоторые проблемы в работе микросхемы, а точнее триггеров которые выполняют захват.  Эти проблемы связаны с переходом триггера в некое метастабильное состояние при котором данные в нем могут принять вообще стать неопределенными (не 0 и не 1) и в результате приведут к неправильной работе схемы. Особенно часто эта проблема стоит при "стыковании" микросхем по различным интерфейсам. Например сигнал RX у приемника UART может изменится в любое время произвольное по отношению к синхросигналу тактирующего конечный автомат самого приемника, что может вывести из устойчевого состояния триггер который будет захватывать этот сигнал. Также это касается интерфейсов вроде SPI Slave либо даже обычной тактовой кнопки. Безусловно понимание проблемы метастабильности требует куда более глубокого рассмотренния и должно затрагивать  принципы работы триггера и его характеристики, однако в этом посте я приведу чисто практический пример решения этой проблемы.

Асинхронные проблемы в ПЛИС: о CDC, триггерах и метастабильности

27 декабря 2014 г. 18:12 ПЛИС  

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

В этой статье рассматривается проблема реализации интерфейсов в которых присутствуют входные сигналы  изменяющие своё значение асинхронно по отношению к внутреннему синхросигналу в ПЛИС. Примером таких интерфейсов есть: ведомый модуль SPI (Slave), приемник UART, входы GPIO и т.п.

Прошивка ПЛИС Spartan6 при помощи FPGALink

15 июня 2014 г. 20:43 ПЛИС   FPGALink  

В этой статье речь пойдет о демо-платке от китайской конторы canton-electronics. На борту дешевенькая FPGA xc6slx9 семейства Spartan6 в корпусе tqg-144. Обвязка минимальная - пару регуляторов питания, кварцевый генератор 25 МГц, SPI-флешка M25P40 объемом 4 Мбит для загрузки прошивки, светодиоды и кнопки. Питается от разъема USB (информационные линии USB не подключены). Платка стоит 35$ + 5$ доставка. Купить можно тут . 

В принципе платку можно накатить lut-ом или домашним фоторезистом - особых мелочей нет. Схему покажу в статье. Отдельный чип xc6slx9 стоит порядка 9$, но покупать все же скорее всего придется чайне, потому что в наших магазинах такие специализированные микросхемы обычно найти сложно.  

Все незадействованные пины выведены на штырьки, так что можно развести шилд с собственной периферией.

Создавать проект я буду в среде Xininx ISE, как с ней работать я пытался рассказать в этой статье. Я напишу светодиодную мигалку и прошью её в плату по JTAG с помощью FPGALink . 

Дешевый самодельный программатор для ПЛИС Xilinx (FPGALink)

23 мая 2014 г. 23:23 ПЛИС   FPGALink  

Для ПЛИС фирмы Xilinx дешевый USB-программатор найти не так просто. В данной статье я предлагаю вашему вниманию программатор основанный на проекте FPGALink, созданным британцем Крисом МакКлелландом. Он разработал прошивку под контроллеры Cypress FX2LP и Atmel AVR8 с поддержкой USB а также библиотеку для работы с этой прошивкой и утилиты командной строки на её основе. Я накидал простенькую платку программатора c чипом  AT90USB162. Особенностью этой AVR-ки является то, что её можно прошить без внешнего программатора - с помощью USB DFU Bootloader-а (Device Firmware Upgrade). 

Данный программатор теоретически поддерживает любые модели Xilinx FPGA, поскольку он просто выполняет .xsvf-файлы по стандартному 4-х проводному интерфейсу JTAG. Файлы .xsvf можно генерировать с помощью утилиты Impact, входящей в состав IDE Xilinx ISE. Скорость прошивки вполне удовлетворительна - для примера чип xc6slx9 прошивается за несколько секунд.

Стадии имплементации устройства в Xilinx ISE

10 мая 2014 г. 23:03 ПЛИС  

В прошлой статье мы создали проект устройства в Xilinx ISE, и узнали как описывать поведение простейшего устройства а также как выполнять его имплементацию. Что при этом происходит "за кулисами" интерфейса мы попробуем разобраться в данной статье. Для этого мы рассмотрим стадии, которые проходит наше описание перед тем, как превратится в "прошивку" для ПЛИС. В статье я дам вывод отдельных утилит, которые реализуют имплементацию, и постараюсь дать некоторые краткие комментарии. Большой проблемой в объяснении всего происходящего является "проприетарность" (то есть закрытость) форматов файлов учавствующих в процессе имплементации, поэтому сразу скажу, что рассмотрение будет весьма поверхностное, и направленное скорей на составление общей картины, чем на подробное описание всех тонкостей.

Основы создания конфигураций ПЛИС на VHDL в Xilinx ISE

9 мая 2014 г. 17:36 ПЛИС  

Существующее множество архитектур микроконтроллеров и микропроцессоров способно удовлетворить много задач во встраиваемых системах. Но существуют задачи, для которых классическая процессорная архитектура либо не подходит вообще, либо подходит в качестве Ъ-решения. Например это могут быть задачи высокоскоростных/многопоточных вычислений, задачи реализации многоканальных интерфейсов, аппаратные сопроцессоры и тому подобное. Для их решения обычно приходится самому разрабатывать микросхемы. Одним из дешевых и доступных вариантов такой разработки является ПЛИС (программируемая логическая интегральная схема). Для описания конфигурации ПЛИС может быть использован язык VHDL. Во многом язык VHDL похож на языки программирования - в нем есть операторы ветвления, циклы, типы данных, и даже подпрограммы, но при этом всем он не является языком программирования! И это самое главное, что нужно понять если вы начинаете его осваивать. Как известно, язык программирования - это язык, операторы которого превращаются в машинный код, который последовательно (инструкции одна за одной) выполняется процессором или микроконтроллером. В ПЛИС выполнять подобные инструкции просто некому, так что всё, что написано на VHDL не выполняется, а описывает устройство. Что подразумевается под словом "описывает" я и попытаюсь на конкретном примере объяснить в этой и последующих статьях.