Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Podobné dokumenty
Příklady popisu základních obvodů ve VHDL

Koncept pokročilého návrhu ve VHDL. INP - cvičení 2

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Úvod do jazyka VHDL. Jan Kořenek Návrh číslicových systémů

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Souhrn Apendixu A doporučení VHDL

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Číslicové obvody a jazyk VHDL

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

12. VHDL pro verifikaci - Testbench I

2. Entity, Architecture, Process

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Organizace předmětu, podmínky pro získání klasifikovaného zápočtu

Návrh. číslicových obvodů

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

Jazyk VHDL konstanty, signály a proměnné. Jazyk VHDL paralelní a sekvenční doména. Kurz A0B38FPGA Aplikace hradlových polí

1. Seznamte se s výukovou platformou FITkit (

Cíle. Teoretický úvod

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

14. Složitější konstrukce

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

7. Popis konečného automatu

Návrh ovládání zdroje ATX

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y Rovnicí y = x 1. Přiřazení signálů:

Sčítačky Válcový posouvač. Demonstrační cvičení 6

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Architektura počítačů Logické obvody

Násobičky, Boothovo překódování. Demonstrační cvičení 7

Architektura počítačů Logické obvody

Pokročilé využití jazyka VHDL. Pavel Lafata

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Vzorový příklad. Postup v prostředí ISE. Zadání: x 1 x 0 y. Rovnicí y = x 1. x 0. Přiřazení signálů: ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

3. Sekvenční logické obvody

BI-JPO (Jednotky počítače) Cvičení

Digitální technika. Jazyk VHDL, základy návrhu. Ing. Jakub Št astný, Ph.D. 1

... sekvenční výstupy. Obr. 1: Obecné schéma stavového automatu

PROGRAMOVATELNÁ LOGICKÁ POLE A JAZYKY HDL

Číselné vyjádření hodnoty. Kolik váží hrouda zlata?

1 Stručný popis jazyku VHDL

SEKVENČNÍ LOGICKÉ OBVODY

Obsah přednášky. programovacího jazyka. Motivace. Princip denotační sémantiky Sémantické funkce Výrazy Příkazy Vstup a výstup Kontinuace Program

Struktura a architektura počítačů (BI-SAP) 3

Základní znaky. - Ve srovnání se Spice jsou velmi složité a vyžadují dlouhou dobu na plné osvojení. - Velmi nákladné simulační programy.

Chapter Základní principy simulace :).

Struktura a architektura počítačů (BI-SAP) 4

5. Sekvenční logické obvody

Typy a použití klopných obvodů

Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011

Jazyk VHDL zápis čísel, znaků a řetězců. Jazyk VHDL základní datové typy a operátory. Kurz A0B38FPGA Aplikace hradlových polí

Sekvenční logické obvody

Struktura a architektura počítačů (BI-SAP) 10

Kódy pro odstranění redundance, pro zabezpečení proti chybám. Demonstrační cvičení 5 INP

Implementace čítačů v číslicových systémech 2 Jakub Šťastný ASICentrum, s.r.o. FPGA Laboratoř, Katedra teorie obvodů FEL ČVUT Praha

Projekt: Přístupový terminál

Pascal. Katedra aplikované kybernetiky. Ing. Miroslav Vavroušek. Verze 7

BDIO - Digitální obvody


Strojový kód. Instrukce počítače

Struktura a architektura počítačů

Operace ALU. INP 2008 FIT VUT v Brně

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

ZÁKLADY PROGRAMOVÁNÍ. Mgr. Vladislav BEDNÁŘ /14

Profilová část maturitní zkoušky 2014/2015

Použití jazyka VHDL pro návrh číslicových obvodů

Příklad č. 1 Přepis informace ze vstupů (SW0 až SW3) na ledky (LEDG0 až LEDG3)

Profilová část maturitní zkoušky 2015/2016

Y36SAP 2007 Y36SAP-4. Logické obvody kombinační a sekvenční používané v číslicovém počítači Sčítačka, půlsčítačka, registr, čítač

Pohled do nitra mikroprocesoru Josef Horálek

Základní principy konstrukce systémové sběrnice - shrnutí. Shrnout základní principy konstrukce a fungování systémových sběrnic.

