Układy reprogramowalne i SoC Specjalizowane moduły FPGA

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

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

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

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

LABORATORIUM TECHNIKA CYFROWA. Pamięci. Rev.1.35

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

Programowanie Układów Logicznych kod kursu: ETD6203 W dr inż. Daniel Kopiec. Pamięć w układach programowalnych

Systemy Czasu Rzeczywistego FPGA

Systemy Czasu Rzeczywistego FPGA

Systemy Czasu Rzeczywistego FPGA

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

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

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

Specyfika projektowania Mariusz Rawski

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

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

Projektowanie hierarchiczne Mariusz Rawski

Sposoby projektowania systemów w cyfrowych

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

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

LABORATORIUM UKŁADÓW PROGRAMOWALNYCH

Programowalne układy logiczne

Programowalne Układy Logiczne. Wykład III FPGA dr inż. Paweł Russek

Programowalne układy logiczne

Architektura komputerów Reprezentacja liczb. Kodowanie rozkazów.

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

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

Ćwiczenie 1 VHDL - Licznik 4-bitowy.

Systemy Czasu Rzeczywistego FPGA

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

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

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

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

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

Programowalne układy logiczne

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

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

Projekt prostego procesora

PUCY Kolos 2: Reloaded

Programowalne układy logiczne

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

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

Projektowanie Urządzeń Cyfrowych

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

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

Przykład realizacji ćwiczenia nr 8.

Medical electronics part 9a Electroencephalography (EEG)

Projektowanie hierarchiczne Mariusz Rawski

Architektura komputerów Wprowadzenie do algorytmów

LABORATORIUM ELEKTRONIKA Projektowanie koderów, transkoderów i dekoderów w języku VHDL

Projektowanie z użyciem bloków funkcjonalnych w układach programowalnych firmy Xilinx

Projektowanie w VHDL

Zaawansowane programowanie w języku C++ Wyjątki

Kierunek Elektronika, III rok Języki Opisu Sprzętu. Platforma sprzętowa. Rajda & Kasperek 2016 Katedra Elektroniki AGH 1

Kierunek Inżynieria Akustyczna, V rok Programowalne Układy Cyfrowe. Platforma sprzętowa. Rajda & Kasperek 2014 Katedra Elektroniki AGH 1

WYTYCZNE I ZALECENIA DO PRZYGOTOWANIA PRAC DYPLOMOWYCH INSTYTUTU INFORMATYKI I AUTOMATYKI KIERUNKU INFORMATYKA

Krótkie wprowadzenie do ModelSim i Quartus2

Projektowanie automatów z użyciem VHDL

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

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

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

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

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

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

Wykorzystanie układów FPGA w implementacji systemów bezpieczeństwa sieciowego typu Firewall

FPGA, CPLD, SPLD. Synteza systemów reprogramowalnych 1/27. dr inż. Mariusz Kapruziak pok. 107, tel

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

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

Układy kryptograficzne z uŝyciem rejestrów LFSR

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

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

Języki opisu sprzętu VHDL Mariusz Rawski

Zaawansowane programowanie w języku C++ Przeciążanie operatorów

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

Zaawansowane programowanie w języku C++ Zarządzanie pamięcią w C++

Systemy operacyjne na platformach mobilnych 2 Programowanie aplikacji z graficznym interfejsem użytkownika w GTK+

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

Programowanie Układów Logicznych kod kursu: ETD6203. Komunikacja z układami cyfrowymi W dr inż. Daniel Kopiec

Projektowanie układów kryptograficznych Mariusz Rawski

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

Synteza strukturalna Mariusz Rawski

Systemy operacyjne na platformach mobilnych 2 Podstawy obsługi powłoki Bash

Cyfrowe przetwarzanie sygnałów Mariusz Rawski

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki

dr inż. Małgorzata Langer Architektura komputerów

Quartus. Rafał Walkowiak IIn PP Wer

DOKUMENTACJA PROJEKTU

Bezpieczeństwo informacji oparte o kryptografię kwantową

Zaawansowane programowanie w języku C++ Programowanie obiektowe

VHDL cz.1. Rafał Walkowiak IIn PP Wer

Siła (w) pamięci on-chip Implementacje pamięci w układach Cyclone IV firmy Altera

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

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

Politechnika Białostocka Wydział Elektryczny Katedra Automatyki i Elektroniki. ĆWICZENIE Nr 8 (3h) Implementacja pamięci RAM w FPGA.

Zaawansowane programowanie w języku C++ Funkcje uogólnione - wzorce

Zaawansowane programowanie w języku C++ Biblioteka standardowa

Nauczycielem wszystkiego jest praktyka Juliusz Cezar. Nauka to wiara w ignorancję ekspertów Richard Feynman

