Судя по моему краткому обзору материала, должно быть возможно выполнять чтение или запись DMA с RC на ваш Cyclone V (EP), используя интересующее вас IP-ядро.
Я выполнял чтение и запись DMA на Stratix V, однако он был в дизайне, отличном от Qsys, только с использованием основного блока HIP PCIe (пользовательская логика кодирования и декодирования TLP). Этот блок кажется просто оболочкой вокруг их блока PCIe HIP, который также обрабатывает уровень транзакций для вас.
Первым шагом будет заставить ваш RC выдавать запросы чтения или записи PCIe DMA. В случае запроса на чтение вы захотите отправить запрос на чтение памяти с данными (CplD) длиной более 1 DWORD. Я бы предложил выделить целый BAR для сопоставления области памяти, из которой вы хотите использовать DMA, на FPGA, чтобы упростить нацеливание вашего адреса.
Что касается FPGA, я бы предложил использовать Signal Tap и исследовать сигналы интерфейса Rxm*
на ядре. Таким образом, вы можете увидеть точное время запроса чтения DMA, исходящего от ядра. Я предполагаю, что сигнал RXMRead_<n>_o
станет высоким, указывая на начало запроса. В этот момент вам нужно будет декодировать и передать RxmAddress_<n>_o
и RXMBurstCount_<n>_o
какой-нибудь связующей логике, которая будет извлекать запрошенные данные из памяти FPGA. Когда вы будете готовы отправить данные обратно, подтвердите RXMReadDataValid_<n>_i
для каждого отправляемого допустимого слова.
Я предполагаю, что ядро «Cyclone V Avalon-MM DMA for PCIe», на которое вы ссылались, заботится о той «связующей» логике, о которой я вам говорил, и позволяет вам напрямую подключаться к контроллеру SDRAM на вашей шине Qsys. Altera обычно не шифрует свой мегафункциональный код, поэтому, если ваш системный verilog силен, возможно, стоит покопаться в их сгенерированных файлах и посмотреть, можно ли каким-то образом повторно использовать этот фрагмент кода.
Что касается основных настроек, единственное, на что, как я заметил, вам нужно обратить внимание, — это убедиться, что параметр Single DW Completer выключен OFF. В противном случае ядро отменит любые полученные им запросы, длина которых превышает 1 DWORD.
Надеюсь, это немного помогло.
person
pwolfsberger
schedule
16.02.2015