OPERAČNÍ PROGRAM PRAHA ADAPTABILITA & EU:

Vývoj VHDL. Verilog HDL

1 Digitální zdroje. 1.1 Převod digitálních úrovní na analogový signál. Cílem cvičení je osvojení práce s digitálními zdroji signálu.

Digitální obvody. Doc. Ing. Lukáš Fujcik, Ph.D.

3.7.5 Znaménkové operátory Násobící operátory Rùzné operátory Základní objekty Konstanty Sig

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Logické obvody - sekvenční Formy popisu, konečný automat Příklady návrhu

Mikrokontroléry. Doplňující text pro POS K. D. 2001

Testování a spolehlivost. 3. Laboratoř Program Atalanta, BIST, testování sekvenčních obvodů

Simulace číslicových obvodů na hradlové úrovni: model návrhu Jakub Šťastný ASICentrum, s.r.o. Katedra teorie obvodů FEL ČVUT Praha

Implementace čítačů v číslicových systémech Jakub Šťastný

Projekt Pospolu. Sekvenční logické obvody Klopné obvody. Autorem materiálu a všech jeho částí, není-li uvedeno jinak, je Ing. Jiří Ulrych.

Struktura a architektura počítačů (BI-SAP) 7

Princip funkce počítače

Registry a čítače část 2

Technická kybernetika. Obsah. Klopné obvody: Použití klopných obvodů. Sekvenční funkční diagramy. Programovatelné logické automaty.

Činnost CPU. IMTEE Přednáška č. 2. Několik úrovní abstrakce od obvodů CPU: Hodinový cyklus fáze strojový cyklus instrukční cyklus

Kryptoanalýza šifry PRESENT pomocí rekonfigurovatelného hardware COPACOBANA

Přednáška - Čítače. 2013, kat. měření, ČVUT - FEL, Praha J. Fischer. A3B38MMP, 2013, J.Fischer, ČVUT - FEL, kat. měření 1

Systém řízení sběrnice

Kubatova Y36SAP procesor - control unit obvodový a mikroprogramový řadič RISC Y36SAP-control unit 1

ASYNCHRONNÍ ČÍTAČE Použité zdroje:

Struktura a architektura počítačů

3. Aritmetika nad F p a F 2

5. A/Č převodník s postupnou aproximací

Návrh čítače jako automatu

Návrh FPGA systémů. Jazyk VHDL, principy simulace. Ing. Jakub Št astný, Ph.D. 1

Transkript:

Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti Simulace číslicových obvodů (MI-SIM) zimní semestr 2010/2011 Jiří Douša, katedra číslicového návrhu (K18103), České vysoké učení technické v Praze, fakulta informačních technologií Program cvičení: Cvičení 1: analýza jednoduchých modelů v jazyku VHDL, Cvičení 2: vypracování 1. projektu, Cvičení 3: vypracování 1. projektu, Cvičení 4: test 1, dokončení a odevzdání 1. projektu, Cvičení 5: vypracování 2. projektu, Cvičení 6: vypracování 2. projektu, Cvičení 7: test 2, dokončení a odevzdání 2. projektu, zápočet.

Cvičení 1: analýza ukázkových modelů Předmětem 1. cvičení je seznámit studenty se simulačním systémem ModelSim. K tomu účelu jsou na následujících slajdech předloženy demonstračnimi příklady jednoduchých kombinačních i sekvenčních obvodů v jazyku VHDL. V těchto demostračních příkladech jsou s předstihem (vůči přednáškám) použity základní a nejpotřebnější konstrukce jazyka VHDL včetně náznaku jednoduchých testovacích programů. Tyto ukázky mají posloužit studentům jako inspirace při řešení jejich projektů. Podrobnosti jazyka VHDL budou postupně probírány na přednáškách. Pomocí uvedených ukázkových programů lze rovněž demonstrovat jednotlivé funkce systému ModelSim (editace zdrojových programů, jejich překlad, zpracování výsledného modelu, spuštění simulace, trasování programu a jeho ladění, zobrazení časových průběhů). 21.10.2011 MI-SIM: Jiří Douša 2