Zaawansowane programowanie w języku C++ Klasy w C++

Układy Cyfrowe laboratorium

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.

Transkrypt:

Specjalizowane moduły FPGA Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego

Specjalizowane moduły układów Spartan 3 2 Oprócz układów CLB, pozwalających na implementację układów logicznych ogólnego przeznaczenia, rodzina układów Spartan 3 zawiera również zasoby specjalizowane: Digital Clock Managers (DCMs) Block RAM Układy mnożące 18x18 bit Pozwalają one na implementację wybranych funkcji w bardziej wydajny sposób, niż za pomocą CLB

3 Sygnały zegarowe i ich dystrybucja

4 Drzewo zegarowe Clock tree Flip-flops Special clock pin and pad Clock signal from outside world

5 Clock Manager Clock signal from outside world Clock Manager etc. Daughter clocks used to drive internal clock trees or output pins Special clock pin and pad

6 Clock jitter 1 2 3 4 Ideal clock signal Real clock signal with jitter Cycle 1 Cycle 2 Cycle 3 Cycle 4 Superimposed cycles

Digital Clock Manager 7 Moduły DCM pozwalają na: Eliminację przesunięć fazowych zegara (clock skew), wewnątrz układu FPGA lub w stosunku do elementów zewnętrznych Przesunięcie fazowe zegara o ustaloną lub regulowaną część okresu Generację zegara o częstotliwości pomnożonej przez iloraz dwóch liczb Generację zegara o współczynniku wypełnienia 50% na podstawie zegara nie spełniającego tego warunku

8 Digital Clock Manager DCM składa się z czterech komponentów: Delay Locked Loop (DLL) Digital Frequency Synthesizer (DFS) Phase Shift (PS) Status Logic

9 Synteza częstotliwości 1.0 x original clock frequency 2.0 x original clock frequency.5 x original clock frequency

10 Przesunięcie fazowe 0 o Phase shifted 90 o Phase shifted 180 o Phase shifted 270 o Phase shifted

11 Usuwanie clock skew Clock signal from outside world Special clock pin and pad Daughter clock (monitored downstream of the clock manager) fed back to special input De-skewed daughter clocks used to drive internal clock trees or output pins 1 2 3 4 1 2 3 4 1 2 3 Main (mother) clock Untreated daughter clock De-skewed daughter clock

12 Pamięci w FPGA

13 Typy pamięci Memory RAM ROM Memory Single port Dual port Memory With asynchronous read With synchronous read

14 Typy pamięci Memory Distributed (MLUT-based) Block RAM-based (BRAM-based) Memory Inferred Instantiated Manually Using Core Generator

15 Distributed RAM/ROM

16 CLB Slice COUT YB G4 G3 G2 G1 Look -Up O Table Carry & Control Logic Y D EC CK S R Q F5IN BY SR XB F4 F3 F2 F1 Look -Up Table Carry & Control Logic X S D CK EC R Q CIN CLK CE SLICE

17 Xilinx Multipurpose LUT 16-bit SR 16 x 1 RAM 4-input LUT

18 Distributed RAM CLB LUT configurowalny jako Distributed RAM LUT to 16x1 RAM LUTy można połączyć, zwiększając obszar RAM Synchroniczny zapis Asynchroniczny odczyt Używając dodatkowych przerzutników, można czytać synchronicznie Bez dodatkowych zabiegów, odczyt rozproszonej pamięci RAM jest asynchroniczny Z dwóch LUTów może powstać: 32 x 1 single-port RAM 16 x 2 single-port RAM 16 x 1 dual-port RAM LUT LUT LUT RAM32X1S D WE WCLK A0 A1 A2 A3 A4 lub = = O RAM16X2S D0 D1 WE WCLK O0 A0 O1 A1 A2 A3 lub RAM16X1S D WE WCLK A0 O A1 A2 A3 RAM16X1D D WE WCLK A0 SPO A1 A2 A3 DPRA0 DPO DPRA1 DPRA2 DPRA3

19 Block RAM/ROM

Block RAM 20 Najefektywniejsza implementacja pamięci Wykorzystuje specjalizowane bloki FPGA Idealne dla większości zastosowań 3 do 126 bloków pamięci 18 kbits = 18,432 bits per block (16 k bez bitów parzystości) Większe pamięci używają wielu bloków Single i dual-port RAMs Synchroniczny zapis i odczyt (inaczej niż w pamięci rozproszonej)

21 Bloki RAM i mnożarki w strukturze FPGA RAM blocks Multipliers Logic blocks

