VHDL - hloupe otazky

hw na itherm.cz hw na itherm.cz
Čtvrtek Leden 2 00:43:03 CET 2014


S blokem na spi pocitam, to je mi jasne.

Cteni bude stale stejne, jedna se o pullovani dat I/O modulu, tzn zapsat
3byte, prijmout 16byte dat.
Udelam to tedy stavovym automatem, tady bude jednoduchy.

Dekuju, bal jsem se hlavne ze jsem neco prehledl a chci to delat zbytecne
slozite.

Pavel


-----Original Message-----
From: Hw-list [mailto:hw-list-bounces na list.hw.cz] On Behalf Of balu na home
Sent: 2. ledna 2014 0:36
To: HW-news
Subject: Re: VHDL - hloupe otazky

hlupe otazky nie su :-)

Ako pisal kolega David, klucove slovo je stavovy automat, alebo anglicky
state machine.

Napiste si genericky blok SPI interface (tiez je to s velkou
pravdepodobnostou stavovy automat), ktory sa spusti pulzom start a po
ukonceni cinnosti zase vygeneruje pulz hotovo.
Pri spusteni si precita vstupne data a pri ukonceni citania zase na vystup
vypluje precitane data.

Potom si pripravte druhy stavovy automat, ktory bude pripravovat data a
spustat vysielanie, resp. zbierat prijate data. Presne tak ako to robite v
programe.

Sekvencia moze vyzerat nasledovne

- priprav byte 1 na odoslanie a posli start pulz
- cakaj na hotovo
- priprav byte 2 na odoslanie a posli start pulz
- cakaj na hotovo
- priprav byte 3 na odoslanie a posli start pulz
- cakaj na hotovo
- spusti citaciu sekvenciu, priprav na zbernicu adresu kam sa zapise prvy
bajt
- ked pride hotovo zapis data do pamate
- spusti citaciu sekvenciu, priprav na zbernicu adresu kam sa zapise druhy
bajt .
.
.
- spusti citanie 16. bajtu


Zhodou okolnosti som nieco podobne asi pred rokom robil. Male CPLD cita
16 kanalovy AD prevodnik po SPI a data posiela po seriovej linke von.
http://dvaluch.web.cern.ch/dvaluch/temp/sequencer/
(je to klikatelne, prejdite si cely kod) Blok channelsequencer pripravuje
cislo nasledujuceho kanala ktory sa ma navzorkovat. Ma vystupy
startconversion a next channel.
Tieto sa pouziju ako vstup do bloku ADCsequencer, ktory nie je nic iny ako
SPI interface. Po spusteni prejde 16 bitov a vyhodi pulz valid a odmerane
data.
Tieto potom sluzia na spustenie serioveho prenosu po optickom vlakne z bloku
link_seq a zaroven povedia channel sequenceru ze moze ziadat o dalsi kanal.
Linkseq je modifikovane SPI, posiela po jednom vlakne clock a po druhom
vlakne na nabeznej hrane data a na padajucej hrane /CS signal.
Multiplexer init sluzi na inicializaciu ad prevodnika. Muselo sa to cele
zmestit do 256 makroceloveho cpld takze je to robene 'dirty' ale s ohladom
na optimalizaciu pouzitej logiky.

b.




On 01/01/2014 23:45, hw na itherm.cz wrote:
> Zdravim konferu,
>
> Po otazkach na signed/unsigned mam dalsi hloupy dotaz na VHDL.
>
> Chtel bych vycitat nejaka data pomoci SPI.
>
> Jsem schopny udelat odesilani bajtu po spi a prijde mi to celkem ok.
>
> Jak se ale pak dela napriklad situace kdy potrebuju zapsat 3 byte, 
> precist jich 16 a prijata data zapsat do ruznych registru.
>
> V klasickem programovacim jazyku si udelam funkci na zapis/cteni byte 
> po spi, a tu budu pravidelne volat.
>
> Jak se ale podobne veci resi ve vhdl.
>
> Napada me udelat si process s citacem do 19 a pomoci CASE a WHEN pro 
> jednotlive byte vzdy udelat spravnou udalost (povolit prijem, zapsat 
> do registru, zvysit citac o 1)
>
> Je toto spravny postup?
>
> Diy za rady
>
> Pavel
>
>
>
> _______________________________________________
> HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz 
> http://list.hw.cz/mailman/listinfo/hw-list
>
_______________________________________________
HW-list mailing list  -  sponsored by www.HW.cz Hw-list na list.hw.cz
http://list.hw.cz/mailman/listinfo/hw-list



Další informace o konferenci Hw-list