Cvičení 1: model invertoru library IEEE; use IEEE.std_logic_1164.all; entity INVERTOR is port ( A : in std_logic; -- input port Y : out std_logic); -- output port end INVERTOR; architecture INVERTOR_BODY of INVERTOR is // no local declarations are needed INV : process if A = '0' then Y <= '1' after 20 ns; else Y <= '0' after 13 ns; end if; -- statements with the transport delay: -- if A = '0' then Y <= transport '1' after 20 ns; -- else Y <= transport '0' after 13 ns; end if; wait on A; end process INV; end INVERTOR_BODY; 21.10.2011 3 MI-SIM: Martin Novvotný, Jiří Douša

Cvičení 1: test invertoru library IEEE; use IEEE.std_logic_1164.all; entity TB_INVERTOR is end TB_INVERTOR; -- no ports architecture TB_INVERTOR_BODY of TB_INVERTOR is -- declaration of inner sinals follows: signal INP, OUTP : std_logic; -- declaration of a socket for the entity INVERTOR ( with the same -- interface) component INVERTOR port ( A : in std_logic; Y : out std_logic ); end component; -- architecture operating part follows -- named port mapping is used: INV : INVERTOR port map (A => INP, Y => OUTP); --INV : INVERTOR port map (Y => OUTP, A => INP); -- process to generace stimulus for the INVERTOR follows GEN: process INP <= '1'; wait for 100 ns; INP <= '0'; wait for 100 ns; INP <= '1'; wait; -- wait for ever end process GEN; end TB_INVERTOR_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 4

Cvičení 1: model multiplexoru entity MUX is port ( B : in bit_vector (3 downto 0); SEL : in bit_vector (1 downto 0); Y : out bit); end MUX; architecture MUX_BODY of MUX is // architecture operation part follows MX: process (B, SEL) case SEL is when "00" => Y <= B(0); when "01" => Y <= B(1); when "10" => Y <= B(2); when "11" => Y <= B(3); end case; end process; end MUX_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 5

entity TESTER is end TESTER; Cvičení 1: test multiplexoru architecture TESTER_body of TESTER is signal TB : bit_vector (3 downto 0); signal TSEL : bit_vector (1 downto 0); signal TY : bit; component MUX port ( B : in bit_vector (3 downto 0); SEL: in bit_vector (1 downto 0); Y : out bit); end component; MX1: MUX port map (TB, TSEL, TY); -- installation of the tested entity GEN: process -- process to drive inputs of the tested entity TB <= "0101"; TSEL <= "00"; wait for 100 ns; TB <= "1111"; wait for 100 ns;..; end process; end TESTER_body; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 6

Cvičení 1: aritmeticko logická jednotka package ALU_TYPY is type OPERATION is (add, sub, mul, div); end ALU_TYPY; use work.alu_typy.all; entity ALU is port (A, B : in integer; OPER : in OPERATION; Y : out integer); end ALU; architecture ALU_BODY of ALU is ALU_P: process (A, B, OPER) case OPER is when add => Y <= A + B after 10 ns; when sub => Y <= A - B after 10 ns; when mul => Y <= A * B after 10 ns; when div => Y <= A / B after 10 ns; when others => null; end case; end process; end ALU_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 7

Cvičení 1: komparátory library IEEE; use IEEE.std_logic_1164.all; entity COMP1 is -- one bit comparator port (R, S : in std_logic; T : out std_logic); end KOMP1; architecture COMP1_body of COMP1 is T <= not (R xor S) after 5 ns; end COMP1_body; library IEEE; use IEEE.std_logic_1164.all; entity COMP4 is -- four bit comparator port ( U, V : in std_logic_vector (3 downto 0); W : out std_logic_vector (3 downto 0) ); end COMP4; architecture COMP4_body of COMP4 is component COMP1 port (R, S : in std_logic; T : out std_logic); end component; C0: COMP1 port map (R=>U(0), S=>V(0), T=>W(0)); C1: COMP1 port map (R=>U(1), S=>V(1), T=>W(1)); C2: COMP1 port map (R=>U(2), S=>V(2), T=>W(2)); C3: COMP1 port map (R=>U(3), S=>V(3), T=>W(3)); end COMP4_body; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 8

