Код SOC для отправки данных по ethernet

Код, который отправляет данные о пикселях по строкам на PC через ethernet. В ПЛИС есть две двухпортовые DRAM памяти. Пока в одну память пишутся данные с ПЛИС, с другой Linux читает данные и передает данные по ethernet. Для синхронизации их используется регистр. Когда ПЛИС закончила писать данные в одну память и начинает в другую, байт в этом регистре меняет свое значение на противоположное, и служит сигналом для Linux о начале чтения.  Linux читает намного быстрее чем пишет FPGA.

При создании проекта в Quartus`е мы создаем память, двунаправленную, которая с одной стороны подключается к процессору через мост h2p_lw по определенному адресу этой шины, а с другой стороны к  FPGA. Чтобы обратиться к этой памяти, нам сначала надо определить её виртуальный адрес. Для этого, мы открываем файл /dev/mem (40) , и с помощью функции mmap() (44), получаем интересующий нас адрес.  Далее в нем прибавляем адрес моста h2p_lw  и адрес памяти в нем с маскировкой нужных битов (51-53).

Программа запускается из консоли, через SSH. При запуске параметром вводиться IP адрес, куда будут посылаться данные.  После заполнения структур отправителя и получателя, запускается  цикл while, который проверяет значение регистра reg1. Если в нем изменяется значение начинается отсылка пакета, и данные для этого берутся по адресам вычисленным в строках 52,53.  Параметр  1000 означает, что оттуда читается по 1000 байт.

Сам проект можно скачать отсюда.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *