VHDL - hloupe otazky

balu@home balu na k-net.fr
Čtvrtek Leden 2 00:36:07 CET 2014


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
>


Další informace o konferenci Hw-list