Тестовое задание Ильченко Сергей Владимирович 11 апреля 2024 год.

Текст задания

« Сортировка »

Задание в формате PDF ~185KБ тыц

  1. Написать модуль, который будет производить сортировку входных значений.
  2. Написать тестбенч.

Интерфейс модуля:

Входной потоковый интерфейс

snk_reset вход Асинхронный сброс для входного потокового интерфейса
snk_clock вход Тактовый сигнал для входного потокового интерфейса
snk_ready выход Сигнал готовности входного потокового интерфейса. Если 0, то модуль не готов принимать новую транзакцию (занят сортировкой или отправкой выходной транзакции и пр.)
snk_valid вход Подтверждает валидность snk_sop, snk_eop, snk_data
snk_sop вход Начало транзакции (первое слово)
snk_eop вход Конец транзакции (последнее слово)
snk_data вход Слово данных

Выходной потоковый интерфейс

src_reset вход Асинхронный сброс для выходного потокового интерфейса
src_clock вход Тактовый сигнал для выходного потокового интерфейса
src_valid выход Подтверждает валидность src_sop, src_eop, src_data
src_sop выход Начало транзакции (первое слово)
src_eop выход Конец транзакции (последнее слово)
src_data выход Слово данных

Параметры модуля:

DATA_WIDTH Ширина слов (snk_data, src_data)
MAX_LENGTH Максимальная длина транзакции

На модуль подаются данные в неотсортированном виде через входной потоковый интерфейс на частоте 50МГц.

Необходимо сформировать поток отсортированных по возрастанию данных через выходной потоковый интерфейс на частоте 133МГц.

Чтобы запретить приём новых транзакций во время обработки входных данных, можно опускать сигнал snk_ready в 0.

Транзакции на вход и на выход должны быть непрерывны: опускания в 0 сигналов snk_valid и src_valid во время транзакции недопустимы.

Гарантируется, что:

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

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


Перевёл на русский язык видео Intel по High-Level Synthesis. Всего 3 части. Просто как возможная идея реализации сортировки или Test Bench.



Разработал структурную схему модуля сортировки (будет обновляться в процессе разработки).

PDF ~1,33МБ: тыц

PNG (изображение откроется в новой вкладке) ~421KБ: тыц

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

Verilog код двухпортовой RAM представлен ниже.

Запросим у ChatGPT 3.5 описание входного интерфейса на Verilog и попросим сгенерировать файл временных ограничений. Описав следующим текстом желаемый алгоритм поведения:

Здравствуй. Напиши пожалуйста Verilog код делающий следующее: шина Avalon-ST синхронная пакетная передача. Схема сбрасывается асинхронным сбросом, активный высокий уровень: "snk_reset". Тактовый сигнал называется "snk_clock" частота 50МГц. Если сигнал валидности snk_valid установлен в единицу то:

Напиши пожалуйста файл констрейнов SDC для такой схемы.

Видео процесса запроса представлено ниже.

Сгенерированный ChatGPT 3.5 Verilog код Avalon-ST snk приведён ниже.

Сгенерированный ChatGPT 3.5 текст временных ограничений приведён ниже.

Аналогичным образом запросим код потоковой передачи Avalon-ST и текст временных ограничений.

Здравствуй. Напиши пожалуйста Verilog код делающий следующее: Шина Avalon-ST синхронная пакетная передача. Схема сбрасывается асинхронным сбросом, активный высокий уровень: "src_reset". Тактовый сигнал называется "src_clock", частота 133МГц. Выполняется считывание из синхронной памяти разрядностью 32 бит и глубиной 1024 слов. Память адресуется счётчиком адреса "src_addr_counter". По внешнему сигналу "w_export" запускается считывание из памяти и передача на шину Avalon-ST, причём начало пакетной передачи утверждается сигналом "src_sop" равным логической единице, длительность 1 такт. Окончание пакетной передачи утверждается сигналом "src_eop" равным логической единице, длительность 1 такт. Всё время передачи, данные сопровождаются сигналом "src_valid" равным логической единице, всё остальное время сигнал установлен равным логическому ноль

И второй запрос:

Напиши пожалуйста файл констрейнов SDC для такой схемы.

Видео процесса запроса представлено ниже.

Сгенерированный ChatGPT 3.5 Verilog код Avalon-ST src приведён ниже.

Сгенерированный ChatGPT 3.5 текст временных ограничений приведён ниже.

Намеренно отказываясь на данном этапе разработки от выбора оптимального алгоритма сортировки, воспользуемся описанием сортировки пузырьком с сайта СПбГУ ИТМО. Не будем оценивать сложность алгоритмов и скорость работы.

Адаптированный текст программы на языке Си приведён ниже.

Видео процесса сборки, отладки проекта в среде Microsoft Visual Studio и демонстрация работоспособности представлено ниже.

Разработал структурную схему модуля сортировки на основании подпрограммы сортировки на языке Си (будет обновляться в процессе разработки). Определил основные операционные узлы такие как счётчики i, j; регистры: "готовности" и "цикла"; мультеплексоры шин, сумматоры, компараторы. Подразумевается, что блок синхронной памяти будет находится вне модуля (помечен синим цветом). Описал текстом алгоритм стейт-машины.

PDF ~1,33МБ: тыц

PNG (изображение откроется в новой вкладке) ~469KБ: тыц

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

Купил отладочную плату.

Отладочная плата Cyclone V GX Startetr Kit

Отладочная плата Cyclone V GX Startetr Kit

Пишу и одновременно отлаживаю модуль сортировки пузырьком.

Verilog код модуля bublesort.v представлен ниже.

Verilog код модуля test_bench.v представлен ниже.

Схема модуля.

Схема модуля.

Диаграмма машины состояний.

Диаграмма машины состояний.