Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Zaawansowany VHDL. Rajda & Kasperek 2015 Katedra Elektroniki AGH 1

Podobne dokumenty
Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Zaawansowany VHDL. Rajda & Kasperek 2014 Katedra Elektroniki AGH 2

Elementy języka VHDL. obiekty typy danych atrybuty pakiety i biblioteki instrukcje współbieżne instrukcje sekwencyjne. PUE-w3 1

Układy reprogramowalne i SoC Język VHDL (część 4)

Laboratorium 10 Temat: Zaawansowane jednostki testowe. Operacje na plikach. Funkcje.

Modelowanie złożonych układów cyfrowych (1)

Układy reprogramowalne i SoC Testbenches. Symulacja sterowana zdarzeniami.

PRZEMYSŁAW SOŁTAN

Projektowanie systemów cyfrowych w językach opisu sprzętu. Studium Zaoczne IV rok kierunek Elektronika i Telekomunikacja. Wykład 2

VHLD Very High Speed Integrated Circuit (VHSIC) Hardware Description Language (VHDL)

Układy reprogramowalne i SoC Język VHDL (część 5)

Projektowanie hierarchiczne Mariusz Rawski

Układy reprogramowalne i SoC Język VHDL (część 2)

Projektowanie automatów z użyciem VHDL

Projektowanie w VHDL

1. ISE WebPack i VHDL Xilinx ISE Design Suite 10.1 VHDL Tworzenie projektu Project Navigator Xilinx ISE Design Suite 10.1 File

Pojedyncze wartości zadeklarowanego typu Ustawiane przed rozpoczęciem symulacji bez moŝliwości

Języki opisu sprzętu VHDL Mariusz Rawski

mgr inż. Maciej Rudek opracował: dr inż. Daniel Kopiec

Systemy Czasu Rzeczywistego FPGA

VHDL. Behawioralny Strukturalny Czasowy. Poziom RTL

Układy reprogramowalne i SoC Język VHDL (część 3)

Projekt prostego procesora

Sposoby projektowania systemów w cyfrowych

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

Układy reprogramowalne i SoC Specjalizowane moduły FPGA

Aby w pełni przetestować układ o trzech wejściach IN_0, IN_1 i IN_2 chcemy wygenerować wszystkie możliwe kombinacje sygnałów wejściowych.

Laboratorium Projektowania Systemów VLSI-ASIC Katedra Elektroniki Akademia Górniczo-Hutnicza

Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe. Synteza logiczna. Rajda & Kasperek 2015 Katedra Elektroniki AGH 1

VHDL cz.1. Rafał Walkowiak IIn PP Wer

1 Wstęp. 2 Proste przykłady. 3 Podstawowe elementy leksykalne i typy danych. 6 Opis strukturalny. 7 Moduł testowy (testbench)

Sumatory H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

WOJSKOWA AKADEMIA TECHNICZNA im. Jarosława Dąbrowskiego LABORATORIUM UKŁADÓW PROGRAMOWALNYCH I SPECJALIZOWANYCH

Wydział Elektryczny. Katedra Automatyki i Elektroniki. Instrukcja do ćwiczeń laboratoryjnych z przedmiotu: SYNTEZA UKŁADÓW CYFROWYCH ES2D100005

Krótkie wprowadzenie do ModelSim i Quartus2

Kurs języka VHDL Very High (Speed Integrated Circuits) Description Language

Systemy Czasu Rzeczywistego FPGA

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Systemy Czasu Rzeczywistego FPGA

Programowanie Układów Logicznych kod kursu: ETD6203. VHDL, ISE WebPACK, Plan Ahead, Impact W

Elementy języka VHDL

Specyfika projektowania Mariusz Rawski

XC4000: LUT jako ROM Układy Cyfrowe i Systemy Wbudowane 2 Układy FPGA cz. 2 ROM32X1 VHDL inference example ROM 16x2b type

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

Opis: Instrukcja warunkowa Składnia: IF [NOT] warunek [AND [NOT] warunek] [OR [NOT] warunek].

