Задание следующее:
1. Запустить baseline-проект на FPGA - ВЫПОЛНЕНО
2. Разработка исполняемой модели и микроархитектуры блока нейропроцессора.
Исполняемая модель должна быть написана на Python, содержать исключительно операции, реализуемые непосредственно в аппаратуре, и без использования сторонних библиотек.
Микроархитектурная диаграмма - структура блока в терминах облаков комбинационной логики и регистров + таблица с пояснением, какие именно вычисления производятся на каждом такте синхросигнала. - ВЫПОЛНЕНО (код представлен ниже)
3. Разработка RTL-модели блока нейропроцессора, написание симуляционного теста, отладка в симуляторе - НЕОБХОДИМО ВЫПОЛНИТЬ
4. Натурное тестирование блока нейропроцессора на FPGA - - НЕОБХОДИМО ВЫПОЛНИТЬ
В пунктах 2-3 необходимо написать код (сначала на питоне, пункт 2), а потом перевести это на Verilog (пункт 3). Там код должен делать следующее:
Блок SoftMax (нормализация входного вектора) с программируемой размерностью данных
Описание: Рассчитать выходные значения слоя SoftMax по заданным входным значениям и указанному размеру n данных
Входные данные: n 32-битных значений, одно 8-битное значение размерности n данных
Выходные данные: n 8-битных значений с фиксированной точкой
Необходимое ПО:
Рабочая плата: Digilent Nexys4-DDR (Artix-7 FPGA): https://store.digilentinc.com/nexys-4-ddr-artix-7-fpga-trainer-board-recommended-for-ece-curriculum/ (если что, есть на руках)
САПР для симуляции и имплементации: Vivado Design Suite 2019.1 (WebPack, бесплатная версия) - если что, установлен на мой ПК
Для взаимодействия с платой: нужен дистрибутив WinPython с установленным пакетом pyserial - если что, установлен на мой ПК
Код из 2-го пункта на Python:
import random
import math
def softmax(input_values):
# Преобразование входных значений в экспоненциальные значения
exp_values = []
for value in input_values:
exp_values.append(my_exp(value))
# Рассчет суммы экспоненциальных значений
sum_exp_values = sum(exp_values)
# Рассчет выходных значений SoftMax
softmax_values = []
for value in exp_values:
softmax_values.append(round(value / sum_exp_values * 255, 5))
return softmax_values
def my_exp(x):
result = 1.0
factorial = 1.0
for i in range(1, 50):
factorial *= i
result += x**i / factorial
return result
# Входные данные
n = 5
input_values = []
for _ in (range(n)):
x = int(random.uniform(-10.0, 10.0))
input_values.append(x)
# input_values = [1.5, 2.3, 0.8, 1.2, 2.1]
# Рассчет выходных значений SoftMax
output_values = softmax(input_values)
print("Входные значения:", input_values)
print("Размерность данных:", n)
print("Выходные значения SoftMax:", output_values)
# ТЕСТ
# Функция для проверки правильности подсчета SoftMax
def test_softmax():
# Входные данные
n = 5
input_values = []
for _ in range(n):
x = random.uniform(-10.0, 10.0)
input_values.append(x)
# Вычисление ожидаемых значений SoftMax с помощью библиотеки math
expected_values = []
for value in input_values:
expected_values.append(round(math.exp(value) / sum(math.exp(x) for x in input_values) * 255, 5))
# Вычисление выходных значений SoftMax с помощью функции softmax
output_values = softmax(input_values)
# Проверка правильности значений
for i in range(n):
if output_values[i] != expected_values[i]:
return False
return True
# Выполнение теста и вывод результата
if test_softmax():
print("Тест пройден: выходные значения SoftMax рассчитаны правильно.")
else:
print("Тест не пройден: выходные значения SoftMax рассчитаны неправильно.")
Влад Марков
СИНГ
рекомендую, никаких проблем с работой не было. Работа конечно не сверх сложная, учитывая э...
Ирина
СВФУ
Все правильно! Но работа не пригодилась, так как препод забыл что задавал на прошлой сесси...
Дарья
СИБГу им.а.Решетнева
Ко всем купленным работам преподаватель придиралась, к моей работе купленной на этом сайте...
Александр
СВФУ имени М.К. Аммосова
Спасибо большое, очень мне помогли, работа была сделана до срочно и без нареканий. Желаю в...