Category: verilog

Ноя 23 2015

Проект видеоадаптера. Часть 3

Продолжение. Часть 2.

Структурная схема видеоадаптера приведена на рис. 1 (кликабельно)

vga-card-big

 

Рис. 1. Структурная схема видеоадаптера.

 

Пояснения к схеме:

В первой версии видеоадаптер будет иметь только текстовый режим EGA, 80 * 25 символов 8 * 14 пикселов каждый символ. Таким образом, экранное разрешение составит 8 * 80 = 640 пикселов по горизонтали и 14 * 25 = 350 пикселов по вертикали. Частота пикселов в этом режиме составляет, по стандарту 25,175 МГц, фактическая частота будет 25 МГц, в связи с тем, что частота тактирования ПЛИС составляет 50 МГц. При этом на любом мониторе происходит нормальная синхронизация.

Read more »

Ноя 05 2015

Проект видеоадаптера. Часть 2

Продолжение. Начало.

Проект видеоадаптера переделан под использование видео ЦАП ADV7123. Схема подключения приведена на рисунке:

VGA_DAC

(по клику откроется полный размер).

Код проекта приведён на гитхабе (ссылка). Это тестовый код, который выводит на монитор поле разноцветных квадратов.

По сравнению с предыдущей версией, в которой использовался резистивный ЦАП, увеличена разрядность с 2-х до 8-и бит на цвет, и существенно улучшилось качество изображения.

Фото тестовой картинки:

pic

 

Июл 28 2015

SoCKit Lab Instructions

Прочитал и освоил на практике воркбенч SoCKit Lab, две части, Hardware и Software.
Данная программа лабораторных работ основана на системе на кристалле (SoC) Altera Cyclone V. SoC состоит из двух процессорных ядер ARM Cortex A9 и FPGA, которые соединены мостами и могут взаимодействовать друг с другом. Первое руководство, Hardware, выполняется в Quartus II, и описывает конфигурирование и подключение периферии к процессору, а также симуляцию системы в ModelSim.
Вторая часть, Software, описывает процесс загрузки Linux, компиляцию простейшей программы (мигание светодиодом), отладку программы в ARM DS-5 Embedded Development Suite, и основы работы с SignalTap II Logic Analyzer в режиме совместной отладки программного кода и FPGA-проекта.

pic1

Июн 21 2015

Генерация файлов .mif и case-конструкций

Пусть в проекте FPGA необходимо ПЗУ, в которое записана определённая информация, имеющаяся у нас в виде бинарного файла. ПЗУ, как правило, реализуются на блоках BRAM, в которые при инициализации FPGA записывается требуемое содержимое.
Файлы инициализации памяти BRAM для FPGA, могут иметь формат MIF (Memory Initialization File) или формат HEX.

DSC_0522_EDIT

Нужный модуль памяти можно сгенерировать в Quartus II с помощью MegaWizard, в ISE — с помощью Xilinx Core Generator. Кроме этого, в QuartusII возможно использование специальной директивы:

reg [7:0] mem[0:2047] /* synthesis ram_init_file = "test.mif" */;

Эта директива позволяет создать RAM, инициированную значениями из файла .MIF. Использование RAM с предустановленными значениями, это очень плохая идея, но в качестве ROM такую память использовать вполне можно. Проблема в том, что эту директиву понимает только Quartus II, никакой кроссплатформенности.

Quartus II предоставляет редактор файлов памяти, и возможность загрузки файлов .mif и .hex, Xilinx Core Generator требует загрузки файла .coe, имеющего другой формат, нежели MIF. Однако хочется иметь кроссплатформенное решение, которое не зависело бы от платформы. Таким вариантом является генерация ROM в виде case-конструкции:

always@(posedge clk)
begin
  case(in)
  ...
  11'h00d: out = 8'h99;
  11'h00e: out = 8'h81;
  11'h00f: out = 8'h7e;
  11'h010: out = 8'h7e;
  11'h011: out = 8'hff;
  11'h012: out = 8'hdb;
  11'h013: out = 8'hff;
  11'h014: out = 8'hc3;
  11'h015: out = 8'he7;
  11'h016: out = 8'hff;
  ...
  endcase
end

Полезная ссылка: различные конструкции для генерации разных типов RAM, ROM и других модулей можно найти в руководстве Altera «Recommended HDL Coding Styles»: https://www.altera.com/content/dam/altera-www/global/en_US/pdfs/literature/hb/qts/qts_qii51007.pdf
Я написал две простые утилиты, которая преобразует бинарный файл в MIF и в тело конструкции case.

Read more »

Июн 19 2015

FPU. Часть 5. Сумматор, тест и RTL

Итак, сумматор чисел в формате IEEE 754 с разрядностью 32 или 64 бита.
Исходники можно скачать на Github: https://github.com/arktur04/FPU.

КДПВ (кликабельно):

pic1

Read more »

Июн 12 2015

О подсчете нулей

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

Итак, вариант 1:

function [ZERO_DATA_WIDTH - 1: 0] zero_cnt;
input [DATA_WIDTH - 1: 0] in;
integer i;
begin
  zero_cnt = DATA_WIDTH;
  for(i = DATA_WIDTH - 1; i >= 0; i = i - 1)
  begin
    if(in[i] && zero_cnt == DATA_WIDTH)
	   zero_cnt = DATA_WIDTH - i - 1;
  end
end
endfunction

Read more »

Июн 02 2015

Книга Jane Smith «Verilog Coding Guidelines»

Это не совсем книга, впрочем, это просто документ, стилевой гайд по Verilog  фирмы Cisco System.

pic

Объём небольшой, всего 17 страниц. Описывается стиль кода, отступы, именование сигналов и регистров, и т.п.

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

Любой стиль кодирования есть всего лишь отражение чьих-то вкусов, не существует «единственно верного» стиля.

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

Май 28 2015

Книга Pong P. Chu «FPGA prototyping by Verilog examples»

Прочитал книгу «FPGA prototyping by Verilog examples», очень понравилось.
Обычно в таких книгах приводится синтаксис языка и какие-либо примеры проектов, часто далёкие от практики. В этой книге описываюься примеры взаимодействия с периферийными устройствами: клавиатурой, мышью, VGA-мониторм, памятью SRAM. Примеры приведены в расчёте на плату фирмы Digilent с FPGA семейства Spartan-3, но приведённые примеры практически не содержат чего-то специфического именно для данного семейства FPGA.

fpga_vlog_front

Во второй половине книги рассмотрен встраиваемый микроконтроллер PicoBlaze, его ассемблер, и приводятся примеры программ на нём.

В книге рассматривается метод синтеза RTL-кода из ASMD-диаграмм (представление алгоритма, сочетающее в себе графическую блок-схему алгоритма и граф конечного автомата).

Также в книге рассматривается проект простой видеоигры, которую можно сделать на плате Digilent (или на любой другой, если позволяют аппаратные возможности).

Май 13 2015

Проект видеоадаптера. Часть 1

Целью проекта является разработка видеоадаптера на FPGA. Выходом видеоадаптера является VGA, на данный момент поддерживается глубина цвета 6 бит (по 2 бита на цвет RGB).
Разъём VGA подключен к FPGA по следующей схеме:

schematics

 

Резисторы R1-R6 образуют простейший ЦАП, для начала хватит такого, если нужна большая глубина цвета, то лучше использовать специализированные микросхемы видеоЦАП, например ADV7123.

Read more »

Апр 23 2015

FPU. Часть 4. Умножитель, тест и RTL

Предыдущая часть здесь.

pic

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

Read more »