ДМА съгласно изричните протокол PCI?

S

staraimm

Guest
Dear All,

Купих Спартан-3 Starter Kit от фирмата Xilinx.И аз знам как да реализираме трансфер PIO помощта на логиката-кор.Но аз не как да реализираме трансфер ДМА?
Някой може ли да ми кажете как да реализираме трансфер ДМА?Всяка информация, е оценена.

 
Може ли някой да ми помогне?

Как може да комптри знаете PCI Express устройство се превърне в "майстор"?И как може да коригира "мехлем" постигането на трансфер на данни?Added след 4 часа 32 минути:никой не може да ми даде някои съвети?

 
Някой може ли да ми дадете някои предположения?Някой да направи един проект за ДМА на PCI или PCI Express?Благодарности.

 
Има anyboday направи някои проекти за изричното протокол PCI?Дайте ми предложение, Plz.

 
Там не са майстори или роби с PCIe.PCI-E е протокол от точка до точка, когато предава и получава могат да се появят по едно и също време.

"ДМА" е налице, когато се предава надолу по веригата на устройството да чете и пише цикли по-горните порт, т.е. без да се започване от домакина на процесора.

Обикновено там е "ДМА" опашка структура в приемащата памет и свързаните с тях регистри в устройството за управление на веригата на "ДМА" трансфери.

 
Благодаря sbob.

Може ли да ми дадете малко повече информация за това?Аз сърфирате в интернет, но да намеря няколко могат да бъдат полезни.

 
Какво искаш да знаеш?

Запознат ли сте с всички в спецификацията PCIe?Какво ще кажете за PCI?

 
Аз съм чел PCI Express Spec.И аз искам да знам как да добавите контролер ДМА към протокола.

Знам serveral регистри трябва да бъдат реализирани в FPGA, включително адрес, дължина, и статут.Но аз не знам как FPGA изпрати искане на ДМА и как го знам, че може да използвате автобус.

Аз съм сега използват логиката ядрото на фирмата Xilinx да реализираме PCI Express протокол.Но ядрото не е за контрол ДМА част, така че аз съм объркан.

 
ОК.За да започнете с памет четете, можете предава памет четат TLP (с размер на адрес X Y) и изчакайте на проекта с данни, за да се върне.За да започнете с памет пиша ви изпратим памет пиша TLP с данните.Има всякакви прекрасни неща, да внимавате, като не изпращайте повече от макс.полезен товар размер, не преминават границата 4K адрес и др

PCI-E е двупосочен "винаги готов" автобус.Не е необходимо да поиска от автобуса и да чакат за отпускане на безвъзмездна помощ като ПКИ.В автобуса не е споделена, няма съдията.Можете да напишете вашето сделка автобуса TLN на основните Xilinx и чакам за проекта.

За да добавите "ДМА" на Xilinx например PIO, трябва да се променят RX_ENGINE.v да отговори на изпълнение с данни TLPs и TX_ENGINE.v да изпрати памет Write32 или TLPs памет Write64.Обърнете внимание на байт поръчване при изпращане на повече от 4 байта на данни.

Ако искате информация за достойни условия на опашка структури ДМА и реализации, предлагам чудесен излитане на Intel Ethernet контролер стил на ДМА.Те имат опашка на проекта и регистри, да се определи дължината на опашката, главата и опашката и опашката регистри за управление на опашката.

Аз бях завършени продукти, които прилагат "ДМА" с Xilinx PCIe ядро вече, така че ако вашата фирма е в един труден място, мога да консултират, за да ти помогне, ако е необходимо.

 
sbob, благодаря много.

Знам, че PCI-E е двупосочен "винаги готов" автобус, но паметта е споделена от всички устройства.Как може устройство PCIe пишете на памет, както е възможно, тъй като тя не може?Аз съм объркан.Дали "Корен" може да помогне да направите това?Added след 8 минути:Между другото, може ли да разбере ДМА напишете стъпки, както следва:
1.Памет пишете или IO напишете адреса, дължина и т.н. регистри.
2.Памет пишете или IO напишете "Run" се регистрирайте за да осъществи "ДМА напишете дръжка" модул за работа.
3.Когато ДМА напишете работа е свършена, за прекъсване е създаден да информира основните логика, за да изпратим прекъсват информация.И водачът получава прекъсне и се направят някои копие памет.

