Skocz do zawartości

Pokrótce o co tu chodzi ;)


zaquadnik

Pomocna odpowiedź

Cóż, zasygnalizowałem potrzebę stworzenia na forum działu dotyczącego logiki programowalnej. Tutaj będą umieszczane posty dotyczące układów GAL, CPLD i FPGA. Jeśli ktos z was miał z tym do czynienia niech zasygnalizuje mi na forum lub na priva. Wkrótce postaram się napisać trochę o układach programowalnych 🙂 Takie informacje ogólne na temat architektury i z czym to się je 😉

Link do komentarza
Share on other sites

Dawno dawno temu, kiedy ludziki męczyły się ze składaniem układów ze scalakó TTL Intel wymyślił mikroprocesor i nagle pojawiły się nowe możliwości, bo powstał układ uniwersalny. Ale szybko okazało się, że programowe wykonywanie pewnych zadań jest dużo wolniejsze niż sprzętowe. Pojawił się pomysł, aby stworzyć uniwersalne układy cyfrowe, które dałoby się "zaprogramować" na wykonanie określonej funkcji. Tak powstały pierwsze układy, czyli PAL,PLA i GAL (Generic Array Logic). Składały się z programowalnej matrycy iloczynów logicznych z doprowadzonymi wejściami oraz komórek wyjściowych wyposarzonych w przerzutniki. Połączenia w matrycy a także wewnątrz komórek można było programować. Następnie układy programowalne ewoluowały w SPLD, CPLD i FPGA. Różnią się one między sobą nie tylko liczbą bramek, ale także architekturą. Z czasem jednak powstał problem sposobu implementacji układów logicznych w coraz bardziej złożonych układach PLD. Rysowanie schematów jest bardzo żmudne, więc leniwi ludzie wymyślili specjalne języki opisu sprzętu - HDL (Hardware Description Language). Chodzi w nich o to, że w języku przypominającym nieco język programowania dokonujemy precyzyjnego, behawioralnego (czyli tego jak się zachowuje) opisu sprzętu. Jednak należy pamiętać o tym, że nie jest to programowanie i filozofia pisania takiego opisu jest nieco inna niż filozofia programowania. Najpopularniejszymi językami HDL są VHDL i Verilog. Do programowania układów GAL stosuje się raczej język ABEL a nawet specjalną odmianę języka C (pisałem w czymś takim). Zamieszczam fragment wykładu dotyczący akurat układow PLD, powinien on nieco wyjaśnić. A poniżej kod w Verilogu opisujący licznik 74192 🙂

module licznik(P,Q,PL,TCU,TCD,CPU,CPD,MR); 

input [3:0] P; 
input PL,TCU,TCD,CPU,CPD,MR; 

output [3:0] Q; 

wire [3:0] P; 
wire PL,TCU,TCD,CPU,CPD,MR; 
wire general_clk; 

reg [3:0] Q; 

