Pobieranie prezentacji. Proszę czekać

Pobieranie prezentacji. Proszę czekać

Rejestry przesuwne, sumatory

Podobne prezentacje


Prezentacja na temat: "Rejestry przesuwne, sumatory"— Zapis prezentacji:

1 Rejestry przesuwne, sumatory
Ernest Jamro Kat. Elektroniki AGH

2 Multiplekser Mux 2:1 Mux 4:1

3 Multiplekser 2:1 na bramkach
Sel\In1, In0 00 01 11 10 1 Out= SelIn0 + Sel In1 Y <= (not Sel and In0) OR (Sel and In1); --VHDL

4 Multiplekser na bramkach – postać ogólna
VHDL Ai <= conv_integer(Sel); Y <= X(Ai); -- Out i In słowa kluczowe Mux 4:1

5 Multiplekser na buforach trójstanowych
VHDL (wewnątrz FPGA): Ch(1)<= In1 when Tn(1)=‘1’ else ‘Z’; Ch(2)<= In2 when Tn(2)=‘1’ else ‘Z’; VHDL (testbench): Y<= ch(1); Y<= ch(2); Aby uniknąć krótkotrwałego zwierania buforów stosuje się krótki czas martwy w którym wszystkie bufory są w stanie wysokiej impedancji. Wymaga to użycia automatu zamiast prostego dekodera kodu binarnego na 1 z n.

6 Multiplekser na bramkach OC
*.ucf NET "ch<1>" LOC = "T3" ; NET "ch<1>" PULLUP; VHDL bramka OD/OC: Ch(1) <= ‘0’ when D0=‘0’ else ‘Z’; Ch(2)<= ‘0’ when D1=‘0’ else ‘Z’; Y= S’D0 + SD multiplekser A + B= (A’B’)’ - prawo De Morgana, (Wired AND) Y= ( (S’D0)’ (SD1)’ )’

7 Demultiplekser

8 Multipleksowanie w czasie
Wyświetlacz 7-segmentowy Tylko jeden wyświetlacz jest aktywny w danej krótkiej chwili czasowej W układach scalonych z reguły bardziej kosztowne jest dodanie dodatkowego wyprowadzenia niż dodatkowej logiki

9 Incrementator (S=A+1) Si Ci si = ai  ci-1 ci= ai ci-1 ci-1\ai 1
1 ci-1\ai 1 HA Half Adder si = ai  ci-1 ci= ai ci-1

10 Incrementator: Example
A=10112= 1110=0xB S=A+1= 11002=1210=0xC

11 Dodawanie z szeregową propagacją przeniesienia (Ripple Carry) Adder: S= A+B
ai + bi+ci-1 = si + 2·ci si = ai  bi  ci-1 ci= ai bi + ai ci-1 + bi ci-1= ai bi + ci-1 (ai  bi) ci-1\ai,bi 00 01 11 10 1 ci ci-1\ai,bi 00 01 11 10 1 Propagate Generate

12 Odejmowanie / Subtraction (a-b)
Direct Two’s Complement (2C) ai - bi-ci-1 = si - 2·ci si = ai  bi  ci-1 Add 1 to the LSB (Least Significant Bit) Sign bit negation si Instead of employing dedicated subtraction we can use a standard adder convert B to 2C code Example: 1111 in 2C= 0000+1= (minus one) ci-1\ai,bi 00 01 11 10 1 ci ci-1\ai,bi 00 01 11 10 1 Red color – difference between addition and subtraction

13 Add/Subtract Logic S<= A+B when Sub=‘0’ else A-B;
Convert B to Two’s Complement when Sub=1

14 Dodaj,Odejmij, Przepełnienie, Przykłady
Add: 3+2= 5 0011 = 3 0010 = 2 0111 = 7 Add: 3+5= 8 0011 = 3 0101 = 5 1000 = -8 Overflow Add: -7+6= -1 1001 = -7 0110 = 6 1111 = -1 Overflow= CarryOutN xor CarryOutN-1 Subtract: 6-1= 5 0110 = 6 1111 = -1 = 8 Subtract: -1-2= 1 1111 = -1 1110 = -2 = -3 Subtract: -5-4= -9 1011 = -5 1100 = -4 0111= 7 Overflow

15 Komparator AB A=B  not[ (aN xor bN) or ... or (a1 xor b1) or (a0 xor b0) ] A/=B  (aN xor bN) or ... or (a1 xor b1) or (a0 xor b0) A<B  Sign(A-B) AB  not Sign(B-A) AB  not Sign(A-B) A>B  Sign(B-A)