Realizacja logiki kombinacyjnej Mariusz Rawski

Programowalne układy logiczne

Układy reprogramowalne i SoC Implementacja w układach FPGA

Instrukcje sekwencyjne

Przykładowe pytania z części PSPICE. 1. Podaj zasady tworzenia pliku symulacyjnego. 2. Czy składnia PSPICE jest czuła na wielkość liter? 3.

PUCY Kolos 2: Reloaded

Układy FPGA w przykładach, część 2

Układy reprogramowalne i SoC Język VHDL (część 1)

Technika Cyfrowa. Wprowadzenie do laboratorium komputerowego część II

Projektowanie systemów cyfrowych w językach opisu sprzętu. Studium Zaoczne IV rok kierunek Elektronika. Wykład 4

Zmiany techniczne wprowadzone w wersji Comarch ERP Altum

Ćwiczenia 2 IBM DB2 Data Studio

Język VHDL podstawy Mariusz Rawski

Projektowanie Urządzeń Cyfrowych

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Technika cyfrowa projekt: Sumator 4 bitowy równoległy

Altera Quartus II. Opis niektórych komponentów dostarczanych razem ze środowiskiem. Opracował: mgr inż. Leszek Ciopiński

Akademia Górniczo Hutnicza im. Stanisława Staszica w Krakowie. Technika Cyfrowa. Wprowadzenie do laboratorium komputerowego część II

1. ELEMENTY JĘZYKA PL/SQL

Synteza strukturalna

Programowalne układy logiczne

Bloki anonimowe w PL/SQL

Projektowanie hierarchiczne Mariusz Rawski

Programowanie strukturalne. Opis ogólny programu w Turbo Pascalu

Realizacja algorytmu wyznaczania wyrazów ciągu w języku VHDL z zastosowaniem podziału projektu na moduły: FSM i Data Path.

Układy Cyfrowe laboratorium

Zakład Cyberbezpieczeństwa, Instytut Telekomunikacji, Politechnika Warszawska,

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 4 (3h) Przerzutniki, zatrzaski i rejestry w VHDL

Systemy wbudowane. Poziomy abstrakcji projektowania systemów HW/SW. Wykład 9: SystemC modelowanie na różnych poziomach abstrakcji

Quartus. Rafał Walkowiak IIn PP Wer

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH Wydziałowy Zakład Metrologii Mikro- i Nanostruktur SEMESTR LETNI 2016

Języki Opisu Sprzętu. Studium Zaoczne III rok kierunek Elektronika. Język VHDL cz.3

Testy jednostkowe - zastosowanie oprogramowania JUNIT 4.0 Zofia Kruczkiewicz

w PL/SQL bloki nazwane to: funkcje, procedury, pakiety, wyzwalacze

Podstawy techniki cyfrowej zima 2015 Rafał Walkowiak

LABORATORIUM OPTOELEKTRONIKA I SENSORYKA Oprogramowanie bariery podczerwieni w układzie CPLD

VHDL. Zebrał i opracował R.Walkowiak PTC wykład 2013/2014

Quartus. Rafał Walkowiak IIn PP Listopad 2017

Wykład 15. Literatura. Kompilatory. Elementarne różnice. Preprocesor. Słowa kluczowe

Projektowanie Scalonych Systemów Wbudowanych VERILOG

PROJEKTOWANIE UKŁADÓW CYFROWYCH Z WYKORZYSTANIEM PAKIETU MULTISIM 2001 ORAZ JĘZYKA OPISU SPRZĘTU VHDL

Inżynieria Układów Programowalnych

LCD (Liquid Crystal Display)

PODSTAWY BAZ DANYCH 13. PL/SQL

MMfpga01. MMfpga11. Instrukcja konfiguracji środowiska, przykładowy projekt oraz programowanie układu

SPIS TREŚCI. 2. Arytmetyka rozproszona Symulacja układu programowalnego Realizacja algorytmu cyfrowego filtrowania