Cvičení 1: klopný obvod library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF is port ( D : in std_logic; -- data input CLK : in std_logic; -- clock signal Q : out std_logic -- output ); end DFF; architecture DFF_BODY of DFF is DP: process (CLK) -- why FF and not latch? if CLK = '1' then Q <= D after 10 ns; end if; end process; end DFF_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 9

Cvičení 1: klopný obvod library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF_SYN is port ( D : in std_logic; CLK : in std_logic; RES_SYN : in std_logic; Q : out std_logic ); end DFF_SYN; -- reset input architecture DFF_SYN_BODY of DFF_SYN is DP: process (CLK) -- why synchronous reset? if CLK = '1' then -- why FF and not latch? if RES_SYN = '1' then Q <= '0' after 10 ns; else Q <= D after 10 ns; end if; end if; end process; end DFF_SYN_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 10

Cvičení 1: klopný obvod chybný model library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF_ASYN is port ( ); end DFF_ASYN; D : in std_logic; CLK : in std_logic; RES_ASYN : in std_logic; Q : out std_logic -- wrong version follows: two simultaneously driven processes => -- conflict on signal Q architecture WRONG of DFF_ASYN is P1: process (RES_ASYN) -- asynchronous reset if RES_ASYN = '1' then Q <= '0'; end if; end process; P2: process (CLK) if CLK = '1' and RES_ASYN = '0' then Q <= D; end if; end process; end WRONG; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 11

Cvičení 1: klopný obvod správný model library IEEE; use IEEE.STD_LOGIC_1164.all; entity DFF_ASYN is port ( D : in std_logic; CLK : in std_logic; RES_ASYN : in std_logic; Q : out std_logic ); end DFF_ASYN; architecture CORRECT of DFF_ASYN is // one process drives the signal Q => only one driver of Q exists DP: process (CLK, RES_ASYN) if RES_ASYN = '1' then Q <= '0' after 10 ns; elsif CLK = '1' and CLK'event then Q <= D after 10 ns; end if; end process; end CORRECT; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 12

Cvičení 1: model čítače library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED. all; entity COUNTER is port ( ); CLK -- variant using the mode buffer : in std_logic; RES_ASYN : in std_logic; end COUNTER; DOUT : buffer std_logic_vector (3 downto 0) architecture COUNTER _BODY of COUNTER is CNT: process (CLK, RES_ASYN) if RES_ASYN = '1' then DOUT <= (others => '0') after 10 ns; end if; elsif CLK = '1' and CLK'event then // following statement reads the signal DOUT!!!!! DOUT <= DOUT + '1' after 10 ns; end process; end COUNTER_BODY; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 13

Cvičení 1: model čítače -- variant without using buffer library IEEE; use IEEE.STD_LOGIC_1164.all; use IEEE.STD_LOGIC_UNSIGNED.all; entity COUNTER_1 is port ( CLK : in std_logic; RES_ASYN : in std_logic; DOUT : out std_logic_vector (3 downto 0) ); -- mode out end COUNTER_1; architecture COUNTER_BODY_1 of COUNTER_1 is signal C : std_logic_vector (3 downto 0); -- needed inner signal CNT: process (CLK, RES_ASYN) -- asynchronous reset if RES_ASYN = '1' then C <= (others => '0') after 10 ns; elsif CLK = '1' and CLK'event then C <= C + '1' after 10 ns; -- other possibilities of increment : C <= C + 1 after 10 ns; -- C <= C + "0001"after 10 ns; end if; end process; OUTP: process ( C ) DOUT <= C; end process ; -- equivalent parallel statement : DOUT <= C; end COUNTER_BODY_1; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 14

Cvičení 1: model automatu package AUTO_TYPES is type TYPE_INPUT is (A, B, C); type TYPE_OUTPUT is (P, Q); end AUTO_TYPY; -- input symbols -- output symbols library IEEE; use IEEE.STD_LOGIC_1164.all; use work.auto_types.all; entity AUTOMATON is port ( INP : in TYPE_INPUT; OUTP : out TYPE_OUTPUT; CLK, RESET : in std_logic ); end AUTOMATON; architecture AUTOMATON_MOORE of AUTOMATON is type TYPE_STATE is (ASBS, ASBL, ALBS, ALBL); -- inner states signal STATE, NEXT_STATE : TYPE_STATE; OUT_FUN : process (STATE) -- specification of output function case STATE is when ASBL => OUTP <= Q; when others => OUTP <= P; end case; end process; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 15

