Добро пожаловать, Гость
Логин: Пароль: Запомнить меня
  • Страница:
  • 1
  • 2

ТЕМА: Online-синтез прошивки

Online-синтез прошивки 10 года 1 мес. назад #3088

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
У меня проект - "Си как HDL, или Verilog без always" - компилятор, позволяющий использовать подмножество Си(с небольшими отличиями) в качестве низкоуровневого(как Верилог) языка описания схем(HDL).
Для тестирования хочу предложить(в скором времени) online-синтез прошивки для Марсохода2 через FTP-сервер.
Но - Марсохода2 у меня пока нет, все эксперименты провожу с другой платой(на CycloneV).
Для пробы сгенерировал прошивку (.sof) для Марсохода2, есть возможность проверить?
Это упрощенный "тетрис" (см. tetris.c), вывод на VGA 1024*768@60Гц (тактовая 75МГц), управление через USB-UART (3000000 бод).
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3089

С фигурками все нормально - падают. :)
А с управлением у меня что-то не получилось ,
реагирует только на две кнопки - по эскейпу начинается заново, по пробелу останавливается :(
Управлял из "PuTTy"
Спасибо сказали: Leka

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3090

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Кнопки со стрелками влево-вправо-вверх-вниз можно эмулировать кнопками "K" "M" "H" "P" (большие, те +Shift или включить CapsLock).

У меня управление идет от отдельной программы, тк USB-UART используется и для отладки. Вечером выложу исходник.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3091

Leka пишет: Кнопки со стрелками влево-вправо-вверх-вниз можно эмулировать кнопками "K" "M" "H" "P" (большие, те +Shift или включить CapsLock).

У меня управление идет от отдельной программы, тк USB-UART используется и для отладки. Вечером выложу исходник.


Не очень удобно, но работает :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3092

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Для меня сейчас важно, чтобы хоть как-то работало :) , тогда проще искать нестыковки и отлаживать.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3095

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
uart.bat - запускаю один раз, устанавливает параметры виртуального COM-порта, у меня com9.
u.c - отсылает нажатые клавиши в com-порт.
Для отладки по USB-UART использую аналогичный подход, добавляя в u.c нужную обработку.

В каталоге top привел исходники для синтеза прошивки тетриса - в качестве примера, как у меня выглядит синтезируемое описание (tetris.c - консольная программа для Windows).
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3096

"Си как HDL, или Verilog без always" тема для нас очень интересная. Если есть возможность , опишите подробнее.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Online-синтез прошивки 10 года 1 мес. назад #3098

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
"Си как HDL, или Verilog без always".

Любой синхронный дизайн FPGA сводится к куче регистров(триггеров) с комбинационной логикой на входах, см. рис.

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

Комбинационная логика без проблем описывается и в обычных ЯВУ, остается только найти максимально удобный способ различать "комбинационный" и "регистровый" тип данных.
Различать эти типы данных можно разными способами, например:
1) по месту присваивания - указанием типа операции,
2) по объявлениям переменных - указанием типа данных.

Verilog/SystemVerilog использует первый способ - по месту присваивания, причем не типом операции присваивания (блокирующее/неблокирующее), а типом блока (always_comb/always_ff), в котором выполняется присваивание. Такой подход приводит к вынужденному дроблению целостного алгоритма, и разнесению логически связанных частей в логически несвязанные блоки. Если отказаться от такого способа различения типов, надобность в always-блоках отпадает, как и необходимость различать блокирующее/неблокирующее присваивание. По синтаксису получится - почти Си, с различением типов по объявлениям переменных.

Зачем все это? Затем, что будущее не за процессорами, а за реконфигурируемыми вычислениями. И составил для себя такой план практической проверки этой идеи:
1) Проработать методику использования одного из распространенных языков программирования для низкоуровневого описания схем. Выбор пал на Си: "Си как HDL, или Verilog без always". Текущий этап.
2) Перейти к высокоуровневому описанию схем. Для этого в первую очередь надо обеспечить возможность описывать FSM в стиле структурного программирования. Следующий этап, есть некоторые наработки.
3) Кардинально ускорить синтез и верификацию. Это самое сложное, и самое главное, и возможно только при помощи реконфигурируемых вычислений - замкнутый круг, однако...
Вложения:

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Online-синтез прошивки 10 года 1 мес. назад #3100

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
В системном и веб-программировании - чайник, для меня проще всего скачивать/закачивать файлы через стандартный ftp-клиент. Поэтому тестовый online-синтез прошивки собираюсь сделать через сторонний бесплатный FTP-сервер, нашел "net2ftp.ru"(или какой другой выбрать?).
Предлагаю так:

- Пользователь регистрируется на net2ftp.ru,
выкладывает тут "логин" (пароль остается в секрете),
и закачивает/модифицирует файл:
"net2ftp.ru/node0/логин/top.hdl".

- Моя прога (на домашнем компе) сканирует по списку все эти ссылки,
при обновлении даты "top.hdl" скачивает его,
компилирует, и закачивает прошивку(или сообщение об ошибке) по ссылке:
"net2ftp.ru/node0/мой_логин/логин.zip" (результаты всех пользователей будут в одном каталоге).

Какие другие варианты (кроме как выложить исходники компилятора :) ) ?
Лучше всего было-бы, конечно, организовать FTP-сервер на marsohod.org,
у net2ftp.ru из недостатков - e-mail в качестве логина.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.

Online-синтез прошивки 10 года 1 мес. назад #3101

  • Leka
  • Leka аватар Автор темы
  • Не в сети
  • Живу я здесь
  • Живу я здесь
  • Сообщений: 635
  • Спасибо получено: 54
Понемногу буду выкладывать описание языка на конкретных примерах.
Сначала простейшие примеры, потом посложнее (например, софт-ядро, совместимое по ассемблеру с msp430 - можно использовать GCC, без периферии занимает ~350 ЛЕ).
Первый пример - по аналогии с marsohod.org/projects/marsohod2/210-first-prj , но без VGA (это уже приводил в примере с тетрисом).
//-----------------------------------------------------------------------------
// топ-модуль, объявляются клоковые домены и назначаются пины 
bit [4] LED; // bit - выходы 
ext[1] KEY0, KEY1; // ext - входы
ext[1] FTDI_BD0;
bit [1] FTDI_BD1; 
ext[1] CLK_100MHZ; 
top(){
	// первый аргумент всех инстансов в топ-модуле - всегда клок, 
	// во всех остальных модулях и инстансах клоки не указываются 
	counter(CLK_100MHZ, LED, KEY0, KEY1);
	serial_loop(CLK_100MHZ, FTDI_BD0, FTDI_BD1);
}
//-----------------------------------------------------------------------------
// важен порядок аргументов - как в инстансах
bit  [4] led;
ext [1] clr, en;
counter(){
	// reg - регистр, значение меняется по фронту соответствующего клока,
	// reg - всегда подразумевается неблокирующее присваивание	
	reg [32] cnt; 
	
	// bit - "провод", всегда подразумевается блокирующее присваивание
	// в правой части можно использовать синтаксис Верилога,
	// либо писать, как в Си: led = (cnt >> 22) & 15;
	led = cnt[25:22];
	
	if(clr) 
		cnt = 0;
	else 
		if(en) 
			cnt = cnt + 1;
}
//-----------------------------------------------------------------------------
ext[1] uartRx;
bit [1] uartTx;
serial_loop(){ 
	uartTx = uartRx; 
}	
//-----------------------------------------------------------------------------

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Последнее редактирование: от Leka.
  • Страница:
  • 1
  • 2
Время создания страницы: 0.265 секунд
Работает на Kunena форум