Układy mnoŝące H D L. dr inŝ. Paweł Tomaszewicz Instytut Telekomunikacji Politechnika Warszawska

OpenPoland.net API Documentation

Cheatsheet PL/SQL Andrzej Klusiewicz 1/9

Synteza strukturalna Mariusz Rawski

Październik Instytut Informatyki Teoretycznej i Stosowanej Politechnika Częstochowska. Systemy baz danych - wykład III. dr inż.

15. Funkcje i procedury składowane PL/SQL

Język PL/SQL. Rozdział 5. Pakiety podprogramów. Dynamiczny SQL

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH

Podstawy techniki cyfrowej zima 2017 Rafał Walkowiak Synteza strukturalna wyższego poziomu

Transkrypt:

Kierunek EiT Specjalność Sieci i usługi, V rok Programowalne Układy Cyfrowe Zaawansowany VHDL Rajda & Kasperek 2015 Katedra Elektroniki AGH 1

Program wykładu Opis strukturalny map, generate Pojęcia leksykalne obiekty: sygnały, zmienne, stałe, parametry Instrukcje sekwencyjne process, wait, if, case, loop, next, exit, assert, function, procedure Instrukcje współbieżne przypisania: bezwarunkowe, warunkowe i decyzyjne, podprogramy, block Rajda & Kasperek 2015 Katedra Elektroniki AGH 2

Opis strukturalny Instrukcja generate Składnia: [etykieta:] {[for instrukcja if warunek]} generate {instrukcje_współbieżne} end generate; U0 U1 U2 U3 X0 D Q X1 D Q X2 D Q X3 D Q X4 CLK CLK CLK CLK Przykład: gen1: for i in 0 to 3 generate U: DFF port map (X(i), clk, X(i+1)); end generate; Rajda & Kasperek 2015 Katedra Elektroniki AGH 3

Opis strukturalny Instrukcja generate U0 U1 U2 U3 SIN D Q X1 D Q X2 D Q X3 D Q SOUT CLK CLK CLK CLK for i in 0 to 3 generate if (i=0) generate UA: DFF port map (SIN, CLK, X(i+1)); end generate; if ((i>0) and (i<3)) generate UB: DFF port map (X(i), CLK, X(i+1)); end generate; if (i=3) generate UC: DFF port map (X(i), CLK, SOUT); end generate; end generate; Rajda & Kasperek 2015 Katedra Elektroniki AGH 4

Opis strukturalny Instrukcja generate gen_code_label: for index in 0 to 7 generate begin BUFR_inst : BUFR generic map ( BUFR_DIVIDE => "BYPASS") port map ( O => clk_o(index), CE => ce, CLR => clear, I => clk_i(index) ); end generate; The example shows a generate for loop that generates 8 regional clock buffers (BUFR) using the same chip enable (CE) and clear (CLR) signals but with their own clock input and output signals. The separate clock input and output signals are referenced to different bits of a signal vector using the variable called index. http://www.fpgadeveloper. com/2011/07/codetemplates-generate-forloop.html Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 5

Pojęcia leksykalne Deklaracje stałych Deklaracje stałych skalarnych: constant name: type:= expression; tablicowych: constant name: array_type [(index)] := expression; np: constant Vcc: real := 5.0; constant Cycle: time := 50 ns; constant five: bit_vector := 0101 ; constant SIX: std_logic_vector (8 to 11):= 0110 ; constant H_clk_per : TIME := 10ns; constant T_CSRS: TIME := H_clk_per/2-3ns; Rajda & Kasperek 2015 Katedra Elektroniki AGH 6