Cvičení 1: model automatu DS : process (INP, STATE) -- specification of transient function case STATE is -- testing current state when ASBS => case INP is when A => NEXT_STATE <= ALBS; when B => NEXT_STATE <= ASBL; when C => NEXT_STATE <= ASBS; end case; when ASBL => case INP is when A => NEXT_STATE <= ALBL; when B => NEXT_STATE <= ASBS; when C => NEXT_STATE <= ASBL; end case; when ALBS => case INP is when A => NEXT_STATE <= ASBS; when B => NEXT_STATE <= ALBL; when C => NEXT_STATE <= ALBS; end case; when ALBL => case INP is when A => NEXT_STATE <= ASBL; when B => NEXT_STATE <= ALBS; when C => NEXT_STATE <= ALBL; end case; end case; end process; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 16

Cvičení 1: model automatu REG : process (CLK, RESET) -- flip-flop with asynchronous reset if RESET = '1' then STATE <= ASBS; elsif CLK = '1' and CLK'event then STATE <= NEXT_STATE; end if; end process; end AUTOMATON_MOORE; 21.10.2011 MI-SIM: Martin Novotný, Jiří Douša 17

Cvičení 2 3: projekt 1 Náplní druhého, třetího a částečně i čtvrtého cvičení je řešení prvého projektu, které spočívá v implementaci simulačního modelu vybraného číslicového obvodu v jazyku VHDL. Níže uvedený seznam uvádí konktrétní číslicové obvody, jejichž modely mohou být v rámci tohoto projektu implementovány. Přiřazení úloh studentům provede cvičicí. V odůvodněných případech může student v rámci daného projektu řešit nějaký problém na základě vlastní specifikace. Zadání: 1. Datové registry výukového procesoru DOP. 2. Aritmeticko-logická jednotka výukového procesoru DOP. 3. Registr příznaků výukového procesoru DOP. 4. Rozhraní mezi vnitřní a vnější sběrnicí výukového procesoru DOP. 5. Řadič výukového procesoru DOP. 6. Operační paměť procesoru DOP. 7. Procesor DOP sestavený z předchozích částí. 8. Generátor tabulkou zadané periodické funkce. Poznámka: Kompletní strukturní schéma procesoru DOP je uvedeno v dokumentaci cvičení předmětu BI-JPO. Podrobná specifikace požadavků na zpracování modelu generátoru funkce je uvedena na následujících slajdech. 21.10.2011 MI-SIM: Jiří Douša 18

Cvičení 2-3: generátor funkce Stručný popis celkové koncepce generátoru: Předmětem projektu je návrh generátoru periodické funkce dle následujícího obrázku: Funkční hodnoty z prvého kvadrantu periody funkce jsou uloženy v pevné paměti typu ROM. Tyto jsou z paměti postupně čteny a posílány na výstup generátoru. Paměť je adresována reversibilním čítačem, který je řízen řadičem generátoru. Celkové schéma je na následujícím obrázku: 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 19

Cvičení 2-3: generátor funkce Při inkrementaci čítače jsou adresovány hodnoty z kvadrantů 1 a 3, při jeho dekrementaci se adresují hodnoty kvadrantů 2 a 4. Výpočet záporných hodnot kvadrantů 3 a 4 zajišťuje negátor, který počítá dvojkový doplněk vstupní hodnoty. Specifikace zadání: Vypracujte funkční modely dílčích částí generátoru (tj. NEGATOR, MULTIPLEXOR, COUNTER, MEMORY, CONTROLLER), tyto pak použijte k návrhu výsledného strukturního modelu generátoru. Dimenzi adresové, resp datové sběrnice paměti parametrizujte hodnotou aw, resp. w, které z důvodu jejich možného sdílení v entitách dílčích modelů deklarujte jako konstanty ve vlastní knihovně GEN_CONST. V deklaraci této knihovny použijte hodnot aw = 4 a w = 8. Pro representaci logických veličin použijte datový typ std_logic. Výsledný model celého generátoru otestujte automatickým testem realizovaným entitou TEST s architekturou TESTBENCH. Poznámka: následující slajdy stanoví předepsaný způsob řěšení. 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 20