22 Block RAM w rodzinie układów Spartan 3A Family Device RAM Columns Extended Spartan-3A FPGAs RAM Blocks Per Column Total RAM Blocks Total RAM Bits Total RAM Kbits XC3SD1800A 4 20-22 84 1,548,288 1,512K XC3SD3400A 5 24-26 126 2,322,432 2,268K XC3S50A/AN 1 3 3 55,296 54K XC3S200A/AN 2 8 16 294,912 288K XC3S400A/AN 2 10 20 368,640 360K XC3S700A/AN 2 10 20 368,640 360K XC3S1400A/AN 2 16 32 589,824 576K

23 Konfiguracje pamięci Block RAM 0 1 0 2 0 4 8k x 2 4k x 4 4,095 16k x 1 8,191 0 8+1 2k x (8+1) 2047 6,383 0 1023 16+2 1024 x (16+2)

24 Konfiguracje pamięci Block RAM

25 Single-Port Block RAM

26 Dual-Port Block RAM

Inference vs. Instatiation 27 Istnieją dwie metody umieszczenia pamięci RAM: Wywnioskowane przez syntezer (inferred) Przenośny kod Jawnie umieszczone przez projektanta (instantiated) Najbardziej efektywne wykorzystanie zasobów w danej technologii Wspiera wszystkie rodzaje pamięci RAM

28 Distributed RAM LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); do : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture behavioral of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; end if; end if; end process; do <= RAM(conv_integer(unsigned(a))); end behavioral; Logic Utilization: Number of 4 input LUTs: 656 out of 11,776 5% Logic Distribution: Number of occupied Slices: 332 out of 5,888 5% Number of Slices containing only related logic: 332 out of 332 100% Number of Slices containing unrelated logic: 0 out of 332 0% *See NOTES below for an explanation of the effects of unrelated logic. Total Number of 4 input LUTs: 656 out of 11,776 5% Number used as logic: 144 Number used for 32x1 RAMs: 512 (Two LUTs used per 32x1 RAM) Number of bonded IOBs: 74 out of 372 19% Number of BUFGMUXs: 1 out of 24 4%

29 Block RAM - wersja 1 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); do : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture behavioral of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; end if; do <= RAM(conv_integer(unsigned(a))); end if; end process; end behavioral; Logic Utilization: Logic Distribution: Number of Slices containing only related logic: 0 out of 0 0% Number of Slices containing unrelated logic: 0 out of 0 0% *See NOTES below for an explanation of the effects of unrelated logic. Number of bonded IOBs: 74 out of 372 19% Number of BUFGMUXs: 1 out of 24 4% Number of RAMB16BWEs: 1 out of 20 5%

30 Block RAM - wersja 2 LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); do : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture behavioral of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; signal read_a : std_logic_vector(addr_bits-1 downto 0); begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; end if; read_a <= a; end if; end process; do <= RAM(conv_integer(unsigned(read_a))); end behavioral; Logic Utilization: Logic Distribution: Number of Slices containing only related logic: 0 out of 0 0% Number of Slices containing unrelated logic: 0 out of 0 0% *See NOTES below for an explanation of the effects of unrelated logic. Number of bonded IOBs: 74 out of 372 19% Number of BUFGMUXs: 1 out of 24 4% Number of RAMB16BWEs: 1 out of 20 5%

31 Dual Port RAM - distributed library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); dpra : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); spo : out std_logic_vector(bits-1 downto 0); dpo : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; end if; end if; end process; spo <= RAM(conv_integer(unsigned(a))); dpo <= RAM(conv_integer(unsigned(dpra))); end syn; Logic Utilization: Number of 4 input LUTs: 1,584 out of 11,776 13% Logic Distribution: Number of occupied Slices: 800 out of 5,888 13% Number of Slices containing only related logic: 800 out of 800 100% Number of Slices containing unrelated logic: 0 out of 800 0% *See NOTES below for an explanation of the effects of unrelated logic. Total Number of 4 input LUTs: 1,584 out of 11,776 13% Number used as logic: 560 Number used for Dual Port RAMs: 1,024 (Two LUTs used per Dual Port RAM) Number of bonded IOBs: 114 out of 372 30% Number of BUFGMUXs: 1 out of 24 4%

32 Dual Port RAM - Block - wersja 1 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); dpra : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); spo : out std_logic_vector(bits-1 downto 0); dpo : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; end if; spo <= RAM(conv_integer(unsigned(a))); dpo <= RAM(conv_integer(unsigned(dpra))); end if; end process; end syn; Logic Utilization: Logic Distribution: Number of Slices containing only related logic: 0 out of 0 0% Number of Slices containing unrelated logic: 0 out of 0 0% *See NOTES below for an explanation of the effects of unrelated logic. Number of bonded IOBs: 114 out of 372 30% Number of BUFGMUXs: 1 out of 24 4% Number of RAMB16BWEs: 1 out of 20 5%

