Найти в Дзене

Пополнение среди ультрабюджетных девбордов: FPGA - "отладка" за 201 р.

Самая дешёвая "оценочная плата" с ПЛИС Xilinx Spartan-6 на AliExpress обойдётся в ровно 3000р. У неё есть один плюс - все выводы разведены на "гребёнки", имеется единственная кнопка и три светодиода. И USB используется только для питания. Благодаря устойчивому развитию технического прогресса на свалку отправились очередные партии Асик-Майнеров, теперь это "Авалоны" 800й серии фирмы Canaan. Вот о них и пойдёт речь в статье. По DIY традиции давайте помигаем светодиодом! Для начала надо приобрести плату , а также обзавестись JTAG программатором Нужно припаять 6 контактную "гребёнку" для JTAG и 2-х контактную для питания платы (5-14В) Подать питание и убедиться, что огоньки загорелись (там их три маленьких - led2,3,4 и один большой LED1 трёхцветный), а не пошёл дым. Теперь надо установить софт! Работает на виндовс 10, надо только следовать рекомендациям Когда ПО будет установлено, запустим PlanAhead И создадим новый проект И добавляем код: `timescale 1ns / 1ps ////////////////////////

Самая дешёвая "оценочная плата" с ПЛИС Xilinx Spartan-6 на AliExpress обойдётся в ровно 3000р.

жалкие 9152 логические ячейки
жалкие 9152 логические ячейки

У неё есть один плюс - все выводы разведены на "гребёнки", имеется единственная кнопка и три светодиода. И USB используется только для питания.

Благодаря устойчивому развитию технического прогресса на свалку отправились очередные партии Асик-Майнеров, теперь это "Авалоны" 800й серии фирмы Canaan. Вот о них и пойдёт речь в статье.

По DIY традиции давайте помигаем светодиодом!

Здесь уже 24 051 логических ячеек
Здесь уже 24 051 логических ячеек

Для начала надо приобрести плату , а также обзавестись JTAG программатором

У меня вот такой
У меня вот такой
Так выглядит плата с SPARTAN-6 XC6SLX25
Так выглядит плата с SPARTAN-6 XC6SLX25
ПЛИС
ПЛИС
Чтобы припаять эти штырьки, придётся зачистить медь
Чтобы припаять эти штырьки, придётся зачистить медь

Нужно припаять 6 контактную "гребёнку" для JTAG и 2-х контактную для питания платы (5-14В)

Подать питание и убедиться, что огоньки загорелись (там их три маленьких - led2,3,4 и один большой LED1 трёхцветный), а не пошёл дым.

Теперь надо установить софт!

Этот подойдёт
Этот подойдёт

Работает на виндовс 10, надо только следовать рекомендациям

Когда ПО будет установлено, запустим PlanAhead

-8

И создадим новый проект

Некст
Некст
Назовём migalka
Назовём migalka
RTL Project
RTL Project
создадим новый файл Верилог , Next
создадим новый файл Верилог , Next
Next>
Next>
Создаём пустой файл констрейн - в нём будет распиновка
Создаём пустой файл констрейн - в нём будет распиновка
.ucf добавится автоматически
.ucf добавится автоматически
xc6slx25ftg256-2
xc6slx25ftg256-2
Finish!
Finish!
Редактируем верилог файл, сначала всё стираем
Редактируем верилог файл, сначала всё стираем

И добавляем код:

`timescale 1ns / 1ps

//////////////////////////////////////////////////////////////////////////////////

// Company:

// Engineer:

//

// Create Date: 22.05.2022 01:51:54

// Design Name:

// Module Name: pl_blink

// Project Name:

// Target Devices:

// Tool Versions:

// Description:

//

// Dependencies:

//

// Revision:

// Revision 0.01 - File Created

// Additional Comments:

//

//////////////////////////////////////////////////////////////////////////////////

// Директива компилятора, которая определяет единицу времени и точность для моделирования Verilog.

// В целом, не очень интересный пункт для нас.

//`timescale 1ns / 1ps

// Определяем стандартный блок-модуль (как класс в С++)

module pl_blink(input CLK100, output d6_led);

// Задаем регистр для хранения записи о текущем состоянии светодиода

reg r_led;

// Задаем регистр для хранения значения счётчика, использующегося в задержке

reg [31:0] counter;

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

initial begin

counter <= 32'b0; // Обнуляем счётчик

r_led <= 1'b0; // Делаем запись о состоянии светодиода

end

// Тут описываем поведенческий блок, который будет реагировать на положительный фронт тактовой частоты

always@(posedge CLK100)

begin

counter <= counter + 1'b1; // Увеличиваем счетчик

if(counter > 12000000) // Если счетчик больше некоторого условного значения

begin

r_led <= !r_led; // Инвертируем запись о значении состоянии светодиода

counter <= 32'b0; // Сбрасываем счетчик

end

end

assign d6_led = r_led; // Присваиваем текущее состояние ножке (условно)

endmodule

И сохраняем
И сохраняем
Run Synthesis (1) а когда закончится синтез, открываем и смотрим, что получилось (2)
Run Synthesis (1) а когда закончится синтез, открываем и смотрим, что получилось (2)
Переключимся в I/O Planning и приступим к распиновке, меняем 2.5 на 3.3 Вольт
Переключимся в I/O Planning и приступим к распиновке, меняем 2.5 на 3.3 Вольт

Открываем схему и ищем, куда подключен кварцевый генератор

Нога J6
Нога J6

Заносим это значение в план

J6
J6

Мигать будем красным светодиодом

Т9
Т9

Заносим это в таблицу и видим отображение на карте

-25

И сохраняем в констрейн файл

pinout.ucf - тот пустой файл, который создали в самом начале
pinout.ucf - тот пустой файл, который создали в самом начале

Посмотрим, что туда записалось

Порядок!
Порядок!

Implementation , Bitstream

3. Elaborated Design
3. Elaborated Design

Любуемся на своё творение

Красивое
Красивое

Launch Impact

-30
Мой программатор почему то недоступен Импакту, поэтому подключаюсь через предварительно запущеный hw_server
Мой программатор почему то недоступен Импакту, поэтому подключаюсь через предварительно запущеный hw_server
OK
OK

Указываем наш Битстрим-файл

он лежит в этом месте
он лежит в этом месте

Осталось залить Битстрим в Плисину и должно замигать!

Вот главная кнопка
Вот главная кнопка
Ура! замигало!
Ура! замигало!
Аstra_S9_SoC(+fpga)🪫

Этой (и не только) плате посвящён форум https://astra.org.ru и группа в Телеграм https://t.me/+R_oA68EGEtM4NmM6