Cvičení 2-3: generátor funkce Negator Negátor plní funkci dvojkového doplňku; jde o kombinační obvod dle následujícího obrázku: A Y Vstupy: w-bitový operand A (výstup paměti). Výstup: w-bitový výsledek Y (výstup generátoru). Poznámka: po inversi všech bitů operandu A je třeba k takto získanému číslu přičíst hodnotu 1. Toto lze provest zjednodušenou sčítačkou (inkrementorem) dle následujícího obrázku: 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 21

Cvičení 2-3: generátor funkce Pokyny k návrhu negátoru: Jako model negátoru realizujte entitu NEGATOR s architekturou NEGATOR_BODY. Funkci inkrementoru v dané architektuře implementujte pomocí procesu, který v cyklu vypočítává jednotlivé bity výsledku. Pro záznam mezistupňových přenosů inkrementoru použijte proměnnou C. Samotnou inversi bitů proveďte s využitím paralelního signálového příkazu. Pro specifikaci portů entity NEGATOR použijte konstantu w z knihovny GEN_CONST. Pro zpoždění invertoru, resp. inkrementoru uvažujte hodnoty 1 ns, resp. 3 ns. Nástin řešení: library ieee; use ieee.std_logic_1164.all; use work.gen_const.all; entity NEGATOR is port ( A : in std_logic_vector (w-1 downto 0); Y : out std_logic_vector (w-1 downto 0) ); end NEGATOR; architecture NEGATOR_BODY of NEGATOR is.; -- implementace NEGATORU end architecture; 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 22

Cvičení 2-3: generátor funkce Pokyny k návrhu multiplexoru: Navrhněte model multiplexoru se dvěma w-bitovými vstupy A, B, jedním jednobitovým výběrovým vstupem SEL a jedním w-bitovým výstupem Y. Příslušnou architekturu implementujte pomocí jednoho procesu. Předpokládejte zpoždění multiplexoru 2 ns. library ieee; use ieee.std_logic_1164.all; use work.gen_const.all; entity MULTIPLEXER is port ( SEL : in std_logic; A, B : in std_logic_vector (w-1 downto 0); Y : out std_logic_vector (w-1 downto 0) ); end MULTIPLEXER; architecture MULTIPLEXER_BODY of MULTIPLEXER is.; -- implementace MULTIPLEXORU end archtecture MULTIPLEXER_BODY; 21.10.2011 MI-SIM: Jiří Douša, Jiří Buček 23

Cvičení 2-3: generátor funkce Paměť funkčních hodnot (typu ROM) Paměť je kombinační obvod s jedním aw-bitovým vstupem A (adresová sběrnice) a jedním w-bitovým výstupem D (datová sběrnice). Pokyny k návrhu paměti: Navrhněte entitu MEMORY s architekturou MEMORY_BODY. Vlastní model paměti implementujte pomocí přednastavené konstanty typu MEM_TYPE, který koncipujte jako pole délky (2**aw) - 1, jehož elementy tvoří w - bitové vektory typu std_logic_vector. Vlastní deklaraci konstanty aw přidejte do knihovny GEN_CONST. Pro uvažovaný případ celkové kapacity paměti 16 bajtů ( aw = 4 a w = 8 ) použijte následující hodnoty jako hodnoty prvého kvadrantu generované funkce: 00000000, 00001111, 00011101, 00101010, 00110110, 01000001, 01001011, 01010100, 01011100, 01100011, 01101001, 01101110, 01110010, 01110101, 01110111, 01111000. Pro reprezentaci vybavovací doby paměti uvažujte 5 ns. 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 24