33 Dual Port RAM - Block - wersja 2 library ieee; use ieee.std_logic_1164.all; use ieee.std_logic_unsigned.all; use ieee.std_logic_arith.all; entity raminfr is generic ( bits : integer := 32; -- number of bits per RAM word addr_bits : integer := 8); -- 2^addr_bits = number of words in RAM port (clk : in std_logic; we : in std_logic; a : in std_logic_vector(addr_bits-1 downto 0); dpra : in std_logic_vector(addr_bits-1 downto 0); di : in std_logic_vector(bits-1 downto 0); spo : out std_logic_vector(bits-1 downto 0); dpo : out std_logic_vector(bits-1 downto 0)); end raminfr; architecture syn of raminfr is type ram_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); signal RAM : ram_type; signal read_a, read_dpra: std_logic_vector(addr_bits-1 downto 0); begin process (clk) begin if (clk'event and clk = '1') then if (we = '1') then RAM(conv_integer(unsigned(a))) <= di; Logic Utilization: end if; Logic Distribution: read_a <= a; read_dpra <= dpra; end if; end process; spo <= RAM(conv_integer(unsigned(read_a))); dpo <= RAM(conv_integer(unsigned(read_dpra))); end syn; Number of Slices containing only related logic: 0 out of 0 0% Number of Slices containing unrelated logic: 0 out of 0 0% *See NOTES below for an explanation of the effects of unrelated logic. Number of bonded IOBs: 114 out of 372 30% Number of BUFGMUXs: 1 out of 24 4% Number of RAMB16BWEs: 1 out of 20 5%

34 ROM - distributed LIBRARY ieee; USE ieee.std_logic_1164.all; USE ieee.std_logic_arith.all; USE ieee.std_logic_unsigned.all; entity rominfr is generic ( bits : integer := 10; -- number of bits per ROM word addr_bits : integer := 3); -- 2^addr_bits = number of words in ROM port (a : in std_logic_vector(addr_bits-1 downto 0); do : out std_logic_vector(bits-1 downto 0)); end rominfr; architecture behavioral of rominfr is type rom_type is array (2**addr_bits-1 downto 0) of std_logic_vector (bits-1 downto 0); constant ROM : rom_type := ("0000110001", "0100110100", "0100110110", "0110110000", "0000111100", "0111110101", "0100110100", "1111100111"); begin do <= ROM(conv_integer(unsigned(a))); end behavioral; Logic Utilization: Number of 4 input LUTs: 9 out of 11,776 1% Logic Distribution: Number of occupied Slices: 5 out of 5,888 1% Number of Slices containing only related logic: 5 out of 5 100% Number of Slices containing unrelated logic: 0 out of 5 0% *See NOTES below for an explanation of the effects of unrelated logic. Total Number of 4 input LUTs: 9 out of 11,776 1% Number of bonded IOBs: 13 out of 372 3%

35 Distributed RAM - instantiation library IEEE; use IEEE.STD_LOGIC_1164.all; library UNISIM; use UNISIM.vcomponents.all; entity RAM_16X8_DISTRIBUTED is port( CLK : in STD_LOGIC; WE : in STD_LOGIC; ADDR : in STD_LOGIC_VECTOR(3 downto 0); DATA_IN : in STD_LOGIC_VECTOR(7 downto 0); DATA_OUT : out STD_LOGIC_VECTOR(7 downto 0) ); end RAM_16X8_DISTRIBUTED; architecture RAM_16X8_DISTRIBUTED_STRUCTURAL of RAM_16X8_DISTRIBUTED is begin GENERATE_MEMORY: for I in 0 to 7 generate RAM_16x1_S_1: ram16x1s generic map (INIT => X"0000") port map (O => DATA_OUT(I), A0 => ADDR(0), A1 => ADDR(1), A2 => ADDR(2), A3 => ADDR(3), D => DATA_IN(I), WCLK => CLK, WE => WE ); end generate; end RAM_16X8_DISTRIBUTED_STRUCTURAL;

36 Block RAM Waveforms WRITE_FIRST

37 Block RAM Waveforms READ_FIRST

38 Block RAM Waveforms NO_CHANGE

Specjalizowane moduły FPGA Prezentacja jest współfinansowana przez Unię Europejską w ramach Europejskiego Funduszu Społecznego w projekcie pt. Innowacyjna dydaktyka bez ograniczeń - zintegrowany rozwój Politechniki Łódzkiej - zarządzanie Uczelnią, nowoczesna oferta edukacyjna i wzmacniania zdolności do zatrudniania osób niepełnosprawnych Prezentacja dystrybuowana jest bezpłatnie Politechnika Projekt Łódzka, współfinansowany ul. Żeromskiego przez Unię 116, Europejską 90-924 Łódź, tel. (042) 631 28 83 w ramach Europejskiego www.kapitalludzki.p.lodz.pl Funduszu Społecznego