Witam! Prośba jak w temacie. Jak zacząć, na ile jest to wykonalne i czego szukać? Czy postępując krok po kroku to zrobię? Chcę w jednej kości "upchać" parędziesiąt bramek, kilka przerzutników i multiplekserów/dekoderów. Jakie ew. koszty?
Do takich potrzeb polecam użycie programowalnych układów logicznych PLD np typu GAL22V10 (ATF22V10C-15PC)
Układy PLD stanowią grupę wysoce funkcjonalnych, cyfrowych układów scalonych typu programowalnego, a więc takich, w których realizowana funkcja nie jest określana w sposób jednoznaczny na etapie produkcji lecz może zostać dowolnie zaprogramowana przez użytkownika.
W oparciu o większość z aktualnie oferowanych przez przemysł struktur PLD można tworzyć własne układy zarówno kombinacyjne jak i sekwencyjne, a stopień ich złożoności może być porównywalny z takimi układami cyfrowymi jak na przykład procesory.
Podstawowe elementy typowego układu PLD przedstawia rysunek
Są to:
• obwody wejściowe zawierające bufory, inwertery sygnałów wejściowych oraz opcjonalnie przerzutniki
• matryca bramek AND
• matryca bramek OR
• obwody wyjściowe zawierające bufory, inwertery sygnałów wyjściowych oraz również opcjonalnie przerzutniki.
Matryce bramek AND oraz OR mogą posiadać stałą lub programowaną sieć połączeń sygnałów wejściowych. W zależności od zastosowanej opcji układy PLD dzielą się na:
• PROM (Programable Read Only Memory), posiadające stałą matrycę połączeń wejść bramek AND w postaci dekodera adresów oraz programowaną matrycę połączeń wejść bramek OR (uwaga: PROM to pierwotnie rodzaj pamięci trwałej i przynależność tego rodzaju ukłądu do grupy pamięci ROM lub układów PLD zależy od jego konkretnej aplikacji),
• PLA (Programmable Logic Array), posiadające programowaną matrycę połączeń wejść bramek AND oraz programowaną matrycę połączeń wejść bramek OR,
• PAL (Programmable Array Logic), posiadające programowaną matrycę połączeń wejść bramek AND oraz stałą matrycę połączeń wjeść bramek OR,
• GAL (Generic Array Logic), stanowiące rozszerzenie podstawowej architektury układów PAL, polegające na zaopatrzeniu każdego z wyjść układu w programowaną makrokomórkę logiczną OLMC (Output Logic Macro-Cell), zawierającą bramki, przerzutnik i bufor trójstanowy na wyjściu.
Najprostszym układem GAL jest układ scalony o oznaczeniu GAL16V8, opracowany przez firmę Lattice Semiconductor. Układ umieszczony jest w małej obudowie dwurzędowej DIL20 i umożliwia najczęściej zastąpienie kilku tradycyjnych cyfrowych układów scalonych małej i średniej skali integracji. Posiada osiem uniwersalnych wejść (wyprowadzenia: 2, 3, .... 9), oraz dwa wejścia dedykowane: wejście zegarowe CK (wyprowadzenie 1) i wejście kontrolujące trójstanowe wyjścia OE/ (wyprowadzenie 11). Wejścia dedykowane mogą być również wykorzystane jako wejścia uniwersalne. Na wyjściach (wyprowadzenia 12, 13, .... 19) układ posiada osiem makrokomórek logicznych OLMC, z których każda zawiera:
• ośmiowejściową bramkę OR, stanowiacą jeden z ośmiu elementów matrycy o ustalonej konfiguracji połączeń wejść.
Struktura wewnętrznych połączeń układu GAL16V8
• bramkę XOR sterującą funkcją polaryzacji,
• przerzutnik typu D flip-flop,
• zespół programowanych rejestrów określających przepływ sygnałów logicznych w różnych konfiguracjach makrokomórki OLMC.
Każda makrokomórka może być skonfigurowana jako wyjście zwykłe proste lub zanegowane (w układach kombinacyjnych) lub jako wyjście przerzutnikowe proste lub zanegowane (w układach sekwencyjnych).
Programowana matryca bramek AND układu GAL16V8 zawiera 64 bramki AND, z których każda posiada 32 wejścia (plus jedno dodatkowe wejście umożliwiające blokadę całej bramki).
Najprostszy z układów, układ GAL16V8 ma 2048 możliwych połączeń. W bardziej rozbudowanym projekcie może okazać się konieczne wykonanie kilkuset z nich i jest bardzo mało prawdopodobna bezbłędna realizacja tego zadania bez pomocy komputera. Z tego względu wykonanie w postaci układu PLD nawet średnio skomplikowanego układu cyfrowego wymaga komputerowego wspomagania podczas projektowania. Przykładem programu wspomagającego projektowanie ukladów cyfrowych realizowanych w oparciu o PLD jest kompilator CUPL (Universal Compiler for Programmable Logic), który jest światowym standardem w dziedzinie układów programowalnych.
Układ trzeba zaprogramowować programatorem...
Język programowania jest bardzo prosty,przykładowo napisany dekoder "1z10":
Code:
Name dekoder ;
PartNo 00 ;
Date 2007-06-01 ;
Revision 01 ;
Designer KBo ;
Company IMEiA ;
Assembly None ;
Location ;
Device G22V10 ;
Jak zacząć, na ile jest to wykonalne i czego szukać?
nie znam rynku, bo wlasnorecznie nic nie kupuje, ale skoro
procz mini wykladu z pld jeszcze nic nie dostales, to napisze
pare slow;
po pierwsze po co ci to ? to co masz obecnie nie dziala ?
jesli dziala, to zostaw tak jak jest, po co ci klopoty ?
jesli musisz zmienic, i czas goni, to znajdz kogos,
kto juz przynajmniej raz zmontowal i zaprogramowal pld/fpga;
to o czym piszesz jest bardzo proste dla osoby majacej jakies
doswiadczenie, startujacego od zera czekaja jednak tygodnie
nauki i prob;
zakladam oczywiscie, ze masz pelny opis tej plytki z ttl-ami
chcesz zmienic dla zabawy/nauki ?
na rynku sa dwie dominujace firmy oferujace uklady programowalne
i software do programowania tychze - altera i xilinx;
darmowa wersja quartusa, software altery, umozliwia programowanie
mniejszych [az nadto duzych dla twoich biezacych potrzeb] kostek
tej firmy, a w sieci mozna znalezc schematy prostych programatorow;
xilinx tez daje za free 'student version' swojego oprogramowania,
ale z xilinxem nie pracuje, wiec sprawdz jak sie sprawy maja na ich
stronie; [moze lada moment odezwie sie jakis expert od x.]
gale o ktorych pisze marihires, popularne w latach 80-90,
to obecnie niszowe uklady, choc ciagle przydatne dla hobbystow;
porozgladaj sie na stronach altery i xilinxa by mniej wiecej
wiedziec o co chodzi, a na bardziej szczegolowe czy techniczne
pytania z pewnoscia ci tutaj ktos odpowie;
Witam i wielkie dzięki za odpowiedzi! Czy nie wpadł nikt dotąd na pomysł programu działającego na zasadzie projektowania płytek drukowanych? "Wrysowujemy" schemat(bramki, przerzutniki etc.) a program produkuje plik do wrzucenia do programatora. Czy willem poradzi sobie z zaprogramowaniem takiej kostki? Może polecilibyście coś do poczytania w necie a może jakąś sensowną książkę?
Oczywiście, że można równirz w ten sposób "programować" PLD sam robiłem taki projekt w Orcadzie dołączało się bibliotekę z bramkami rysowało schemat kompilowało ale wyleciała mi nazwa ( robiłem to parę lat temu ).
A w ISE ( dla XILNXa ) też można oprócz VHDLa rysować schemat.
"Wrysowujemy" schemat(bramki, przerzutniki etc.) a program produkuje plik do wrzucenia do programatora.
zarowno ise xilinxa jak i quartus altery oferuja edytor schematow;
ale powiedz sobie sam szczerze, chcialbys programowac '51 czy
jakiegos arma rysujac schemat ? dalo by sie, ale po co ...
niestety nie znam literatury, ja sie uczylem korzystajac z helpa
narzedzia i projektujac proste bramki, liczniki itd;
ale powiedz sobie sam szczerze, chcialbys programowac '51 czy
jakiegos arma rysujac schemat ? dalo by sie, ale po co ...
JA[/quote]
Witam i dziękuję! Wydaje mi się to najprostsze-"kopiuję" schemat układu bez wnikania w jego funkcje logiczne, pisania tabelek itp. rozrywek niosących ryzyko pomyłki. Prosto rozumując sądzę, że program mógłby to zrobić sprawniej, analizując funkcję wrysowanego układu a następnie realizując ją za pomocą bramek istniejących w danej kostce programowalnej. Zgadzacie się z moim tokiem rozumowania?
Wydaje mi się to najprostsze-"kopiuję" schemat układu bez wnikania w jego
funkcje logiczne, pisania tabelek itp. rozrywek niosących ryzyko pomyłki.
temat na kilka wieczorow dyskusji;
ale postaram sie zamknac a kilku/nastu/ linijkach; - rysowanie schematow nie jest wolne od ryzyka pomylki, rowniez trudnej do wykrycia;
po polaczeniu ze soba prostokatow o nieznanym/slabo znanym wnetrzu mozesz
byc zaskoczony efektem dzialania;
- aby narysowac schemat, tez trzeba sie nauczyc regul, nie ma tak dobrze, ze napacka
sie prostokaty z biblioteki i pociagnie linie miedzy nimi;
oceniam to mniej wiecej tak: by sporzadzic jakis prosty choc niebanalny projekt
na edytor schematow trzeba poswiecic 2-3 dni nauki, na verilog tydzien, na vhdl
poltora tygodnia;
- narysowany schemat dla fpga jednego producenta jest nieprzenoszalny na kostki
innego producenta, najczesciej rowniez z jednego edytora na inny, program
w vhdl/verilog jest; [o ile nie uzywa sie specyficznych dla vendora makr jak ram,
czy pll, ale na to tez jest sposob]
- stosunkowo latwo jest napisac skrypty ulatwiajace/automatyzujace projektowanie,
ktore operuja na plikach tekstowych, jak to zrobic dla projektu bedacego schematem ?
- efektywnosc, laczac ze soba bloczki z biblioteki nie wycisniemy z fpga ostatnich
mozliwosci, a cena fpga bardzo szybko rosnie wraz z iloscia elementow;
Witam i dziękuję za odpowiedzi. Z możliwością pomyłki przy rysowaniu schematu to ja się tego obawiam. Dziwi Was panowie moje podejście do tematu. Wy zaczynacie od funkcji, którą chcecie zrealizować. A ja tej funkcji nie mam, mam za to schemat, który chcę zastąpić czymś mniejszym i znacznie mniej prądożernym. Wasze posty i kilka godzin sciągania i mam ise xilinxa. Ma on edytor schematów. O jakich zasadach mówisz kolego Ja? Myślałem, że wrysowanie bramek i ich połączeń wystarczy. Spisałem układy i ich ilość w oryginalnym wykonaniu. Mógłby ktoś rzucić okiem i ocenić w jaką kostkę to się może zmieścić?
7400---17
7401---15
7402---2
7404---11
7408---9
7410---5
7420---3
7421---2
7423---1
7430---1
7442---5
7451---1
7474---2
7483---1
7485---1
7486---3
7489---1
7490---1
74121--2
74123--5
74140--4
74145--2
74151--8
74155--1
74157--2
74175--8
74192--9
74193--1
74452--2
To trzeba by upchać. A może jest program analizujący, który na podstawie schematu znajduje funkcję realizowaną wynik daje w postaci akceptowalnej przez różne programy projektujące pld a może nawet mikrokontroler? Może to jest droga? Pytam, żeby nie pchać się w jakąś ślepą uliczkę.
wystarczy, że zrealizujesz schemat i zrobisz syntezę, dostaniesz wtedy wynik zajętości twojego schematu na układzie, musisz go wybrać wcześniej na etapie tworzenia projektu, najlepiej poszukaj jakie są u nas dostępne CPLD Xilinx'a (CPLD "trzyma" konfigurację po odłączeniu zasilania), zacznij od największego i zobaczysz ile % zajmuje twój układ, będziesz mógł sprawdzić czy możesz wziąć coś mniejszego, trochę toporna metoda ale przynajmniej nie musisz czekać aż ktoś oceni ile to mniej więcej będzie zajmować (a rysowania schematu i tak nie unikniesz, więc będziesz to już miał z głowy)
/.../O jakich zasadach mówisz kolego Ja? Myślałem, że wrysowanie bramek i ich połączeń wystarczy.
poprawne wrysowanie wystarczy;
mialem na mysli zasady poslugiwania sie edytorem;
Bruum wrote:
Mógłby ktoś rzucić okiem i ocenić w jaką kostkę to się może zmieścić?
quartus ma opcje 'docelowy uklad: auto', wtedy software sam wybiera
najmniejsza mozliwa kostke, w ktorej zmiesci sie twoj projekt, ise powinno
miec cos podobnego;
jesli nie, pozostaje metoda opisana przez firefox_PL;
quartus ma opcje 'docelowy uklad: auto', wtedy software sam wybiera
najmniejsza mozliwa kostke, w ktorej zmiesci sie twoj projekt, ise powinno
miec cos podobnego;
rzeczywiście ISE też ma taką opcję, wybiera się jedynie rodzinę np. CoolRunner2 CPLD i jako Device: Automatic
Witam i dziękuję za odpowiedzi! Jak zwykle-im dalej w las, tym więcej drzew. Już zacząłem się martwić, że pole edycji schematu jest stosunkowo małe w ise, ale wyczytałem, że może być tu struktura hierarchiczna i można łączyć całość z częściowych schematów. W moim przypadku nawet lepiej-mam sześć płytek połączonych ze sobą i z otoczeniem. Czy jest możliwość powiększenia biblioteki programu o więcej "elementów"? Konkretnie brakuje mi jakoś multiwibratorów w stylu 121 i 123. A może realizuje się je w inny sposób?
Witam. Dzięki kolego PIRoman2-czułem coś takiego przez skórę. Czy w verilogu czy innym vhdl jest możliwość zdefiniowania funkcji, jaką realizuje taki 121? Jeśli program projektujący jest dość "mądry" to sam powinien proponowany przez Ciebie układ wygenerować. Mądra książka wspomina o behawioralnym podejściu do definiowania układu.
Czy w verilogu czy innym vhdl jest możliwość zdefiniowania funkcji, jaką realizuje taki 121?
wszystko /prawie/ mozna, jesli dostatecznie dobrze znasz architekture
fpga /architekture wlasnie, nie vhdl czy verilog/;
taki ´puls generator` jakim jest 121 mozesz zrobic licznikiem, pod
warunkiem, ze dlugosc impulsu jest kilkakrotnie wieksza od okresu
twojego zegara;
ewentualnie mozna zwiekszyc czestotliwosc clocka uzywanego
do odmierzania impulsu za pomoca pll, o ile jest dostepna w fpga;
ograniczenie - dlugosc impulsu bedzie wielokrotnoscia
polowy okresu zegara;
kilku-kilkunasto nanosekundowe impulsy mozna produkowac
wzywalajac przerzutnik i resetujac go wlasnym wyjsciem;
o ile nie zalezy ci na zbyt wielkiej stabilnosci dlugosci trwania
impulsu;
Witam!
Z zainteresowaniem przeczytałem Wasze wypowiedzi nt FPGA i mam podobny problem co Kolega jeśli chodzi o "upakowanie" elementów(kilkanaście) z jeszcze jedną kwestią, otóż:
Otóż mój układ ma za zadanie odebrać nastawę czasową (w postaci ciągu
impulsów) po czasie 3ms od restartu układu (po włączeniu zasilania) i w bardzo krótkim przedziale czasu, natomiast z artykułu o układach np. SPARTAN Xilinx'a wynika, że czas restartu FPGA wynosi od kilku do kilkunastu ms.
Proszę o krótką wskazówkę, czy jest wogóle sens takiej realizacji i jeśli tak jak to rozwiązać. Dziękuję i pozdrawiam.
Grzesiek
/.../Proszę o krótką wskazówkę, czy jest wogóle sens takiej realizacji
i jeśli tak jak to rozwiązać
sprawdz czas startu ukladow cpld takich jak seria max altery,
xilinx na pewno ma ich odpowiednik, te kostki nie laduja swojego
programu z zew. pamieci;
ew. sprawdz, czy nie ma mozliwosci opoznienia startu
zrodla nastawy czasowej, moze mozna go jakos przyblokowac
po wlaczeniu zasilania;
J.A