Cvičení 2-3: generátor funkce Cítač: Definujte entitu COUNTER a architekturu COUNTER_BODY jako funkční model synchronního čítače a asynchronním signálem RESET. Vstupy čítače: CLK..hodinové pulsy, RESET..nulování čítače, UP..1, resp. 0 pro vzestupné, resp. sestupné čítání. Výstupy čítače: TOP, resp. BOTTOM. hlášení o naplnění, resp. vyprázdnění čítače, CNT současný stav čítače (pro adresování paměti s aw-bitovou adresovou sběrnicí).. Pokyny k návrhu čítače: Pro representaci výstupu i vnitřního stavu čítače použijte typ std_logic_vector a knihovnu std_logic_unsigned pro implementaci operátorů sčítání a odčítání nad vektory. K buzení výstupů TOP a BOTTOM použijte paralelní příkazy. Pro reprezentaci zpoždění výstupních signálů TOP a BOTTOM, resp. CNT vůči náběžné hraně CLK předpokládejte hodnotu 3 ns, resp. 2 ns. 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 25

Cvičení 2-3: generátor funkce Řadič: Úkolem řadiče je generovat výběrový signál SEL pro multiplexor a řídící signál UP pro reversibilní čítač tak, aby generátor generoval periodický průběh na základě uložených hodnot prvého kvadrantu celé periody. Pokyny k návrhu řadiče: Implementujte řadič generátoru jako konečný automat typu Mealy pomocí entity CONTROLLER a příslušné architektury CONTROLLER_BODY sestavené ze tří procesů (pro definici výstupní funkce, pro definici přechodové funkce a pro popis klopných obvodů). Vstupy řadiče: TOP ( plný čítač: poslední adresa paměti), BOTTOM (prázdný čítač: počáteční adresa paměti) RESET (nulování čítače), CLK (hodinový signál). 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 26

Cvičení 2-3: generátor funkce Návrh celkového modelu generátoru: Specifikujte entitu GENERATOR ( vstupy RESET a CLK, výstup DATA) s příslušnou strukturní architekturou GENERATOR_BODY, vytvořenou pomocí dílčích modelů CONTROLLER, COUNTER, MEMORY, NEGATOR a MULTIPLEXOR. Test generátoru: Navrhněte entitu TEST s architekturou TESTBENCH pro automatickou kontrolu generovaných hodnot. Dekadické hodnoty y i ( i= 0,1.15) z 1. kvadrantu funkce, které jsou uložené v paměti generátoru jsou uvedeny v následující tabulce: i x i y i 0 15 0 1 14 15 2 13 29... i x i 1 1 y i 1 + x i 1 14 1 119 15 0 120 Pro kontrolní výpočet výstupů generátoru lze požít následující vztahy: y 0 = 0, y i + 1 = x i + y i, kde x i a y i jsou hodnoty z předešlé tabulky. 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 27

Cvičení 2-3: generátor funkce Nástin testovací entity a architektury: library ieee; use ieee.std_logic_1164.all; use work.gen_const.all; use ieee.std_logic_unsigned.all; entity TEST is end TEST; architecture TESTBENCH of TEST is component GENERATOR port ( -- deklarace portů ); end component; -- signal... deklarace signálů ( Clk, Reset, Vystup ) Gen: GENERATOR port map (clk => Clk,...); -- instalace generátoru tst: process variable y : integer; -- proměnná pro uložení očekávaných hodnot for i in. loop cyklus pro testování jednotlivých výstupů wait until..; -- synchronizace s clk y :=. ; -- výpočet očekávané hodnoty wait for... ; -- čekej na ustálení výstupního signálu -- následuje srovnání dodnoty testovaného vektoru (Vystup) s -- očekávanou hodnotou (y), assert y = conv_integer ( Vystup ) report chyba severity failure; end loop; ; -- případná zpráva o testu wait; -- případné ukončení testu end process; -- tst end TESTBENCH; 21.10.2011 MI-SIM: Jiří Buček, Jiří Douša 28

Cvičení 4 Dokončení 1. projektu: Podmínkou dokončení projetu je úspěšné provedení úplného automatického testu zadaného obvodu v jazyku VHDL. Test 1: Předmětem testu 1 je znalost základních principů jazyka VHDL a analýza chování vybraných časových specifikací. Důraz je kladen především na sémantiku; syntax není předmětem testu. Jako ukázka možné náplně 1. testu může sloužit následující slajd 21.10.2011 MI-SIM: Jiří Douša 29