assign general_clk = (CPD) ? TCD : ((CPU) ? TCU : 1'b0); 

always @(negedge general_clk or negedge MR or posedge CPU or negedge PL or posedge CPD) 
	begin
		if(~MR) Q = 4'b0000; 
		else
			begin
				if(CPU && PL) 
					begin
						Q = Q + 1; 
						if (Q >= 4'b1010) Q = 4'b0000; 
					end
				else if (CPD && PL) 
					begin
						Q = Q - 1; 
						if (Q == 4'b1111) Q	= P; 
					end
				else if(~PL) Q = P; 
				else Q = 4'b0000; 
			end
	end

endmodule

PLD.pdf

Link do komentarza
Share on other sites

Dobrze, ale czym różni się taki układ od takiego mikroprocka? Czy to coś to jest to samo co te zwykłe mikroprocki tylko że ma własny język? I czy to coś da się programować w jakieś odmianie assemblera?

Link do komentarza
Share on other sites

Zarejestruj się lub zaloguj, aby ukryć tę reklamę.
Zarejestruj się lub zaloguj, aby ukryć tę reklamę.

jlcpcb.jpg

jlcpcb.jpg

Produkcja i montaż PCB - wybierz sprawdzone PCBWay!
   • Darmowe płytki dla studentów i projektów non-profit
   • Tylko 5$ za 10 prototypów PCB w 24 godziny
   • Usługa projektowania PCB na zlecenie
   • Montaż PCB od 30$ + bezpłatna dostawa i szablony
   • Darmowe narzędzie do podglądu plików Gerber
Zobacz również » Film z fabryki PCBWay

Otóż logika programowalna różnie się od procesora tym, że w procesorze jego strukturę masz zdefiniowaną "na sztywno", nie możesz nic w sprzęcie zmienić. Przykładowo, jeśli procesor jest 8-mio bitowy to taki już pozostanie. Procesor jest tak zaprojektowany aby reagoewać na określone zbiory bitów zwane rozkazami. Może wykonywać program najczęściej tylko sekwencyjnie, przykładowo 1 mnożenie w procesorze 8051 trwa chyba 3 cykle maszynowe i tego nie przeskoczysz. Natomiast FPGA można wyobrazić sobie jako taki "pusty" scalak, w którym projektujesz sobie dowolny układ cyfrowy, może to być także dowolny procesor 🙂 Dzięki temu można zaprojektować układ taki, który w jednym cylku zegara wykonuje 16 mnożeń (w wypadku XC3S400) 🙂 Języki HDL polegają na tym, że Ty mówisz jak ma działać ukłąd, który masz na myśli. Przykładowo przerzutnik D słownie możemy opisać jako: jeśli linia rst (reset) jest w stanie niskim, to przerzutnik ma przyjąć wartość logiczną 0 w przeciwnym wypadku na narastającym zboczu zegara (clk) ma wczytać daną. Opis w VHDL tego będzie wyglądał mniej więcej tak:


Przerzutnik_D : process (clk,rst) is
begin
      if rst = '0' then
            wyjscie <= '0'; 
      eslif rising_edge(clk) then
            wyjscie <= wejscie; 
      end if; 
end process przerzutnik_D; 

Słowo komentarza do kodu. Pominąłem tu deklaracje portów, jest jednak ona bardzo ważna. Jeśli ktoś miałby ochotę zgłąbiać VHDL mogę trochę poprowadzić 🙂

W oprogramowaniu dostarczonym przez producenta FPGA znajduje się program zwany syntezerem. Jego zadaniem jest interpretacja tego, co mu nabazgraliśmy (w tym wypadku opisu przerzutnika D) i zamianie go na schemat układu cyfrowego. W tym wypadku oczywiście syntezer od razu zobaczy, że to jest przerzutnik D i w FPGA zostanie użyty jeden z przerzutników. Oczywiście każdy układ FPGA ma ograniczoną liczbę bramek, przerzutników, linii I/O i innych typu sprzętowe mnożniki, pamięci SRAM, interfejsy.

Po syntezie mamy gotowy schemat logiczny układu, który możemy sobie podejrzeć, o ile oprogramowanie takie coś umożliwia. Dalej następuje implementacja układu w konkretną matrycę FPGA. Program rozmieszcza poszczególne elementy w matrycy, a następnie wykonuje trasowanie połączeń. Po implementacji mamy gotowy plik binarny, który wgrywamy do FPGA celem ustawienia odpowiednich połączeń. Gwoli ścisłości, elementy w FPGA rozmieszczone są na sztywno, program do implementacji decyduje tylko których z nich użyć i ustawia odpowiednie połączenia.

Link do komentarza
Share on other sites

Ej ale tak serio moglbys wyjasnic jak takie uklady sie programoje za pomocą czego i link do jakiegoś kursu 🙂 ew. książki?

@zaquadnik

nie nie tylko nie wyklad!!

Link do komentarza
Share on other sites

Wydaje się idealne, ale gdzie jest haczyk takiego cudeńka? I ile takie cudeńko kosztuje i ponawiam pytanie czy można jakimś assemblerem to obsłużyć? Tak że "ręcznie" się połączy wszystko w całość, np 1 operacja 1 połączenie itp. Wiesz na czym polegają assemblery?

Link do komentarza
Share on other sites

Ludzie, google istnieje i jest bardzo przydatne !!! Ewin, a co Ci nie pasuje w wykładzie ?? W skrypcie, który zamieszczę są wszystkie podstawowe informacje. Ale czytać się nie chce, co ? :> Za dużo literek, za mało obrazków ? :>

Okej, tu jest link do skryptu o VHDL:

VHDL

Tu linki do producentów FPGA:

Xilinx

Altera

Actel

Lattice

Link do zbioru darmowych IPcoers, czyli kodów HDL opisujących różne układy:

Opencores

Furbi, ja programuję tylko w asemblerze. Asembler to wydawanie rozkazów procesorowi, nie tworzenie połączeń ! Poza tym spójrz, że opis w VHDL jest przejrzysty i wygodny. Wyobrażasz sobie projektowanie procesora tworząc ręcznie połączenia ? :>

Co do kosztów, tu jest link do firmy, która robi moduły z FPGA : Propox

  • Lubię! 1
Link do komentarza
Share on other sites

Na pewno. W zależności od przeznaczenia i sposob działania tego układu wystarczy np. połączyć piny obu scalaków i sterować tylko wystawianiem odpowiednich stanów na odpowiednie piny, jak to mam miejsce w np. mostku H.

Są również inne możliwości(np. SPI), ale niech tu wypowiedzą się osoby badziej z tematem zaznajomione.

  • Lubię! 1
Link do komentarza
Share on other sites

Dołącz do dyskusji, napisz odpowiedź!

Jeśli masz już konto to zaloguj się teraz, aby opublikować wiadomość jako Ty. Możesz też napisać teraz i zarejestrować się później.
Uwaga: wgrywanie zdjęć i załączników dostępne jest po zalogowaniu!

Anonim
Dołącz do dyskusji! Kliknij i zacznij pisać...

×   Wklejony jako tekst z formatowaniem.   Przywróć formatowanie

  Dozwolonych jest tylko 75 emoji.

×   Twój link będzie automatycznie osadzony.   Wyświetlać jako link

×   Twoja poprzednia zawartość została przywrócona.   Wyczyść edytor

×   Nie możesz wkleić zdjęć bezpośrednio. Prześlij lub wstaw obrazy z adresu URL.

×
×
  • Utwórz nowe...

Ważne informacje

Ta strona używa ciasteczek (cookies), dzięki którym może działać lepiej. Więcej na ten temat znajdziesz w Polityce Prywatności.