реклама на сайте
подробности

 
 
> Чтение/Запись из HPS в FPGA и наоборот
chipmasta
сообщение Nov 13 2017, 19:18
Сообщение #1





Группа: Участник
Сообщений: 6
Регистрация: 13-11-17
Пользователь №: 100 178



Всем привет! Я только начал вникать в мир ПЛИС но столкнулся со слишком уж большим количеством входных данных) Сам программист, решил вот с железом "пообщаться"
Задача стоит, как мне казалась простая - из HPS записать данные в RAM FPGA, в FPGA эти данные прочитать, и записать туда же в RAM "ответ".
Имеем : De0 Nano SoC, за основу взять проект который идёт в комплекте GHRD. Квартус 17.
Смотрим в Qsys, там уже имеется блок onchip_memory2_0, который даст нашему HPS доступ к RAM. С этим доступом вроде как всё ясно - в Си приложении работаем с /dev/mem, базовый адрес у нас по 0xC0000000. И действительно - работает. Если в блоке onchip_memory2_0 постаивть галочку "доступно для In-System memory Editor" то можно посмотреть этот RAM, увидеть и изменения сделанные со сторны HPS. Здесь всё хорошо.
А вот с чтением этих байтов в ПЛИС у меня полный ступор, от слова совсем) Я нашел в soc_system.v (который я так понял генерится из Qsys) как инстанцируется модуль onchip_memory2_0. Дальше что?

Я пробовал инстанцировать свой onchip_memory2_0 и даже записать туда данные -

Код
soc_system_onchip_memory2_0 m(.address(0)
, .byteenable(4'b1111)
, .chipselect(1)
, .clk(FPGA_CLK1_50)
, .clken(1'b1)
, .reset(hps_fpga_reset_n)
, .reset_req(1'b0)
, .write(1'b1)
, .writedata(32'hF0F0F0F0)
, .readdata(datain)
);


в таком случае я вижу два инстанса в эдиторе, и даже вижу записанные байты, НО к этому инстансу не могу достучаться из HPS...

Люди добрые, подскажите, как реализовывать в Верилоге... как будет выглядеть код который запишет/прочитает данные в этот, доступный для HPS, RAM ?
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
chipmasta
сообщение Nov 14 2017, 00:02
Сообщение #2





Группа: Участник
Сообщений: 6
Регистрация: 13-11-17
Пользователь №: 100 178



Возможно я неверно решаю задачу. К примеру линукс получает данные по сети, плис эти данные должен обработать, результат вернуть в линукс, а линукс уже по сети даст ответ в сторонний сервис.
Решил сделать так:
1. в блоке always плис мониторит флаг впамяти, назовём его requestReady
2. линукс закидывает в память данные для обработки и меняет флаг requestReady на 1. и в цикле начинает мониторить флаг в памяти answerReady
3. плис увидев что requestReady == 1, забирает данные для обработки, обрабатывает и закидывает в память ответ, меняя флаг answerReady на 1
4. линукс увидев что answerReady == 1, забирает ответ сгенеренный в плисе

Верна ли логика и какое самое быстрое и оптимальное решение? Данных не много, но поток постоянный.
Из тех знаний что я собрал, решил что работа через soc_system_onchip_memory2_0 будет самым верным решением. Вот теперь пытаюсь понять как это в верилоге реализовать) Думал что это одна из самых распространённых задач, но фактически не могу найти ни одного дельного туториала. Буду благодарен за любую информацию.

Сообщение отредактировал chipmasta - Nov 14 2017, 00:02
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 27th July 2025 - 19:33
Рейтинг@Mail.ru


Страница сгенерированна за 0.0137 секунд с 7
ELECTRONIX ©2004-2016