Jump to content

    

Recommended Posts

2 часа назад, Yuri124 сказал:

А какой контроллер используете? https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_embedded_ip.pdf

Если тот, который в п.29 - то у него

 

 

да это он. 

это возможности dma, те какими размерностями "слов" можно трансферить данные. На сколько я понял просто выбираешь один или несколько или все размерности и доопределяешь уже в регистре контроля перед трансфером.

 

у меня основная проблема в том что я не могу записать регистры. 

я сильно начинающий разработчик, но с хорошим опытом системного программирования, поэтому возможно изначально не правильно выбрал подход  работы с dma ip. 

 

 

Edited by Drakonof

Share this post


Link to post
Share on other sites

 

2 hours ago, Drakonof said:

это возможности dma, те какими размерностями "слов" можно трансферить данные

Да, уже сам понял, что не в этом дело :)

Если щелкнуть по интерфейсу (control port slave) или же по всему блоку DMA - не появляется ли подсказка - временная диаграмма работы шины - какие сигналы в какой последовательности подавать?

Edited by Yuri124

Share this post


Link to post
Share on other sites
On 6/26/2020 at 7:45 PM, Drakonof said:

правильно ли я задаю смещения регистров? в даташите написано просто 0,1,2,3,6, но передавая эти цифры нужно ли их домнажать на 4?

Какая ширина шины адреса control port? Если 3 бита - то будет по 4 байта на единичное приращение адреса.

Share this post


Link to post
Share on other sites
55 минут назад, Yuri124 сказал:

Какая ширина шины адреса control port? Если 3 бита - то будет по 4 байта на единичное приращение адреса.

С этим разобрался. Ширина 3 бита, следовательно адресация регистров 1,2 и тд. 

3 часа назад, Yuri124 сказал:

 

Да, уже сам понял, что не в этом дело :)

Если щелкнуть по интерфейсу (control port slave) или же по всему блоку DMA - не появляется ли подсказка - временная диаграмма работы шины - какие сигналы в какой последовательности подавать?

 

Там единственная ссылка на документацию в которой всё взаимодействие с ядром идет через ниос и следовательно через api драйвера. 

Не хочу программно делать, слишком затратно ради одного dma ставить ниос..  Хотя повторюсь, что пробовал программно это сделать и оно работало.

Как через стэйт машин заставить его работать не понимаю, может не предназначено, но это было бы странно

Edited by Drakonof

Share this post


Link to post
Share on other sites

Так а временную диаграммку QSYS не подсказывает?

У вас сигнал записи постоянно активный, может его дергать нужно (но это вряд ли) или сначала выставить на шину адрес-данные, потом - сигнал записи...

Попробуйте сделать такой этап - записать в регистр и считать из него  - до тех пор, пока не получится.

Я применял sgdma (который в главе 30) - заработал сразу. Этот DMA не пробовал - надо была 64-битная шина адреса.

Share this post


Link to post
Share on other sites
29.06.2020 в 10:19, Yuri124 сказал:

А какой контроллер используете? https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/ug/ug_embedded_ip.pdf

Если тот, который в п.29 - то у него

 

 

я могу  его  поставить, но боюсь что никогда не работал с дескрипторами  и плохо представляю что это. Можно попробовать.. 

Вы этим ip из стэй машины управляете  или из Nios?

 

Share this post


Link to post
Share on other sites

почитал доку к dma, посмотрел код. Ну вы же не заполняете регистры корки DMA.

 

1) state == 0. В регистр 1 хотите писать адрес источника (30000), но не пишите в регистр ничего. write = 0
2) state == 2. В регистр 2 хотите писать адрес получателя (31000), но не пишите в регистр ничего. По прежнему write = 0;

и тд..

то есть у вас регистры вообще не заполняются.

Нужно при каждом НЕ холостом state (0, 2, 4, 6, ...) дергать write в единицу. И потом ее сбрасывать (кстати не обязательно, но наверное лучше в ноль ставить при state 1, 3, 5, 7...)

Но я делаю обычно так

always @(posedge clk) begin
	if (write)
  		write <= 1'b0;
end
  	

Так у меня дергается write на 1 такт

ps. На шестом стейте вы запускаете трансфер, пытаетесь прописать 9. Будет побайтно перекидывать память. Можно попробовать писать значение 12 (в десятичной системе) в регистр. Будет по 4 байта перекидывать.

Edited by new123

Share this post


Link to post
Share on other sites
1 hour ago, Drakonof said:

этим ip из стэй машины управляете  или из Nios?

Из автомата. Только обычно автоматы я пишу из 2-3 always блоков - не нужно запоминать, какой сигнал когда установлен и когда его нужно сбрасывать, сбрасывается автоматически. И сигналы устанавливаются сразу в "текущем" состоянии, а не в следующем. (может, несколько сумбурно объяснил).

15 minutes ago, new123 said:

write = 0

Так там же write_n.

Share this post