Разбирането ми е, нали?

Аз съм с тръбата Крайна точка 1-Core v1.3 платно.В конфигурация интерфейс на ядрото, съществуват два сигнала: cfg_interrupt_n, cfg_intr_rdy_n.Мисля, че, когато cfg_interrupt_n е малък, ядро ще изпрати правилния прекъсне и когато "съобщение" е изпратена на ядрото ще определи cfg_intr_rdy_n да са ниски?Но как може да знаем основните които се прекъсва (INTA, INTb, INTC, INTd) ще се задейства?

 
Здрасти,

За реализации чипсет Intel главната комплекс и контролер на паметта, са в същия чип.Арбитражното за памет автобус е извън обхвата на PCIe.Комплексът Коренът може опашката на исканията, направени от много надолу устройства.Латентността на оперативната памет може да варира в зависимост от PCIe други устройства, PCI-E и процесора има достъп до паметта.

 
Добре, аз сега разбирам прехвърлянето ДМА процес.Благодаря много, sbob.

 
sbob, аз реализира DMA контролер за четене / запис на информация от / до физическа памет.Но аз изправени пред друг проблем: Не мога да контролира прекъсне, както аз искам.
Намерих прекъсват контрол информация за логиката на ядрото може да се намери в pcie_pipe_ug167.pdf.
Можеш ли да обясниш как cfg_interrupt_rdy_n и работа cfg_interrupt_n сигнал?

 
някой знае за проблемите на ДМА прекъсва под PCI Express?

 
Здрасти,

Да, Xilinx провалил в изпълнението си на прекъсване функция.Трябва да знаете, ако основата е конфигуриран да използва наследство прекъсва (INTA) или MSI прекъсва и единственият начин да се знае, че е от configuation бита, но те не ви дам, че една страна, така че трябва да го прочетете .Сложих следния код в постоянно да прочетете бита, тъй като аз не знам кога може да бъде променяна или конфигурирани:

/ / трябва непрекъснато да прочетете контрол MSI регистрирайте, за да получите прекъсват
/ / режим - или MSI или INTA
обл cfg_rd_en_n;
обл [9:0] cfg_dwaddr;
обл cfg_msi_enable;

Винаги @ (posedge trn_clk или trn_reset_n negedge) започва
ако (! trn_reset_n) започва
cfg_rd_en_n <= 1'b1;
cfg_dwaddr [9:0] <= 10'h0;
cfg_msi_enable <= 1'b0;
приключвам
иначе, ако (! cfg_rd_wr_done_n) започва
cfg_rd_en_n <= 1'b1;
cfg_msi_enable <= cfg_do [16];
приключвам
иначе започва
cfg_rd_en_n <= 1'b0;
cfg_dwaddr [9:0] <= 10'h12;
приключвам
приключвам

Можете също така трябва да отстояват / deassert cfg_interrupt_n правилно въз основа на които се прекъсва режим сте инча Аз използва следния код, за да го направите:

/ / използване засилено 64-битов интерфейс прекъсват правила:
/ / 1) твърдят, cfg_interrupt_n само ако се предявява cfg_interrupt_rdy_n
/ / 2) deassert cfg_interrupt_n само ако cfg_interrupt_rdy_n се твърди в режим INTA
Винаги @ (posedge CLK или rst_n negedge) започва
ако (! rst_n)
interrupt_sync <= 1'b0;
иначе започва
IF (прекъсва &! cfg_interrupt_rdy_n)
interrupt_sync <= 1'b1;
иначе, ако (! прекъсват &! cfg_interrupt_rdy_n & interrupt_sync &! cfg_msi_enable) / / INTA_N Int
interrupt_sync <= 1'b0;
иначе, ако (! прекъсват interrupt_sync & & cfg_msi_enable) / / MSI Int
interrupt_sync <= 1'b0;
приключвам
приключвам

