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