kod kursu: ETD008270 Układy sekwencyjne

47
Programowalne układy logiczne kod kursu: ETD008270 Układy sekwencyjne W6 – 10.05.2019 mgr inż. Maciej Rudek

Transcript of kod kursu: ETD008270 Układy sekwencyjne

Page 1: kod kursu: ETD008270 Układy sekwencyjne

Programowalne układy logiczne

kod kursu: ETD008270

Układy sekwencyjne

W6 – 10.05.2019

mgr inż. Maciej Rudek

Page 2: kod kursu: ETD008270 Układy sekwencyjne

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ń.

Page 3: kod kursu: ETD008270 Układy sekwencyjne

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.

Page 4: kod kursu: ETD008270 Układy sekwencyjne

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

𝑌 = 𝑓(𝑆)

Page 5: kod kursu: ETD008270 Układy sekwencyjne

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…𝑥𝑛)

Page 6: kod kursu: ETD008270 Układy sekwencyjne

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…𝑥𝑛)

Page 7: kod kursu: ETD008270 Układy sekwencyjne

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ę.

Page 8: kod kursu: ETD008270 Układy sekwencyjne

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).

Page 9: kod kursu: ETD008270 Układy sekwencyjne

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

Page 10: kod kursu: ETD008270 Układy sekwencyjne

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

Page 11: kod kursu: ETD008270 Układy sekwencyjne

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

Page 12: kod kursu: ETD008270 Układy sekwencyjne

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

Page 13: kod kursu: ETD008270 Układy sekwencyjne

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

Page 14: kod kursu: ETD008270 Układy sekwencyjne

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

Page 15: kod kursu: ETD008270 Układy sekwencyjne

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

Page 16: kod kursu: ETD008270 Układy sekwencyjne

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.

Page 17: kod kursu: ETD008270 Układy sekwencyjne

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.

Page 18: kod kursu: ETD008270 Układy sekwencyjne

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

Page 19: kod kursu: ETD008270 Układy sekwencyjne

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

Page 20: kod kursu: ETD008270 Układy sekwencyjne

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

Page 21: kod kursu: ETD008270 Układy sekwencyjne

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?

Page 22: kod kursu: ETD008270 Układy sekwencyjne

Potok

W proponowanym przykładzie

przedstawiono trzy stopnie

proste automaty

sekwencyjne.

Co ile taktów zegara

obliczane jest wyjście

dataOut?

Page 23: kod kursu: ETD008270 Układy sekwencyjne

Interfejsy komunikacyjne - na przykładzie ARM926

23

Page 24: kod kursu: ETD008270 Układy sekwencyjne

24

Interfejsy komunikacyjne - klasyfikacja ogólna

Page 25: kod kursu: ETD008270 Układy sekwencyjne

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 .

Page 26: kod kursu: ETD008270 Układy sekwencyjne

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

Page 27: kod kursu: ETD008270 Układy sekwencyjne

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

Page 28: kod kursu: ETD008270 Układy sekwencyjne

Sposoby transmisji

Page 29: kod kursu: ETD008270 Układy sekwencyjne

Sposoby transmisji - różnicowej

http://www.ti.com/lit/ml/snla187/snla187.pdf

Page 30: kod kursu: ETD008270 Układy sekwencyjne

Sposoby transmisji - różnicowej Żródło:https://www.maximintegrated.com/en/app-notes/index.mvp/id/4019

Page 31: kod kursu: ETD008270 Układy sekwencyjne

Sposoby transmisji - różnicowej

http://www.ti.com/lit/ml/snla187/snla187.pdf

Page 32: kod kursu: ETD008270 Układy sekwencyjne

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.

Page 33: kod kursu: ETD008270 Układy sekwencyjne

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).

Page 34: kod kursu: ETD008270 Układy sekwencyjne

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).

Page 35: kod kursu: ETD008270 Układy sekwencyjne

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

Page 36: kod kursu: ETD008270 Układy sekwencyjne

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

Page 37: kod kursu: ETD008270 Układy sekwencyjne

Kody konwersji dla 5b/6b i 3b/4b

Page 38: kod kursu: ETD008270 Układy sekwencyjne

SerDes przesyłanie sygnału

http://www.ti.com/lit/ds/symlink/ds15ba101.pdf

Page 39: kod kursu: ETD008270 Układy sekwencyjne

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?

Page 40: kod kursu: ETD008270 Układy sekwencyjne

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

Page 41: kod kursu: ETD008270 Układy sekwencyjne

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

Page 42: kod kursu: ETD008270 Układy sekwencyjne

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

Page 43: kod kursu: ETD008270 Układy sekwencyjne

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.

Page 44: kod kursu: ETD008270 Układy sekwencyjne

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

Page 45: kod kursu: ETD008270 Układy sekwencyjne

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

Page 46: kod kursu: ETD008270 Układy sekwencyjne

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 ….

Page 47: kod kursu: ETD008270 Układy sekwencyjne

Dziękuję za uwagę :)