/ / Пулс cfg_interrupt_n веднъж в режим MSI ...
Винаги @ (posedge CLK или rst_n negedge) започва
ако (! rst_n)
interrupt_sync_delay <= 1'b0;
в противен случай
interrupt_sync_delay <= interrupt_sync;
приключвам
присвоите interrupt_sync_edge = & interrupt_sync (interrupt_sync ^ interrupt_sync_delay);

/ / И да твърди, cfg_interrupt_n до прекъсване се обслужва в режим INTA_N
присвоите cfg_interrupt_n = cfg_msi_enable?~ interrupt_sync_edge: ~ interrupt_sync;Съжаляваме, но глупав за форматиране отговор взема всички допълнителни пространства и раздели ...Sbob

 
Благодаря много, sbob.Сега не мога да задейства прекъсвам.

Но аз искам да знам как да контролирате "прекъсване" на сигнала?АЗ употреба на ФЩМ да се твърди, сигнал за известно време.Но това е така, мога само да прекъсва само за един или два пъти.Дали сигнал се твърди за дълго време?Added след 5 часа и 45 минути:sbob, не ми е проблемът?

 
Имам един прекъсва регистър маска и прекъсване регистър статут.Имам няколко прекъсват източници, които всеки може да генерира импулс прекъсват.Когато съответните прекъсват маска малко е зададен, прекъсване на импулси зададете отделни битове в прекъсват статус регистър, че престоят в стаята, докато ги изчиства софтуер (обикновено в прекъсват рутинна услуга).Моят "прекъсване" на сигнала се твърди, ако прекъсне малко маска е в стаята и прекъсват малко статут е настроен.В обобщение, ми прекъсват сигнала остава твърди, докато не се изчиства от софтуера в прекъсват рутинни статут.

 
Здравейте sbob,
Видях прекъсва изпълнението си на поколение.
Аз направих подобно нещо, но когато го стартирам програмата си в цикъл за изпитване на броя на прекъсва генериран номер е винаги повече от очакваното.<img src="http://images.elektroda.net/69_1170653834.png" border="0" alt="DMA under the PCI express protocol?" title="ДМА съгласно изричните протокол PCI?"/>http://images.elektroda.net/40_1170653834.png
вълната на сигнала, е бил хванат от chipscope

Когато направя памет пишете на определено място, тя определя gen_int сигнали и е deasseted когато аз правя с памет пишете на друг специално място от ISR.тъй като може да заключим от картинката, предвидени над ISR се нарича два пъти

Били ли сте изправени пред подобен вид проблем, ако това е така любезно ми каже какво трябва да се направи, за да coorect си дизайн.

Благодаря предварително

 
Можете ли да публикувате ISR?Мисля, че код и е твърде много време, по време на ISR.Когато настъпи прекъсване, трябва първо изчистете прекъсва веднага щом е възможно.

Друга възможна причина: Споделяте ли прекъсване с друго устройство?

 
тест за моята цел ISR е просто да правиш с памет пишете на определено място.

irqreturn_t ccp_intr_handler (

В Int IRQ,

В невалидни * dev_id,

В struct pt_regs * Regs)
(
грозен дълго lock_flags;

летливи грозен Int * PTR;
Int I;
CCP_DEV * Dev = (CCP_DEV *) dev_id;

/ / # ifdef DEBUG_INFO

printk ( "Аз съм в ccp_intr_handler \ N");

/ / # endif

PTR = (летливи грозен Int *) Dev-> bar_virt_address [0];

spin_lock_irqsave (& Dev-> irq_lock, lock_flags);

* (PTR 0xE) = 0xFF;

spin_unlock_irqrestore (& Dev-> irq_lock, lock_flags);

връщане IRQ_HANDLED;
)

на ISR е споделена, но е споделена с USB контролер и в момента аз имам никакъв USB, свързани със системата.

 

Welcome to EDABoard.com

Sponsor

Back
Top