-
11. Data: 2020-12-07 16:43:23
Temat: Re: VHDL - konwersja bin2bcd
Od: Atlantis <m...@w...pl>
On 07.12.2020 10:04, Grzegorz Kurczyk wrote:
> P.S. A może zamiast licznika binarnego zakoduj licznik BCD.
> Coś na wzór UCY7490 :-)
Jest szansa, że taki design zsyntetyzuje się w wydajny sposób?
Potrzebuję kilku liczników, które będą liczyły do określonej wartości, a
po jej przekroczeniu zresetują się i wygenerują sygnał przepełnienia.
Na razie używam do tego liczników binarnych, których rozmiar ustalam za
pomocą parametru generic dla konkretnej instancji. Licznik resetuje się
po osiągnięciu konkretnej wartości. Wartość z wyjścia licznika
przepuszczam przez konwerter bin2bcd i wyświetlam na wyświetlaczu 7 seg.
Wzorując się na UCY7490 musiałbym dodać logikę, która obserwowałaby
wyjścia i resetowała licznik po zaobserwowaniu konkretnej wartości BCD,
składającej się na dwucyfrową liczbę dziesiętną.
-
12. Data: 2020-12-07 18:00:25
Temat: Re: VHDL - konwersja bin2bcd
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Grzegorz Kurczyk" napisał w wiadomości grup
dyskusyjnych:5fcc1ae7$0$559$6...@n...neostrada.
pl...
W dniu 04.12.2020 o 21:59, Atlantis pisze:
>> Napisałem więc coś następującego:
>> bcdval(7 DOWNTO 4) <= binval/10;
>> bcdval(7 DOWNTO 0) <= binval MOD 10;
>
>> Niestety, synteza kodu wywala się właśnie w tym miejscu, zwracając
>> błąd:
>> "Operator <DIVIDE> must have constnt operands or first operand must
>> be power of 2".
>
>> Wygląda więc na to, że nie mogę w prosty sposób wykonać dzielenia
>> dowolnej liczby przez inną dowolną liczbę.
>VHDL (i Verilog) to nie języki programowania tylko języki opisu
>sprzętu.
>Musisz przestawić swój tok myslenia, co nie jest łatwe.
Ale to nie oznacza, ze nie powinien umiec dzielenia zaprojektowac.
>Wracając do Twojego problemu, to VHDL nie będzie próbował wykonać
>dzielenia, tylko będzie próbował zsyntezować na zasobach CPLD układ
>kombinacyjny realizujący zadaną funkcję dzielenia.
>Dzielenie liczby przez stałą nie będącą wielokrotnością potęgi 2
>będzie wymagać na tyle dużo zasobów, że przekracza to możliwości
>typowego CPLD.
No, ciekawe ... najprosciej byloby tabelke wpisac. Wygenerowac gdzies
obok i tylko wpisac w zrodlo :)
6 bitow wejsciowych, bo najmlodszy idzie bez zmian ... no tak, to moze
byc w architekturze CPLD zabojcze.
J.
-
13. Data: 2020-12-07 18:11:47
Temat: Re: VHDL - konwersja bin2bcd
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Atlantis" napisał w wiadomości grup
dyskusyjnych:5fce4d9b$0$499$6...@n...neostrada.
pl...
On 07.12.2020 10:04, Grzegorz Kurczyk wrote:
>> P.S. A może zamiast licznika binarnego zakoduj licznik BCD.
>> Coś na wzór UCY7490 :-)
>Jest szansa, że taki design zsyntetyzuje się w wydajny sposób?
Jak najbardziej - schemat 7490 nie jest najlepszy, ale 74192 nie jest
skomplikowany.
>Potrzebuję kilku liczników, które będą liczyły do określonej
>wartości, a po jej przekroczeniu zresetują się i wygenerują sygnał
>przepełnienia.
>Na razie używam do tego liczników binarnych, których rozmiar ustalam
>za pomocą parametru generic dla konkretnej instancji. Licznik
>resetuje się po osiągnięciu konkretnej wartości. Wartość z wyjścia
>licznika przepuszczam przez konwerter bin2bcd i wyświetlam na
>wyświetlaczu 7 seg.
>Wzorując się na UCY7490 musiałbym dodać logikę, która obserwowałaby
>wyjścia i resetowała licznik po zaobserwowaniu konkretnej wartości
>BCD, składającej się na dwucyfrową liczbę dziesiętną.
Ale jakies nieokragle liczby, typu np 43 czy 56 ?
Czy mozesz to podzielic na licznik do 10 i np do 6 na starszej cyfrze
?
Takie liczenie w BCD do 43 ... no, ciekawe, schemat/wyrazenia sie
komplikuja, przy pomocy pomocniczej bramki powinno pojsc w miare latwo
... tylko czy VHDL w CPLD sobie z tym poradzi ..
J.
-
14. Data: 2020-12-07 18:19:48
Temat: Re: VHDL - konwersja bin2bcd
Od: "J.F." <j...@p...onet.pl>
Użytkownik "Adam Górski" napisał w wiadomości grup
dyskusyjnych:5fce1f78$0$510$6...@n...neostrada.
pl...
W dniu 04/12/2020 o 21:59, Atlantis pisze:
>> Jak w takim razie powinien być zrealizowany taki konwerter?
>https://www.digikey.com/eewiki/pages/viewpage.actio
n?pageId=60030986
Jesli dobrze rozumiem ... sam chcialem te metode zapronowac, ale ona
jest "sekwencyjna".
Wynik sie pojawi po kilku/nastu cyklach zegara, i trzeba ten zegar
miec.
Dla 2 cyfr dziesietnych ... moze da sie prosciej ukladem
kombinacyjnym.
J.
-
15. Data: 2020-12-07 18:58:01
Temat: Re: VHDL - konwersja bin2bcd
Od: Atlantis <m...@w...pl>
On 07.12.2020 18:11, J.F. wrote:
> Ale jakies nieokragle liczby, typu np 43 czy 56 ?
> Czy mozesz to podzielic na licznik do 10 i np do 6 na starszej cyfrze ?
To ma być klasyczny zegar, który później chciałbym wzbogacić o funkcję
synchronizacji z DCF77. Typowy projekt edukacyjny. ;)
Dlatego też nie byłoby większego problemu ze zliczaniem sekund i minut -
młodsza część zawsze liczy od 0 do 9, od 0 do 5.
Bardziej problematyczny jest licznik. Zależy mi trynie 24 godzinnym,
więc mamy do czynienia z kilkoma możliwościami:
- Jeśli starsza cyfra wynosi 0 ub 1, młodsza liczy od 0 do 9.
- Jeśli starsza cyfra wynosi 2, młodsza liczy od 0 do 3.
Prościej mi było to zaimplementować w postaci licznika binarnego i
tłumaczyć na BCD.
BTW czy gdzieś w VHDL-u istnieje możliwość uzyskania czegoś na wzór
kompilacji warunkowej z języków programowania? Mam na myśli coś takiego,
że przekazuje przez generic określoną wartość i w zależności od niej
tworzę (lub nie) pewne sygnały wewnątrz portu albo architektury.
Pozwoliłoby mi to zawsze oszczędzić trochę zasobów, bo w chwili obecnej
niektóre instancje posiadają wyprowadzone sygnały, które są zdefiniowane
w komponencie, ale których te konkretne instancje nie potrzebują.
-
16. Data: 2020-12-07 19:02:01
Temat: Re: VHDL - konwersja bin2bcd
Od: Atlantis <m...@w...pl>
On 07.12.2020 02:48, Stachu Chebel wrote:
> Nawet nie ma co porównywać. Przepuść sobie implementację tego co masz
> zrobione na CPLD z ustawieniem na najprostszego Spartana-3 i popatrz na
> raport wykorzystania zasobów. Nie ma najmniejszego problemu jeśli chodzi
> o zaimplementowanie procesora w FPGA.
Może w takim razie Xilinx produkował jakieś prostsze FPGA, które byłyby
względnie kompatybilne pinowo ze swoimi starszymi układami CPLD?
Konkretnie mam na myśli rodzinę CoolRunner w 100 pinowej wersji obudowy.
Zdaję sobie sprawę z tego, że nie wszystko może pasować (bo chociażby
pamięć trzeba podpiąć) ale gdyby piny zasilania, masy, Clk, Rst i JTAG
były w tych samych miejscach, to znacznie prościej byłoby
przeprojektować płytkę. :)
-
17. Data: 2020-12-07 19:14:41
Temat: Re: VHDL - konwersja bin2bcd
Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>
W dniu 07.12.2020 o 18:58, Atlantis pisze:
> On 07.12.2020 18:11, J.F. wrote:
>
>> Ale jakies nieokragle liczby, typu np 43 czy 56 ?
>> Czy mozesz to podzielic na licznik do 10 i np do 6 na starszej cyfrze ?
>
> To ma być klasyczny zegar, który później chciałbym wzbogacić o funkcję
> synchronizacji z DCF77. Typowy projekt edukacyjny. ;)
> Dlatego też nie byłoby większego problemu ze zliczaniem sekund i minut -
> młodsza część zawsze liczy od 0 do 9, od 0 do 5.
> Bardziej problematyczny jest licznik. Zależy mi trynie 24 godzinnym,
> więc mamy do czynienia z kilkoma możliwościami:
> - Jeśli starsza cyfra wynosi 0 ub 1, młodsza liczy od 0 do 9.
> - Jeśli starsza cyfra wynosi 2, młodsza liczy od 0 do 3.
>
> Prościej mi było to zaimplementować w postaci licznika binarnego i
> tłumaczyć na BCD.
Wręcz przeciwnie. Prościej zrobić asynchroniczne liczniki od 0 do 9 i od
0 do 5 łącząc je w kaskadę. Licznik asynchroniczny 0..9 liczący w górę
to cztery przerzutniki i jedna bramka AND
Jaki to konkretnie CPLD? Xilinx?
Coś mi się kojarzy, że w niektórych CPLD sygnały zegarowe wszystkich
przerzutników są na stałe połaczone ze sobą co wyklucza licznik
asynchroniczny. Z drugiej strony synchroniczny nie jest dużo bardziej
skomplikowany
> BTW czy gdzieś w VHDL-u istnieje możliwość uzyskania czegoś na wzór
> kompilacji warunkowej z języków programowania? Mam na myśli coś takiego,
> że przekazuje przez generic określoną wartość i w zależności od niej
> tworzę (lub nie) pewne sygnały wewnątrz portu albo architektury.
> Pozwoliłoby mi to zawsze oszczędzić trochę zasobów, bo w chwili obecnej
> niektóre instancje posiadają wyprowadzone sygnały, które są zdefiniowane
> w komponencie, ale których te konkretne instancje nie potrzebują.
syntezer powinien automatycznie zredukować nieistniejące połaczenia
redukując potrzebne zasoby
--
Pozdrawiam
Grzegorz
-
18. Data: 2020-12-07 19:47:19
Temat: Re: VHDL - konwersja bin2bcd
Od: Atlantis <m...@w...pl>
On 07.12.2020 19:14, Grzegorz Kurczyk wrote:
> Jaki to konkretnie CPLD? Xilinx?
CoolRunner II, konkretnie XC2C128. Docelowo miał być XC2C256, ale pod
ręką miałem tylko 128 w 100 pinowej wersji obudowy. W tej chwili nigdzie
w polskich sklepach nie widzę wersji 256, a miejsce w układzie powoli
się kończy. ;)
-
19. Data: 2020-12-07 20:08:48
Temat: Re: VHDL - konwersja bin2bcd
Od: Grzegorz Kurczyk <g...@c...usun.slupsk.pl>
W dniu 07.12.2020 o 19:47, Atlantis pisze:
> On 07.12.2020 19:14, Grzegorz Kurczyk wrote:
>
>> Jaki to konkretnie CPLD? Xilinx?
>
> CoolRunner II, konkretnie XC2C128. Docelowo miał być XC2C256, ale pod
> ręką miałem tylko 128 w 100 pinowej wersji obudowy. W tej chwili nigdzie
> w polskich sklepach nie widzę wersji 256, a miejsce w układzie powoli
> się kończy. ;)
Jak oglądam budowę makroceli, to powinieneś bez problemu zbudować
zarówno licznik synchroniczny jak i asynchroniczny.
A co ciekawsze prawdopodobnie zajmie to tyle samo zasobów.
Jeden bit licznika, to jedna makrocela.
w Verilogu taki licznik synchroniczny to
reg [3..0] licznik;
always @(posedge clk)
if(reset | (licznik = 9)) then
licznik <= 0;
else
licznik <= licznik + 1;
W przypadku zegara calkowicie nie widzę sensu robić licznika binarnego i
konwertować do BCD. Łatwiej wszystko robić w BCD.
--
Pozdrawiam
Grzegorz
-
20. Data: 2020-12-07 20:21:27
Temat: Re: VHDL - konwersja bin2bcd
Od: Stachu Chebel <s...@g...com>
poniedziałek, 7 grudnia 2020 o 19:02:03 UTC+1 Atlantis napisał(a):
> Może w takim razie Xilinx produkował jakieś prostsze FPGA, które byłyby
> względnie kompatybilne pinowo ze swoimi starszymi układami CPLD?
> Konkretnie mam na myśli rodzinę CoolRunner w 100 pinowej wersji obudowy.
> Zdaję sobie sprawę z tego, że nie wszystko może pasować (bo chociażby
> pamięć trzeba podpiąć) ale gdyby piny zasilania, masy, Clk, Rst i JTAG
> były w tych samych miejscach, to znacznie prościej byłoby
> przeprojektować płytkę. :)
FPGA i CPLD to dwie różne filozofie. Na żadną kompatybilność pinową nie ma
co liczyć. Tylko przeprojektowanie PCB wchodzi w rachubę.
A co do podpinania pamięci, to zależy ile jej potrzebujesz. Wszystkie obecnie
produkowane FPGA mają na pokładzie pamięć BRAM, którą możesz konfigurować
w dowolne bloki. Popatrz sobie w dataszity i oceń sam co się lepiej opłaca.
Pamięć zewnętrzna lub wewnętrzna w FPGA. Wybór należy do Ciebie.