Link to post
Share on other sites

 

46 минут назад, new123 сказал:

state == 0. В регистр 1 хотите писать адрес источника (30000), но не пишите в регистр ничего. write = 0

спасибо.

Но разве там сигнал write_n не инверсный? те для записи регистра нужно ставить 0, а не 1.

9 минут назад, Yuri124 сказал:

Из автомата. Только обычно автоматы я пишу из 2-3 always блоков - не нужно запоминать, какой сигнал когда установлен и когда его нужно сбрасывать, сбрасывается автоматически. И сигналы устанавливаются сразу в "текущем" состоянии, а не в следующем. (может, несколько сумбурно объяснил).

Простите, не будет нагло попросить у Вас пример для sgdma? думаю лучше ставить ту ip по которой совершенно точно можно проконсультироваться) 

Share this post


Link to post
Share on other sites
31 minutes ago, Drakonof said:

Но разве там сигнал write_n не инверсный? те для записи регистра нужно ставить 0, а не 1.

наверное пора изучить шину Avalon-MM =)

https://www.intel.com/content/dam/www/programmable/us/en/pdfs/literature/manual/mnl_avalon_spec.pdf

конкретно раздел 3.5 и таблицу 9 из раздела 3.2

31 minutes ago, Drakonof said:

write_n не инверсный?

в альтеровский доках это называют Active Low. Но в авалоне этот сигнал Active High

 

Quote

Except for Avalon Conduit interfaces, each interface may include only one signal of each signal role. Many signal roles allow active-low signals. Active-high signals are generally used in this document

 

write write_n 1 Master → Slave Asserted to indicate a write transfer. If present, writedata is required.

 

Такс, я прошу меня извинить.

Дочитал дальше 

Quote

Some Avalon-MM signals can be active high or active low. When active low, the signal name ends with _n.

Интересно, что у меня при экспорте наружу никогда не экспортировался _n сигнал, я даже не знал о его существовании. Правда наружу авалон я всегда вытаскивал через Avalon Pipeline Bridge

Edited by new123

Share this post


Link to post
Share on other sites
15 минут назад, new123 сказал:

Такс, я прошу меня извинить.

Дочитал дальше 

В любом случае большое спасибо, что стараетесь помочь) это приятно)

 

Edited by Drakonof

Share this post


Link to post
Share on other sites

 

Посмотрел первое сообщение ваше. Вы юзаете Lite Quartus 18

А внизу вам QSYS пишет, мол поддержка DMA Controller будет в релизе Standart. Может в этом причина?
Погуглил, таких сообщений хватает, там всем отвечают, что тогда нужно юзать в Standart

 

А модератор Альтеры отвечает что с 18.1 Лайта есть поддержка

https://community.intel.com/t5/Programmable-Devices/Will-the-DMA-Controller-altera-avalon-dma-nbe-supported-in/m-p/663673/highlight/true

Edited by new123

Share this post


Link to post
Share on other sites
56 minutes ago, Drakonof said:

пример для sgdma?

прямо сейчас не могу, после выходных постараюсь, если еще будет актуально.

Но там сложного ничего нет, интуитивно понятно сигналы выставляются. Единственное, в каком-то IP блоке было такое, чтобы стереть - надо было писать 1, а не 0.

 

Посмотрите http://www.sunburst-design.com/papers/CummingsICU2002_FSMFundamentals.pdf  

Edited by Yuri124

Share this post


Link to post
Share on other sites
20 минут назад, new123 сказал:

 

А модератор Альтеры отвечает что с 18.1 Лайта есть поддержка

я думаю, если бы она была не доступна в lite, то qsys не сгенерировался бы, плюс из ниоса эта ip работает. 

8 минут назад, Yuri124 сказал:

прямо сейчас не могу, после выходных постараюсь, если еще будет актуально.

Но там сложного ничего нет, интуитивно понятно сигналы выставляются. Единственное, в каком-то IP блоке было такое, чтобы стереть - надо было писать 1, а не 0.

 

Посмотрите http://www.sunburst-design.com/papers/CummingsICU2002_FSMFundamentals.pdf  

 

я так же про данный dma думал))))

да, всё еще будет актуально) спасибо. Почитал про дескрипторы и sg режим, мне понравилось, мне кажется лучше её поставить, хорошенько в ней разобраться и тогда можно её к pcie прикрутить.

Share this post


Link to post
Share on other sites

Взял Ваш DMA IP (из 15-го Квартусв), поставил в QSYS, щелкнул по порту управления - получил временную диаграмму работы с портом. 

4.thumb.png.f742c3068f6c34d18a0d59e2187239f1.png

 

Надо три такта, чтобы сделать запись или чтение в порт.

 

Возможно (но это не точно - нужно пробовать) - если писать/читать последовательно по ряду адресов - можно на третьем такте выставлять данные для следующего адреса, при этом не "щелкать" сигналами /CS и /WR

Edited by Yuri124

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.