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

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





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



Победил!
Нужно в Qsys указать dual-port для этого onchip_memory, подключаем к клоку и тд, на s2 я ничего не подключал https://screencast.com/t/qzC2b9Qh7BIi

далее в сгенеренном Qsys'ом файле дописал тестовый код-

Код
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
        .address2    (0),                                                 //     s2.address
        .chipselect2 (1'b1),                                                 //       .chipselect
        .clken2      (1'b1),                                                 //       .clken
        .write2      (1'b1),                                                 //       .write
        .readdata2   (datain),                                                 //       .readdata
        .writedata2  (32'hF0F0F0),                                                 //       .writedata
        .byteenable2 (4'b1111),                                                 //       .byteenable
        .clk2        (clk_clk),                                          //   clk2.clk
        .reset2      (rst_controller_reset_out_reset),                   // reset2.reset
        .reset_req2  (rst_controller_reset_out_reset_req),               //       .reset_req
        .freeze      (1'b0)                                              // (terminated)
    );


Запускаем, смотрим память в Си и видим наши байтики - https://screencast.com/t/HUUN9xW0

Всем большое спасибо за помощь!
Go to the top of the page
 
+Quote Post



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

 


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


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