Ukázka 1. testu Otázky: 1) Vysvětlete význam zápisu a quiet (2ns). 2) Které příkazy mohou vytvořit budič signálu? 3) Vysvětlete význam signálu guard a uveďte kde je použitelný. Uvažujte následující deklarace a příkazy. Pro následující příklady nakreslete časové průběhy zmíněných signálů v intervalu <0, 12>. signal a1, b1, a5: std_logic; signal a2 : std_logic_vector (3 downto 0); signal b2: std_logic_vector (1 downto 0); signal a51: std_logic register; Příklad 1: process a1 <= '1','0' after 2 ns, '1' after 3 ns; wait for 5 ns; endprocess; process (a1) b1 <= not a1 after 1 ns; end process; Priklad 2: process wait for 1 ns; a2(3 downto 0) <= "1001"; wait for 1 ns; a2(3 downto 0) <= "0010"; wait for 1 ns; end process; process (a2) variable i: integer; for i in 2 downto 0 loop b2 <= a2(i+1) & a2(i); end loop; end process; Priklad 3: : a5 <= '0', '1' after 3 ns; BL1: block ( a5 = '0') a51 <= guarded a5 after 1 ns; end block; 21.10.2011 MI-SIM: Jiří Douša 30

Cvičení 5-6: projekt 2 Náplní pátého a šestého cvičení je realizace druhého projektu, která spočívá v implementaci modelu číslicového obvodu v jazyku VERILOG. Jako příklad možného zadání slouží následující seznam. Přiřazení konkrétních úloh studentům provede cvičicí. V odůvodněných případech lze v rámci daného projektu rovněž řešit nějaký problém na základě vlastní specifikace, případně použít některé zadání ze seznamu prvého projektu. Zadání: 1. Násobička osmibitových celých nezáporných čísel. 2. Násobička osmibitových celých čísel v doplňkovém kódu (Boothova metoda). 3. Dělička celých osmibitových nezáporných čísel (varianta s průběžným obnovováním nezáporného zbytku). 4. Dělička celých osmibitových nezáporných čísel (varianta bez obnovování nezáporného zbytku). Poznámka: Požadavky na zpracování zbývajících projektů jsou zcela analogické požadavkům 1. projektu. 21.10.2011 MI-SIM: Jiří Douša 31

Cvičení 7: test 2, zápočet. Dokončení 2. projektu: Podmínkou dokončení projetu je úspěšné provedení úplného automatického testu modelu zadaného obvodu v jazyku VERILOG.. Test 2: Předmětem testu 2 je znalost základních principů jazyka VERILOG a analýza chování vybraných časových specifikací.. Důraz je kladen především na sémantiku; syntax není předmětem testu. Jako ukázka možné náplně 2. testu může sloužit následující slajd. Zápočet: Podmínkou pro udělení zápočtu je získání předepsaného počtu bodů, které lze získat vypracováním obou projektů včetně automatického otestování příslušných modelů a napsáním obou testů. 21.10.2011 MI-SIM: Jiří Douša 32

Cvičení 7: 2. test Otázky: 1) Uvažujte modul, jehož hlavička je module T #( ) (output reg y, output z, input x); a) Vyjmenujte typy příkazů, pomocí kterých lze uvnitř modulu typu T přiřadit hodnotu formálnímu výstupu y, b) Uvažujte nějaký nadřazený modul, uvnitř něhož existují deklarace reg u, v; wire c, d; wand e, f; wor g, h; a uvnitř kterého se nachází instalace instance t1 typu T # (.) t1 (.); b1) vyjmenujte všechny deklarované identifikátory, které lze při instalaci instance t1 mapovat na její formální port y, B2) vyjmenujte všechny deklarované identifikátory, které lze při instalaci instance t1 použít jako aktuální porty formálního portu x. 2) Popište jak je v systému Verilog řešeno delta zpoždění a v kterých případech ho potřebujete použít. V dále uvedených příkladech nakreslete časové průběhy všech proměnných a sítí na intervalu (0, 13). Příklad 1: initial a11 <= #2 1; #3 a11 <= 0; a11 = #4 1; a11<= #3 0; end initial b11 = repeat (1)@(negedge a11) 1; #1 b11= 0; end Priklad 2: initial a21 =1; b21 = 0; #3; fork a21 = b21; b21 = 1; #2; join #3; a21 = #2 b21; b21 = #2 ~a21; end 21.10.2011 MI-SIM: Jiří Douša 33