kod kursu: ETD008270 Układy sekwencyjne
Transcript of kod kursu: ETD008270 Układy sekwencyjne
Programowalne układy logiczne
kod kursu: ETD008270
Układy sekwencyjne
W6 – 10.05.2019
mgr inż. Maciej Rudek
Układy kombinacyjne - przypomnienie
Układ kombinacyjny – jest to układ dla którego zmiana na
wejściu (którymkolwiek) powoduje natychmiastową zmianę
na wyjściu. Uściślając wyjście układu kombinacyjnego jest
zależne tylko od bieżących stanów na wejściu.
Istnieją trzy sposoby opisu układów kombinacyjnych:
• Przypisania ciągłe
• Wykorzystanie instrukcji procesu always
• Za pomocą funkcji i zdań.
Układy sekwencyjne - przypomnienie
W układach sekwencyjnych stan na wyjściu
układu zależeć będzie od stanu na wejściu
oraz od poprzedniego stanu. Najczęściej jest
on nazywany stanem wewnętrznym, którego
stan został zapamiętany
za pomocą zespołu
rejestrów pełniących
rolę pamięci.
Automaty, maszyna stanów
Istnieją dwa formalne modele FSM:
Moore’a • wyjście jest tylko funkcją stanu,
• wyjście opisywane razem ze stanem
Automat Moore’a: wyjścia automatu są jedynie funkcją stanu, logika kombinacyjna służy
do generowania sygnałów wyjściowych na podstawie stanu automatu, oraz do określenia
wejść przerzutników na podstawie stanu automatu i wejść do układu.
• opóźnienie jednego cyklu zegara między wejściem a wyjściem
4
𝑌 = 𝑓(𝑆)
Automaty, maszyna stanów
Istnieją dwa formalne modele FSM:
Mealy’ego • wyjście jest funkcją wejścia i stanu,
• wyjście opisywane nad strzałką przejścia
Automat Mealy’ego: zarówno następny stan jak i wektor wyjść są funkcjami bieżącego
stanu automatu oraz wektora wejść; automat Mealy’ego synchroniczny wyposażony jest w
przerzutniki wyjściowe, automat asynchr. natychmiast reaguje na zmianę sygnałów
wejściowych.
• reaguje natychmiast, możliwość wystąpienia zakłóceń (wyścigi, hazardy)
• szerokość sygnału na wyjściach zależy od stanów wejściowych
5
𝑌 = 𝑓(𝑆, 𝑥0…𝑥𝑛)
Istnieją dwa formalne modele FSM:
Moore’a
Mealy’ego
Automaty porównanie
6
• wyjście jest tylko funkcją stanu,
• wyjście opisywane razem ze stanem
• wyjście jest funkcją wejścia i stanu
• wyjście opisywane nad strzałką
przejścia
𝑌 = 𝑓(𝑆)
𝑌 = 𝑓(𝑆, 𝑥0…𝑥𝑛)
Automaty, maszyna stanów
Automat Mealy’a Automat Moore'a
Stan wyjścia zależny od stanu
automatu i wejścia
Stan wyjścia zależny tylko od
stanu automatu
Generalnie zawiera tylko parę
stanów, mniej niż automat
Moore’a
Zawiera więcej stanów niż
automat Mealy’a
Wyjścia zmieniają się na
zboczach zegara
Zmiana stanu wyjścia
powodowana jest przez zmianę
stanu na wejściu po wykonaniu
zadania z logiki automatu
Szybsza reakcja na zmiany na
wejściu automatu.
Automat Moore’a potrzebuje
więcej logiki dekodującej co
powoduję dłuższą reakcję.
Jak działa automat
Dzięki wykorzystaniu zespołu rejestrów np. typu flip-flop
możliwe jest przechowywanie bieżącego stanu automatu.
Logika kombinacyjna odpowiedzialna jest za wyliczenie
kolejnego stanu automatu. A wyjście może być kombinacją
sygnałów związanego z konkretnym stanem (automat
Moore’a) oraz dodatkowo stanem na wejściach (automat
Mealy’ego).
Automaty, maszyna stanów
Układy sekwencyjne nazywane są także automatami
skończonymi (Finite State Machnie – FSM). Można
wyszczególnić takie układy zgodnie z nastepującymi
specyfikacjami:
• 3 procesy – każdy z bloków modelowany jest osobno
• 2 procesy – dwa pierwsze bloki są modelowane razem w
jednym procesie
• 1 proces – wszystkie bloki można zamodelować jako
jeden proces
9
Przykładowy graf przejść
Stan
bieżący
Stan następny Wyjśc
ie (Y) X = 0 X = 1
S0 S0 S1 0
S1 S1 S2 1
S2 S2 S3 0
S3 S0 S1 1
Automat w 3-ch procesach
module as3(input clk,reset,x,
output reg y);
reg [1:0] state, next_state;
parameter [1:0] S0=2'd0, S1=2'd1,
S2=2'd2, S3=2,d3;
always @(*)
case (state)
S0 : if(x) nex_stte = S1;
else next_state = S0;
S1 : if(x) nex_stte = S2;
else next_state = S1;
S2 : if(x) nex_stte = S3;
else next_state = S2;
S3 : if(x) nex_stte = S0;
else next_state = S1;
endcase
always @(posedge_clk)
if(!reset) state <= 0;
else state <= nest_state;
always @(*)
if(state == S1|state==S3) y=1;
else y = 0;
endmodule
Automat w 3-ch procesach
module as3(input clk,reset,x,
output reg y);
reg [1:0] state, next_state;
parameter [1:0] S0=2'd0, S1=2'd1,
S2=2'd2, S3=2,d3;
always @(*)
case (state)
S0 : if(x) nex_stte = S1;
else next_state = S0;
S1 : if(x) nex_stte = S2;
else next_state = S1;
S2 : if(x) nex_stte = S3;
else next_state = S2;
S3 : if(x) nex_stte = S0;
else next_state = S1;
endcase
always @(posedge_clk)
if(!reset) state <= 0;
else state <= nest_state;
always @(*)
if(state == S1|state==S3) y=1;
else y = 0;
endmodule
Automat w 3-ch procesach
module as3(input clk,reset,x,
output reg y);
reg [1:0] state, next_state;
parameter [1:0] S0=2'd0, S1=2'd1,
S2=2'd2, S3=2,d3;
always @(*)
case (state)
S0 : if(x) nex_stte = S1;
else next_state = S0;
S1 : if(x) nex_stte = S2;
else next_state = S1;
S2 : if(x) nex_stte = S3;
else next_state = S2;
S3 : if(x) nex_stte = S0;
else next_state = S1;
endcase
always @(posedge_clk)
if(!reset) state <= 0;
else state <= nest_state;
always @(*)
if(state == S1|state==S3) y=1;
else y = 0;
endmodule
Automat w 2-ch procesach
module as2(input clk,reset,x,
output reg y);
reg [1:0] state;
parameter [1:0] S0=2'd0, S1=2'd1,
S2=2'd2, S3=2,d3;
always @(posedge clk)
if (!reset) state <= 0;
else
begin
case (state)
S0 : if(x) state <= S1;
else state <=
S0;
S1 : if(x) state <= S2;
else state <=
S1;
S2 : if(x) state <= S3;
else state <=
S2;
S3 : if(x) state <= S0;
else state <=
S1;
endcase
end
always @(*)
if(state == S1|state==S3) y=1;
else y = 0;
endmodule
Automat z 1-procesem
module as1(input clk,reset,x,
output reg y);
reg [1:0] state;
parameter [1:0] S0=2'd0, S1=2'd1,
S2=2'd2, S3=2,d3;
always @(posedge clk)
if (!reset) state <= 0;
else
begin
case (state)
S0 : begin y <= 0;
if(x) state <= S1;
else state <= S0;
end
S1 : begin y <= 1;
if(x) state <= S2;
else state <= S1;
end
S2 : begin y <= 0;
if(x) state <= S3;
else state <= S2;
end
S3 : begin y <= 1;
if(x) state <= S0;
else state <= S1;
end
endcase
end
always @(*)
if(state == S1|state==S3) y=1;
else y = 0;
endmodule
Porównanie 3-ch automatów
Dwa pierwsze
automaty niewiele
różnią się w
swojej konstrukcji
a ich
implementacja
jest taka sama.
W ostatnim
przypadku wygnał
na wyjściu pojawi
się w tym samym
momencie do
przejście do
następnego stanu.
Automat Mealy’ego
Automat Mealy’ego również można zamodelować
używając 2. lub 3. procesów. Jednak używając
tylko jednego, jest to całkowicie nie możliwe, ze
względu na funkcję wyjścia która zależy od stanu i
funkcji na wejściu.
Automat Mealy’ego
Poniżej przedstawiono graf przejść dla
automatu Mealy’ego.
Wskazówka: Podczas implementacji tego rodzaju automatu łatwiej jest
wykonać jego opis za pomocą dwóch procesów
Automat Mealy’ego
Dla tego przykładu została zastosowana
definicja parametrów wykorzystując
instrukcję localparam. W odróżnieniu do
instrukcji parameter, localparam nie może
zostać zmieniony z wykorzystaniem
instrukcji defparam.
module as(input clk,reset,x,
output reg [2:0] y);
reg [2:0] state, next_state;
localparam [2:0] A = 3'b000,
B = 3'b001, C = 3'b010,
D = 3'b011, E = 3'b100,
F = 3'b101;
always @(*)
case (state)
A : begin
next_state = x ? B : A;
y = x ? 3'b100 : 3'b000;
end
B : begin
next_state = x ? C : A;
y = x ? 3'b100 : 3'b000;
end
C : begin
next_state = x ? D : A;
y = x ? 3'b101 : 3'b000;
end
D : begin
next_state = x ? E : D;
y = x ? 3'b110 : 3'b010;
end
E : begin
next_state = x ? F : D;
y = x ? 3'b110 : 3'b010;
end
F : begin
next_state = D;
y = 3'b101;
end
default: begin
next_state = A;
y = 3'bxxx;
end
endcase
always @(posedge clk)
if(~reset) state <= A;
else state <= next_state;
endmodule
Niejawna specyfikacja automatu
W instrukcji always zawarto trzy
stany automatu stanu wykonywane
w takiej kolejności w jakiej znajdują
się w opisie, zgodnie z
narastającym zboczem sygnału
zegarowego. W pokazanym opisie
został zawarty proces w którym
następuje nieprzerwany przepływ
informacji oraz wykonywanie
poszczególnych operacji na nich.
module simple(input [7:0] dataIn,
input c1, c2,clk,
output reg [7:0] dataOut);
reg [7:0] temp;
always begin
@(posedge clk)
temp = dataIn + c1;
@(posedge clk)
temp = temp & c2;
@(posedge clk)
dataOut = temp - c1;
end
endmodule
Niejawna specyfikacja automatu
Powyższa idea nosi nazwę
cycle-accurate specyfication – z
dokładnością do cyklu zegara
lub scheduled behavior –
zachowania szeregowego.
Uwaga: struktura ta jest często nie syntezowalna przez narzędzia XST.
Co ile taktów zegara
obliczane jest wyjście
dataOut?
Potok
W proponowanym przykładzie
przedstawiono trzy stopnie
proste automaty
sekwencyjne.
Co ile taktów zegara
obliczane jest wyjście
dataOut?
Interfejsy komunikacyjne - na przykładzie ARM926
23
24
Interfejsy komunikacyjne - klasyfikacja ogólna
SerDes - Serializer/Deserializer
Serializer/Deserializer jest to para połączonych ze sobą
bloków w celu uzyskania szybkiej transmisji danych.
Najczęściej są odpowiedzialne za konwertowanie danych z
transmisji równoległej na szeregową oraz na odwrót. Może
być stosowany w wielu różnych aplikacjach w celu
minimalizacji ilości połączeń i kosztów oraz mniejszy
poziom zakłóceń/szumów elektromagnetycznych .
SerDes - Serializer/Deserializer
Na układ SerDes składają się dwa bloki Parallel In Serial Out
(PISO) oraz Serial In Parallel Out (SIPO).
Można wymienić 4 podstawowe architektury:
• Z linią zegarową
• Z wbudowanym zegarem
• Z kodowaniem 8b/10b
• Z przeplotem
Oraz na 3 typy komunikacji:
Simplex Half-Duplex Full-Duplex
Metody transmisji - w interfejsach szeregowych
Typ transmisji Full-duplex Half-duplex
Synchroniczna SPI, USART I2C
Asynchroniczna UART, Ethernet CAN, USB, 1-Wire,
LIN
W transmisji synchronicznej równolegle z ciągiem bitów danych przesyła się
sygnał synchronizujący, który określa chwile, w których stan linii danych
odpowiada wartościom kolejnych bitów.
W transmisji asynchronicznej przesyłane dane nie są związane z żadnym
sygnałem synchronizującym, zegarowym. Pomiędzy nadajnikiem a odbiornikiem
musi być ustalona częstotliwość przesyłania danych.
27
Sposoby transmisji
Sposoby transmisji - różnicowej
http://www.ti.com/lit/ml/snla187/snla187.pdf
Sposoby transmisji - różnicowej Żródło:https://www.maximintegrated.com/en/app-notes/index.mvp/id/4019
Sposoby transmisji - różnicowej
http://www.ti.com/lit/ml/snla187/snla187.pdf
SerDes z równoległym zegarem
Ten system często stosowany jest w rozwiązaniach
magistral typu: PCI, UTOPIA, w ukłądach procesorowych,
kontrolnych itp. Przesyłanie danych, wspierane jest przez
dodatkowy sygnał zegarowy, podawany równolegle z linią
danych. Dzięki temu rozwiązaniu,
można przesyłać dane na dużą
odległość z dużą
prędkością bez obaw
o rozsynchronizowanie się
transmisji.
Serdes z wewnętrznym zegarem
W tym trybie dane są przesyłane tylko po jednej linii,
niezbędne jest aby zapewnić odpowiednie warunki w celu
odebrania danych: oba zegary nadajnika i odbiornika muszą
działać na tych samych częstotliwościach oraz stosując bity
synchronizacyjne – bit stopu i startu czy dodatkowymi
sygnałami kontrolnymi, ramką, synchronizacją, bitami
statusu, bitami parzystości (CTR).
Serdes z wewnętrznym zegarem
W tym trybie dane są przesyłane tylko po jednej linii,
niezbędne jest aby zapewnić odpowiednie warunki w celu
odebrania danych: oba zegary nadajnika i odbiornika muszą
działać na tych samych częstotliwościach oraz stosując bity
synchronizacyjne – bit stopu i startu czy dodatkowymi
sygnałami kontrolnymi, ramką, synchronizacją, bitami
statusu, bitami parzystości (CTR).
8b/10b SerDes
Przesyłanie 10-bitowej transmisji zostało opracowane przez
IBM w latach 80-tych, gwarantując równoległa transmisję
danych oraz kodowanie danych w celu zbalansowania ilości
1 do 0. Najdłuższa możliwa sekwencja 0 i 1 nie przekracza
5. Metoda ta jest pomocna podczas ograniczania widma
sygnału szeregowego oraz na tłumienie emisji
elektromagnetycznej transmitowanego sygnału, pozwalając
na monitorowanie łącza komunikacji przez ograniczenie
ilości kombinacji w 10-bitowym kodzie.
Ten sposób przesyłania danych jest wykorzystywany w
interfejsach wykorzystujących np.. pakietowanie np.:
Ethernet, Fiber Channel, InfiniBand
8b/10b – schemat kodowania
7 H
6 G
5 F
4 E
3 D
2 C
1 B
0 A
9 j
8 h
7 g
6 f
5 i
4 e
3 d
2 c
1 b
0 a
Kody konwersji dla 5b/6b i 3b/4b
SerDes przesyłanie sygnału
http://www.ti.com/lit/ds/symlink/ds15ba101.pdf
Shift Register - SISO
Rejestr przesuwny jest istotnym elementem
wykorzystywanym do stworzenia układu transmisji danych.
Wykorzystuje w swojej konstrukcji przerzutniki typu D
połączonych w taki sposób, że dana jest przesuwana co cykl
zegarowy. W tym wypadku co pozytywny takt zegarowy.
SISO - rejestr z wyjściem
i wejściem szeregowym
(rejestr przesuwający)
module shift ( input clk, DataIn,
output
DataOut);
reg [7:0] temp;
always @(posedge clk)
begin
temp = temp << 1;
temp[0] = DataIn;
end
assign DataOut = temp[7];
endmodule
Co jest nie tak w tym układzie?
SIPO - wejście szeregowe, wyjście
równoległe
Dzięki temu układowi sekwencyjnemu, możliwe jest
uzyskanie wyjścia równoległego z wejścia szeregowego. W
podanym przykładzie, przesyłanie danych odbywa się na
zbocze narastające sygnału CLK, a dane są wystawiane na
wyjście w oddzielnym procesie.
Co jest nie tak w tym układzie?
module sipo(input clk,reset, DataIn,
output [3:0]
DataOut);
reg [3:0]temp;
always@(posedge clk,posedge reset)
begin
if(reset)
temp <= 4'b0000;
else
begin
temp <= temp << 1'b1;
temp[0] <= DataIn;
end
end
assign DataOut = temp;
endmodule
PISO - wejście równoległe, wyjście
szeregowe
module piso(input clk, load,
input reg [3:0] DataIn,
output DataOut);
reg [3:0] temp;
always@(posedge clk, load)
begin
if(load)
begin
DataOut <= 1'b0;
temp <= DataIn;
end
else
begin
DataOut <= temp[0];
temp <= temp >> 1'b1;
end
end
endmodule
Serial Peripherial Interface - SPI
SPI – szeregowy interfejs komunikacyjny opracowany przez
firmę Motorola:
• komunikacja dwukierunkowa (full-duplex),
• synchroniczna transmisja danych, master-slave,
• Interfejs trójprzewodowy, MOSI, MISO, SCLK – MOSI - (ang. Master Output Slave Input) - dane dla układu peryferyjnego
– MISO - (ang. Master Input Slave Output) - dane z układu peryferyjnego
– SCLK - (ang. Serial CLocK) - sygnał zegarowy (taktujący)
• stosowany do transmisji danych pomiędzy układami
peryferyjnymi np. przetworniki A/C, C/A,
pamięci szeregowe, potencjometry cyfrowe,
mikrokontrolery
• inna nazwa SSI - Synchronous Serial Interface 42
43
Serial Peripherial Interface – SPI - możliwe połączenia z układami
Ogólna budowa interfejsu
szeregowej transmisji danych SPI.
Interfejs SPI składa się z dwóch
rejestrów przesuwnych połączonych
w licznik pierścieniowy i generatora
sygnału taktującego.
• MISO wejście danych dla urządzenia
master, a wyjściem dla slave,
• MOSI jest wyjściem dla urządzenia
master, a wejściem dla slave.
• SCLK jest wejściem taktującym dla
układu slave oraz wyjściem dla
master.
• Sygnał taktujący jest zawsze
generowany przez układ nadrzędny
(master) bez względu na to czy dane
są przez niego nadawane czy też
odbierane. Sygnał taktujący jest
nadawany jedynie podczas
transmisji.
Układy SPI połączone w magistrale liniową
Serial Peripherial Interface – SPI - możliwe połączenia z układami
Układy SPI połączone w łąńcuchową (daisy chain)
• Układ nadrzędny (master) wybiera poszczególne układy
podrzędne (slave) przez jedną z równoległych linii portu
dołączonych do wyprowadzeń CS układów podrzędnych.
• Urządzenie slave zostanie wybrane, gdy na jego wejście
SS zostanie podany określony stan.
• W czasie transmisji, w celu uniknięcia kolizji, tylko jeden
układ podrzędny może być aktywny na liniach interfejsu.
44
Pin Sygnał Nazwa Kierunek
1 DCD Data Carrier Detect In
2 RXD Receive Data In
3 TXD Transmit Data Out
4 DTR Data Terminal Ready Out
5 GND Ground -
6 DSR Data Set Ready In
7 RTS Request to Send Out
8 CTS Clear to Send In
9 RI Ring Indicator In
45
LPC2368:
UART0/2/3
UART1 – możliwość budowy modemu
Peryferia – port szeregowy RS232
RS232 – ramka danych
UART – Universal Asynchronous Receiver Transmitter,
0 1 2 3 4 5 6 7 P 3,3 V
+8 V
-8 V
stan IDLE
bit startu „0”
8 – bitów danych
bit parzystości
bity stopu:
1, 2 lub 1.5 46
Inne typowe szybkości transmisji danych: 110, 150, 300,
1200, 2400, 4800, 9600, 19200, 38400, 57600, 115200,
230400, 460800, 921600 ….
Dziękuję za uwagę :)