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