Pojęcia leksykalne Deklaracje parametrów Deklaracje parametrów generic (generic_interface_list); generic ( name: type:= expression); Deklaruje statyczną wartość podobnie jak stała, ale wartość ta może być zmieniana z zewnątrz. Może być deklarowany w: entities (dostępny we wszystkich architekturach z nią skojarzonych), blokach i komponentach. Wykorzystywany do parametryzacji modelów (szerokość magistral, czasy opóźnień itp.) np: entity CPU is generic (BusWidth : integer := 16) port ( DataIn : in bit_vector(buswidth-1 downto 0); DataOut : out bit_vector(buswidth-1 downto 0);... Rajda & Kasperek 2015 Katedra Elektroniki AGH 7

Przykład deklaracji generic funkcja lpm_ff z biblioteki Altery ENTITY reggen IS GENERIC( REG_WIDTH : INTEGER); PORT( d : IN STD_LOGIC_VECTOR(REG_WIDTH - 1 DOWNTO 0); clk : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(REG_WIDTH - 1 DOWNTO 0)); END reggen; ARCHITECTURE a OF reggen IS BEGIN PROCESS (clk) BEGIN IF (clk event AND clk = 1 ) THEN q <= d; END IF ; END PROCESS; END a; Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 8

Przykład deklaracji generic wykorzystanie inicjalizacja przez VHDL PACKAGE reg24gen_package IS CONSTANT TOP_WIDTH : INTEGER := 24; CONSTANT HALF_WIDTH : INTEGER := TOP_WIDTH / 2; END reg24gen_package; USE work.reg24gen_package.all; -- package definition -- component instantiation ENTITY reg24gen IS PORT( d : IN STD_LOGIC_VECTOR(23 DOWNTO 0); clk : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(23 DOWNTO 0)); END reg24gen; ARCHITECTURE a OF reg24gen IS COMPONENT reggen -- recall from package GENERIC( REG_WIDTH : INTEGER); PORT( d : IN STD_LOGIC_VECTOR(REG_WIDTH - 1 DOWNTO 0); clk : IN STD_LOGIC; q : OUT STD_LOGIC_VECTOR(REG_WIDTH - 1 DOWNTO 0)); END COMPONENT; BEGIN reg12a : reggen GENERIC MAP (REG_WIDTH => HALF_WIDTH) -- upload generic data PORT MAP (d => d(half_width - 1 DOWNTO 0), clk => clk, q => q(half_width - 1 DOWNTO 0));... Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 9

Przykład deklaracji generic moduł PLL_BASE z biblioteki Xilinx Spartan6 ----- CELL PLL_BASE ----- library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_SIGNED.all; use IEEE.STD_LOGIC_ARITH.all; library SPARTAN6; use SPARTAN6.vpkg.all; use SPARTAN6.VCOMPONENTS.all; entity PLL_BASE is generic ( BANDWIDTH : string := "OPTIMIZED"; CLKFBOUT_MULT : integer := 1; CLKFBOUT_PHASE : real := 0.0; CLKIN_PERIOD : real := 0.000; CLKOUT0_DIVIDE : integer := 1; CLKOUT0_DUTY_CYCLE : real := 0.5; CLKOUT0_PHASE : real := 0.0; CLKOUT1_DIVIDE : integer := 1; CLKOUT5_DUTY_CYCLE : real := 0.5; CLKOUT5_PHASE : real := 0.0; -- and many more parameters... Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 10

Moduł PLL_BASE z biblioteki Xilinx Spartan6 inicjalizacja w środowisku AHDL BDE Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 11

Instrukcje sekwencyjne process(współbieżna!) instrukcje przypisania wait if case null loop next exit assert podprogramy Rajda & Kasperek 2015 Katedra Elektroniki AGH 12

Instrukcje sekwencyjne Instrukcja loop Przydatna do multiplikacji logiki i w modelowaniu behawioralnym. Składnia: [etykieta:] [while warunek for index in vala to valz] loop instrukcje sekwencyjne; end loop; Przykłady: L: for i in 1 to 10 loop instrukcje sekwencyjne; end loop; M: while i < 11 loop instrukcje sekwencyjne; i := i + 1; end loop; Rajda & Kasperek 2015 Katedra Elektroniki AGH 13

Instrukcje sekwencyjne Instrukcja loop Przykład: powielanie logiki entity multi_and is port (a: in bit_vector (0 to 3); m: out bit_vector (0 to 3)); end multi_and; architecture example of multi_and is begin process (a) variable b: bit; begin b := '1'; for i in 0 to 3 loop b := a(3-i) and b; m(i) <= b; end loop; end process; end example; Rajda & Kasperek 2015 Katedra Elektroniki AGH 14

Instrukcje sekwencyjne Instrukcja next Składnia: next [etykieta] [when warunek]; Przykłady: for i in 0 to max_limit loop if a(i) = 0 then next; end if; g(i) := a(i); end loop; Natychmiastowe przejście do kolejnej iteracji L1: while i < 5 loop L2: while j < 5 loop... next L2 when i=j;... end loop L2; end loop L1; Rajda & Kasperek 2015 Katedra Elektroniki AGH 15

Instrukcje sekwencyjne Instrukcja exit Składnia: exit [etykieta] [when warunek]; Przykład: for i in 0 to max_limit loop if a(i) = 0 then exit; end if; g(i) := a(i); end loop;... Natychmiastowe opuszczenie pętli Rajda & Kasperek 2015 Katedra Elektroniki AGH 16

Instrukcje sekwencyjne Instrukcja assert Drukuje na konsoli komunikat podczas symulacji. Składnia: assert warunek [report string] [severity level]; level: FAILURE ERROR WARNING NOTE Przykład: assert (Machine_Code /= "0000") report "Illegal Opcode" severity FAILURE; W VHDL 92 umożliwiono używanie report bez assert. report Well done - simulation finished " Instrukcja assert może występować w deklaracji entity (ponieważ jest bierna nie ma przypisania). Rajda & Kasperek 2015 Katedra Elektroniki AGH 17

Instrukcja assert *AHDL help When an assertion violation occurs, the report is issued and displayed on the screen. The supported severity level supplies an information to the simulator. The severity level defines the degree to which the violation of the assertion affects operation of the process: NOTE can be used to pass information messages from simulation (default) WARNING can be used in unusual situation in which the simulation can be continued, but the results may be unpredictable; ERROR can be used when assertion violation makes continuation of the simulation not feasible FAILURE can be used when the assertion violation is a fatal error and the simulation must be stopped at once. Summary The message is displayed when the condition is NOT met, therefore the message should be an opposite to the condition. Concurrent assertion statement is a passive process and as such can be specified in an entity. Concurrent assertion statement monitors specified condition continuously. Synthesis tools generally ignore assertion statements. Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 18

Instrukcja assert przykład CHECK_SETUP: process (CLK) begin if (CLK'event and CLK = '1') then Q <= D; assert D'stable(SETUP_TIME) --ignored by synthesis report "Setup Violation..." severity warning; end if; end process CHECK_SETUP; -- assert packet_length /= 0 report "empty network packet received" severity warning; -- assert clock_pulse_width >= min_clock_width severity error; Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 19

Assertion based verification Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 20

Assertion based verification Aldec webinar Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 21

Assertion based verification Aldec webinar Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 22

Instrukcje sekwencyjne Podprogramy instrukcja function Funkcje zwracają jedną wartość. W momencie wywołania funkcji parametry formalne przekazują bieżące wartości. Składnia: function nazwa [(parametr: typ;...)] return typ is deklaracje begin instrukcje sekwencyjne; end [nazwa ]; Przykład: (z biblioteki std_logic_1164, sprawdza czy wartość jest unknown) function Is_X (s : STD_ULOGIC) return BOOLEAN is begin case s is when 'U' 'X' 'Z' 'W' '-' => return true; when others => null; end case; return false; end function Is_X; Rajda & Kasperek 2015 Katedra Elektroniki AGH 23

Instrukcje sekwencyjne Podprogramy instrukcja procedure Procedury mogą zwracać więcej niż jedną wartość - formalnie to procedura nie zwraca wartości to się odbywa za pomocą formalnych parametrów, które zastępują bieżące wartości po wykonaniu procedury. Składnia: procedure nazwa [(parametr;...)] is deklaracje begin instrukcje sekwencyjne; end [nazwa ] parametry: {[variable] nazwy: [in out inout] typ [:=wyrażenie]; [signal] nazwy: [in out inout] typ;} Przekazanie parametrów do procedury : in inout Przekazanie parametrów z procedury : out inout Rajda & Kasperek 2015 Katedra Elektroniki AGH 24

Instrukcje sekwencyjne Podprogramy instrukcja procedure Przykład: procedure vect_to_int (z: in bit_vector (1 to 8); zero_flag: out boolean; q: inout integer) is begin q := 0; zero_flag := true; for i in 1 to 8 loop q := q * 2; if z(i) = '1' then q := q + 1; zero_flag := false; end if; end loop; return; end vect_to_int; Wywołanie: vect_to_int (s,t,u); Rajda & Kasperek 2015 Katedra Elektroniki AGH 25

Instrukcje współbieżne Współbieżne wywołanie podprogramu W obydwu poniższych przykładach skutek jest ten sam: architecture concurrent of SUB_CALL is begin vect_to_int (bitstuff, flag, number); end concurrent ; architecture sequential of SUB_CALL is begin process (bitstuff, number) begin vect_to_int (bitstuff, flag, number); end process; end sequential ; Rajda & Kasperek 2015 Katedra Elektroniki AGH 26

Instrukcje sekwencyjne Podprogramy instrukcja procedure procedure read_cycle ( address: in STD_LOGIC_VECTOR(15 downto 0); -- input parameter signal addr: out STD_LOGIC_VECTOR(15 downto 0); -- DSP addres bus signal data: in STD_LOGIC_VECTOR(15 downto 0); -- DSP data data_read: out STD_LOGIC_VECTOR(15 downto 0); -- reading result signal rd: out STD_LOGIC; -- DSP signal signal ms3: out STD_LOGIC -- DSP signal) is constant T_CSRS: TIME := H_clk_per/2-3ns; constant T_ARS: TIME := H_clk_per/2-3ns; constant T_RW: TIME := H_clk_per - 2ns + (wait_states*h_clk_per); constant T_RSA: TIME := H_clk_per/2-2ns; begin ms3 <= '0'; addr <= address; wait for T_ARS; rd <= '0'; wait for T_RW; rd <= '1'; data_read := data; wait for T_RSA; addr <= (others => 'Z'); ms3 <= '1'; end procedure read_cycle; Rajda & Kasperek 2015 Katedra Elektroniki AGH 27

Podprogramy instrukcje procedure/function Podprogramy są wykorzystywane głównie w weryfikacji (testbench). Jest bardzo dużo różnych ciekawych funkcji w bibliotekach.. Rajda & Kasperek 2015 Dept. of Electronics, AGH UST 28

Instrukcje współbieżne przypisania wartości sygnałom bezwarunkowe (unconditional) warunkowe (conditonal) decyzyjne (selected) podprogramy block Rajda & Kasperek 2015 Katedra Elektroniki AGH 29

Instrukcje współbieżne Instrukcja block Grupuje instrukcje współbieżne. Bloki można zagnieżdżać, tworząc hierarchię. Składnia: [etykieta:] block [(wyrażenie_typu_boolean)] [is]; [deklaracje] begin instrukcje współbieżne; end block [etykieta]; deklaracje: stałych, typów, sygnałów podprogramów klauzula use komponentów Rajda & Kasperek 2015 Katedra Elektroniki AGH 30

Instrukcje współbieżne Instrukcja block Wyrażenie_typu_boolean automatycznie generuje sygnał guard, który może warunkować przypisania wartości sygnałom przez klauzulę guarded. Przykład: B1: block (control) begin s <= guarded '1'; end block B1; Przypisanie s <= '1' zajdzie, jeżeli control jest równe true. Uwaga!!! Nie wszystkie narzędzia dopuszczają korzystanie z tej opcji. Rajda & Kasperek 2015 Katedra Elektroniki AGH 31

Ciąg dalszy nastąpi Rajda & Kasperek 2015 Katedra Elektroniki AGH 32