16 Komparator AConst A=C  not( (aN xor cN) or ... or (a1 xor c1) or (a0 xor c0) ) np. C=5: not( aN or ... or not a2 or a1 or not a0 A!=C  (aN xor cN) or ... or (a1 xor c1) or (a0 xor c0) A!=0  aN or ... or a1 or a0 A<2i  not (aN or ... or ai+1 or ai) A2i  aN or ... or ai+1 or ai C – Constant i- integer

17 Counter mod 2N Qn+1= Qn+1 architecture Beh of counter_2N is
signal Q: std_logic_vector(3 downto 0):= "0000"; begin process(clk, reset_asynch) begin if reset_asynch=‘1’ then Q<= (others=>’0’); elsif clk’event and clk=‘1’ then Q<= Q + 1; end if; end process; Count<= Q end Beh; library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL; entity counter_2N is port(clk, reset_asynch: in std_logic; count : out std_logic_vector (3 downto 0)); end counter_2N;

18 Counter mod N architecture Beh of counter_N is
signal Q: std_logic_vector(3 downto 0):= "0000"; begin process(clk) begin if clk’event and clk=‘1’ then if reset_synch=‘1’ or Q=N-1 then Q<= (others=>’0’); else Q<= Q + 1; end if; -- not reset end if; -- clk end process; end Beh;

19 Up/Down Counter mod 2N architecture Beh of counter_up_down is
signal Q: std_logic_vector(3 downto 0); begin process(clk) begin if clk’event and clk=‘1’ then if Up_DownN=‘1’ then Q<= Q + 1; else Q<= Q - 1; end if; -- up / downN end if; -- clk end process; Count <= Q; end Beh;

20 Up/Down Counter mod N process(clk) begin if clk’event and clk=‘1’ then
if Up_DownN=‘1’ then if Q = N-1 then Q<= (others=>’0’) else Q<= Q + 1; end if; else -- counting down if Q = 0 then Q<= conv_std_logic_vector(N-1, vec_width); Q<= Q - 1; end if; -- up / downN end if; -- clk end process;

21 Rotacja, Przesunięcie logiczne i Arytmetyczne
Wejście: a3a2a1a0 W lewo Rot: a2a1a0a3 B<= A(2 downto 0) & A(3); Log: a2a1a00 B<= A(2 downto 0) & ‘0’; Arith: a2a1a00 B<= A(2 downto 0) & ‘0’; W prawo Rot: a0a3a2a1 B<= A(0) & A(3 downto 1); Log: 0a3a2a1 B<= ‘0’ & A(3 downto 1); Arith: a3a3a2a1 B<= A(3) & A(3 downto 1); Logiczne –mnożenie/dzielenie przez 2 dla nieujemnych liczb Arytmetyczne: mnożenie/dzielenie przez 2 dla uzupełnień do dwóch Przykład: –1= 1111; -1/2= 1111= -1

22 Rejestr przesuwny w prawo lub lewo
SLEFT=0 – przesuń w prawo SLEFT=1 – przesuń w lewo

23 Rejestr przesuwny w prawo i w lewo z wpisem równoległym
process(clk) begin if clk’event and clk=‘1’ then if S(1)= ‘1’ then -- load Q<= D; elsif S(0)= ‘0’ then – shift right Q<= Dleft & Q(3 downto 1); else -- shift left Q<= Q(2 downto 0) & Drigth; end if; end if; end process; S= 0 - przesuń w prawo S=1 - przesuń w lewo S=2 - wpis równoległy S=3 - wpis równoległy

24 Rejestr przesuwny: rotujący, logiczny, arytmetyczny
Mnożenie/dzielenie przez 2 Kopiowanie bity znaku przy dzieleniu w kodzie U2

25 Barrel Shifter (szybkie przesunięcie o dowolną liczbę bitów)
Mnożenie Dzielenie (kod U2 - uzupełnień do dwóch)

26 Barrel Shifter - wielopoziomowy
Każdy z n poziomów przesuwa o 0 lub 2i-bitów (i=0..(n-1)) bitów w ten sposób można przesunąć o dowolną liczbę bitów w zakresie od (0..2n-1)-bitów używając prostych multiplekserów 2:1.

27 Serializer: Parallel-In Serial-Out (PISO)

28 Serializer: PISO - VHDL
process(clk) begin if clk'event and clk1=‘1' then if load=‘1’ then Q <= D; else Q(N-1 downto 0)<= Q(N-2 downto 0) & Din; end if; end process; Qout<= Q(N-1);

29 SIPO (Serial-In Parallel-Out) (Deserializer)
process(clk) begin if clk'event and clk=‘1' then Q(N-1 downto 0)<= Q(N-2 downto 0) & Din; end if; end process;

30 SIPO (Clock Enable) – błędne użycie
Przykład taktowania co drugi takt zegara modułu SIPO i złego użycia bramki AND na sygnale zegarowym – powstaje wyścig!!!

31 SIPO (Clock Enable) – poprawne użycie
Przykład taktowania co drugi takt zegara SIPO – sygnał zegarowy jest wyjściem Q przerzutnika (Uwaga wyścig może powstać pomiędzy sygnałem Din a Clk2).

32 SIPO (CE - Clock Enable)

33 SISO (Serial-In Serial-Out)

34 Przesyłanie danych szeregowo SerDeser
Sposób 1 Sposób 2 PISO Clk SIPO D clk takt


Pobierz ppt "Rejestry przesuwne, sumatory"

Podobne prezentacje


Reklamy Google