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

 
 
> Чтение/Запись из 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 13 2017, 22:23
Сообщение #2





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



Спасибо за ответ!

Светодиодами я помигал уже и хочется дальше) Сейчас у молодёжи такая тенденция,- хочется всего и побыстрее)))

Приведённый выше кусочек кода я взял из интернета, и он создаёт инстанс, который можно просмотреть в "In-System Memory Content editor". И в этом инстансе видны записанные hF0F0F0F0 - https://www.screencast.com/t/yOkuCoK2pKxj

Но в сгенерированном проектом файле soc_system.v тоже инстанцируется этот блок:
Код
soc_system_onchip_memory2_0 onchip_memory2_0 (
        .clk        (clk_clk),                                          //   clk1.clk
        .address    (mm_interconnect_0_onchip_memory2_0_s1_address),    //     s1.address
        .clken      (mm_interconnect_0_onchip_memory2_0_s1_clken),      //       .clken
        .chipselect (mm_interconnect_0_onchip_memory2_0_s1_chipselect), //       .chipselect
        .write      (mm_interconnect_0_onchip_memory2_0_s1_write),      //       .write
        .readdata   (mm_interconnect_0_onchip_memory2_0_s1_readdata),   //       .readdata
        .writedata  (mm_interconnect_0_onchip_memory2_0_s1_writedata),  //       .writedata
        .byteenable (mm_interconnect_0_onchip_memory2_0_s1_byteenable), //       .byteenable
        .reset      (rst_controller_reset_out_reset),                   // reset1.reset
        .reset_req  (rst_controller_reset_out_reset_req),               //       .reset_req
        .freeze     (1'b0)                                              // (terminated)
    );


От этого в "In-System Memory Content editor" у меня два инстанса (на скриншоте видно) .

Так вот, когда я записываю память через Си код со сдвигом к AXI порту ( 0xC0000000 ) который должен быть залинкован к soc_system_onchip_memory2_0, то мои байты записываются в 1 инстанс - https://www.screencast.com/t/5W9LjT1jjtP , а добраться во второй инстанс я не нахожу как, пробовал разные сдвиги расчитывать но безрезультатно.

Выходит тот инстанс который я сам создаю не связан с axi портом, а где-то "болтается" в просторах памяти с другим сдвигом.

Буду пробовать работать с тем инстансом который создаётся по дефолту в soc_system.v. Просто странно писать код в сгенерированном файле.

Надеялся что есть возможность получить память в ПЛИСЕ напряму по адресу, типа getmem[0xC0000000]

Всё приходится собирать по крупицам из разных источников, тема сложная, еще раз спасибо за поддержку!





Верно ли понимаю, что мне важно chipselect правильный получить, чтобы инстанцировать модуль этот в правильное пространство памяти?
Go to the top of the page
 
+Quote Post



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

 


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


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