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



Podobné dokumenty
Souhrn Apendixu A doporučení VHDL

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

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

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

14. Složitější konstrukce

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

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

- speciální symboly + - * / =., < > <> <= >= a další. Klíčová slova jsou chráněnými útvary, které nelze použít ve významu identifikátorů.

1 Stručný popis jazyku VHDL

Vývoj VHDL. Verilog HDL

Programovací jazyk Pascal

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

1.1 Struktura programu v Pascalu Vstup a výstup Operátory a některé matematické funkce 5

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

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

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

NPRG030 Programování I, 2010/11

NPRG030 Programování I, 2016/17 1 / :58:13

Object Pascal je přísně typový procedurální jazyk, který umožňuje jak strukturované, tak objektově orientované programování.

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

Architektura počítačů Logické obvody

Architektura počítačů Logické obvody

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

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

Sada 1 - Základy programování

EVROPSKÝ SOCIÁLNÍ FOND. Úvod do PHP PRAHA & EU INVESTUJEME DO VAŠÍ BUDOUCNOSTI

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

- znakové konstanty v apostrofech, např. a, +, (znak mezera) - proměnná zabírá 1 byte, obsahuje kód příslušného znaku

Cvičení 9 - Monitory. monitor m; var proměnné... procedure p; begin... end; begin inicializace; end;

Úvod do programovacích jazyků (Java)

a operačních systémů

Úvod do problematiky obvodů FPGA pro integrovanou výuku VUT a VŠB-TUO

0,0,analogIndicator,6f24a725-80b4-4ca2-872c-bfc522b5adc5,1,1,Analog Indikator %f

Inovace a zkvalitnění výuky prostřednictvím ICT Základy programování a algoritmizace úloh. Ing. Hodál Jaroslav, Ph.D. VY_32_INOVACE_25 09

Základy číslicové techniky z, zk

Y36SAP - aritmetika. Osnova

Číslicové obvody a jazyk VHDL

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

Jazyk C# a platforma.net

2. Entity, Architecture, Process

Tabulka symbolů. Vazba (binding) Vazba - příklad. Deklarace a definice. Miroslav Beneš Dušan Kolář

VY_32_INOVACE_08_2_04_PR

Ahoj mami. Uložení dat v počítači. Příklady kódování dat. IAJCE Přednáška č. 4

Semestrální práce z předmětu. Jan Bařtipán / A03043 bartipan@studentes.zcu.cz

PES lib (C + PASCAL) KNIHOVNY KOMUNIKAÈNÍCH FUNKCÍ 03/ PESlib KOMUNIKAČNÍ KNIHOVNY C, PASCAL 03/ stran 1

Data v počítači. Informační data. Logické hodnoty. Znakové hodnoty

MQL4 COURSE. By Coders guru -3 DATA TYPES. Doufám, že předchozí lekce SYNTAX se vám líbila. V té jsme se pokoušeli zodpovědět:

VÝRAZY výrazy = operandy prokládané operátory, vyhodnocované podle priority operátorů

PL/SQL. Jazyk SQL je jazykem deklarativním, který neobsahuje procedurální příkazy jako jsou cykly, podmínky, procedury, funkce, atd.

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

NA CO SI DÁT POZOR V JAVASCRIPTU? Angular.cz

SEZNÁMENÍ SE STANDARDEM STEP A JEHO OBJEKTOVĚ ORIENTOVANÝM JAZYKEM EXPRESS

PHP - úvod. Kapitola seznamuje se základy jazyka PHP a jeho začleněním do HTML stránky.

2 Základní funkce a operátory V této kapitole se seznámíme s použitím funkce printf, probereme základní operátory a uvedeme nejdůležitější funkce.

Návrh. číslicových obvodů

Jazyk SQL 1. Michal Valenta. Katedra softwarového inženýrství FIT České vysoké učení technické v Praze c Michal Valenta, 2012 BI-DBS, ZS 2011/12

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.

PRG036 Technologie XML

Informační systémy 2008/2009. Radim Farana. Obsah. Jazyk SQL

Algoritmizace a programování

Tematický celek Proměnné. Proměnné slouží k dočasnému uchovávání hodnot během provádění aplikace Deklarace proměnných

LabView jako programovací jazyk II

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

O datových typech a jejich kontrole

Programování v jazyce JavaScript

Základní pojmy. Úvod do programování. Základní pojmy. Zápis algoritmu. Výraz. Základní pojmy

Cíle. Teoretický úvod. BDIO - Digitální obvody Ústav mikroelektroniky Základní logická hradla, Booleova algebra, De Morganovy zákony Student

MIKROPROCESORY PRO VÝKONOVÉ SYSTÉMY. Stručný úvod do programování v jazyce C 2.díl. České vysoké učení technické Fakulta elektrotechnická

VÝUKOVÝ MATERIÁL. Bratislavská 2166, Varnsdorf, IČO: tel Číslo projektu

Teoretické minimum z PJV

PB přednáška (26. října 2015)

Programování v Javě I. Leden 2008

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

DUM 07 téma: Proměnné, konstanty a pohyb po buňkách ve VBA

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

5 Přehled operátorů, příkazy, přetypování

2) Napište algoritmus pro vložení položky na konec dvousměrného seznamu. 3) Napište algoritmus pro vyhledání položky v binárním stromu.

Obsah. Předmluva 13 Zpětná vazba od čtenářů 14 Zdrojové kódy ke knize 15 Errata 15

8. Posloupnosti, vektory a matice

Programování v Javě I. Únor 2009

Programování v jazyce JavaScript

Paměť počítače. alg2 1

Datové typy pro reálná čísla

Výrazy, operace, příkazy

Empty, Null, Nothing, Missing, prázdný řetězec a buňka

Jak v Javě primitivní datové typy a jejich reprezentace. BD6B36PJV 002 Fakulta elektrotechnická České vysoké učení technické

SPJA, cvičení 1. ipython, python, skripty. základy syntaxe: základní datové typy, řetězce. podmínky: if-elif-else, vyhodnocení logických výrazů

Algoritmizace prostorových úloh

Sada 1 - Základy programování

Tato tematika je zpracována v Záznamy přednášek: str materiál: PrikladyZobrazeniCisel.pdf

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

První kapitola úvod do problematiky

Elementární datové typy

METROLOGIC INSTRUMENTS, INC. OPTIMIZER UŽIVATELSKÁ PŘÍRUČKA

Martin Flusser. Faculty of Nuclear Sciences and Physical Engineering Czech Technical University in Prague. October 17, 2016

Příklad elektrický obvod se stejnosměrným zdrojem napětí

Násobení. MI-AAK(Aritmetika a kódy)

Knihovna XmlLib TXV druhé vydání říjen 2012 změny vyhrazeny

int => unsigned int => long => unsigned long => float => double => long double - tj. bude-li:

Algoritmizace prostorových úloh

Transkript:

ČESKÉ VYSOKÉ UČENÍ TECHNICKÉ V PRAZE Fakulta elektrotechnická Ing. Radek Sedláček, Ph.D., katedra měření K13138 Jazyk VHDL zápis čísel, znaků a řetězců Jazyk VHDL základní datové typy a operátory Kurz A0B38FPGA Aplikace hradlových polí OPERAČNÍ PROGRAM PRAHA ADAPTABILITA Evropský sociální fond Praha & EU: Investujeme do vaší budoucnosti

Jazyk VHDL zápis čísel, znaků a řetězců 1. část přednášky Kurz A0B38FPGA Aplikace hradlových polí Snímek 2 z 34

Zápis čísel v jazyku VHDL Defaultní reprezentace čísel je dekadická (základ 10) Existují tyto dva číselné formáty Integer (příklad: 12 3 10E6 1e2 ) celočíselný bez desetinných míst, tzv. fixpoint formát Real (příklad: 1.2 25.1 3.14e-2) reálný s desetinou řádkou, tzv. floating point formát Záporná čísla (např.: -5) kombinace operátoru negace a daného celočíselné, resp. reálného literálu Existuje možnost vyjádřit čísla v jiné číselné soustavě musí se použít následující syntaxe: základ#číslo# Příklady: 2#111010110# 16#FD# 16#0FD# 8#0235# Snímek 3 z 34

Příklady zápisu čísel v jiných číselných soustavách než-li desítkových Příklady: základ 2 : 2#001001# dekadický ekvivalent = 9 základ 16 : 16#10# dekadický ekvivalent =16 Zápis čísla 0,5 při základu deset v různých číselných soustavách: 2#0.100 8#0.4 12#0.6# Pro vyjádření zejména dlouhých čísel je možné využít symbol podtržítko pro zlepšení čitelnosti kódu Příklady: 2#0010_0010_1110_0000_1122# 236_789 Snímek 4 z 34

Znaky, řetězce, bitové řetězce v jazyku VHDL Zápis znakového literálu ve VHDL jazyce: vložit znak do apostrofů (příklad: a, H, ; ) Zápis stringového literálu ve VHDL jazyce: vložit string do uvozovek (examples: I am string, H,, ) Bitový string reprezentuje posloupnost hodnot bitů opět možnost definovat základ číselného stringu Příklady: B 110011_110011 - binární číslo X A0FF0C - hexadecimální číslo O 123 - oktalové číslo Snímek 5 z 34

Znaky, řetězce, bitové řetězce v jazyku VHDL Bitový string s pevně definovanou délkou - exaktní definice počtu bitů Příklady: 7X 3C 8O 5. Ekvivalentní zápisu B 0111100.. Ekvivalentní zápisu B 00000101 Bitový string se znaménkem suffix SB, SO, SX Příklady: 6SX 16 6SX E7. Ekvivalentní zápisu B 010110.. Ekvivalentní zápisu B 100111 pozor, dojde k odříznutí dvou nejvyšší bitů!!! Snímek 6 z 34

Jazyk VHDL - základní datové typy a operátory 2. část přednášky Kurz A0B38FPGA Aplikace hradlových polí Snímek 7 z 34

Datové typy Skalární (výčtové, celočíselné, s pohyblivou řádovou čárkou) Složené (pole jednorozměrné, vícerozměrné, typ záznam) Řada datových typů - definována v rámci knihoven STD či STD_LOGIC_1164 Součástí definice daného datového typu jsou i základní logické či relační operace nad těmito dat. typy Snímek 8 z 34

Definované datové typy knihovna STD bit - hodnoty 0 a 1 Příklad: constant A:bit:=1; bit_vector - pole, kde každý element představuje prvek typu bit Příklad: signal IN: bit_vector( 8 downto 0); boolean - hodnoty FALSE,TRUE Příklad: variable TEST: boolean:=false; character jakýkoliv povolené znaky v jazyce VHDL Příklad: variable chr: character := Y ; integer rozsah čísel je dán konkrétní implementací, přesto minimální rozsah musí být 32 bitů: (2 31-1) to + (2 31-1) Příklad: constant CONST1: integer :=129; Snímek 9 z 34

Definované datové typy knihovna STD natural - integer začínající hodnotou 0 až po max. hodnotou danou při deklaraci Příklad: variable VAR1: natural :=2; positive - integer začínající hodnotou 1 až max. hodnotou danou při deklaraci Příklad: variable VAR2: positive :=2; real floating point číslo v rozsahu 1.0 x 10 38 to +1.0x 10 38 (rozsah opět může být závislý na konkrétní implementaci) Příklad: variable VAR3: real :=+64.2E12; string pole, kde každý prvek představuje 1 znak Příklad: variable VAR4: string(1 to 6):= @$#ABC ; time celočíselný formát, kde kromě hodnoty jsou definovány též i jednotky vyjádřené např. sec, ms, us, ns, ps, fs, min, hr. Příklad: variable DELAY: time :=5 ns; Snímek 10 z 34

Definované datové typ STD_ULOGIC knihovna STD_logic_1164 Díky této knihovně VHDL obsahuje datový typ std_ulogic (standard unresolved logic) Může nabývat celkem devíti hodnot v tomto pořadí: 'U' uninitialized* 'X' - strong drive, unknown logic value* '0' - strong drive, logic zero '1' - strong drive, logic one 'Z' - high impedance * 'W' - weak drive, unknown logic value* 'L' - weak drive, logic zero 'H' - weak drive, logic one '-' - don't care* *lze použít pouze pro simulační účely, vše ostatní též i pro syntézu Zavádí též datové typy std_logic, resp. std_logic_vector jsou podtypem std_ulogic Obsahuje též dvě konverzní funce: To_bit, To_StdUlogic Snímek 11 z 34

Použití knihovny v projektu Pro použití knihovny STD do projektu - nutno přidat tyto dva následují řádky library std; use std.standard.all; Pro použití knihovny STD_logic_1164 do projektu - nutno přidat tyto dva následují řádky library ieee; use ieee.std_logic_1164.all; Snímek 12 z 34

Uživatelem definované datové typy Syntaxe: type identifikátor is datový typ identifikátoru; Příklady: type small_int is range 0 to 1024; type my_word_length is range 31 downto 0; subtype data_word is my_word_length range 7 downto 0; subtype int_small is integer range -1024 to +1024; Snímek 13 z 34

Výčtové typy Syntaxe: type jméno typu is (seznam identifikátorů či znakových literálů); Příklady: type my_3values is ( 0, 1, Z ); type PC_OPER is (load, store, add, sub, div, mult, shiftl, shiftr); type hex_digit is ( 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F ); type state_type is (S0, S1, S2, S3); Snímek 14 z 34

Deklarace typu package Package - umožňuje vytvořit vlastní knihovnu, která definuje uživatelské datové typy Příklady: package my_types is type small_int is range 0 to 1024; type my_word_length is range 31 downto 0; subtype data_word is my_word_length is range 7 downto 0; type cmos_level is range 0.0 to 3.3; end package my_types; Snímek 15 z 34

Jednorozměrné pole složený datový typ kromě rozsahu je nutné přidat informaci o typu jednotlivých prvků Syntaxe: type jméno pole is array (schéma indexace) of typ elementu pole; Příklady: type MY_WORD is array (15 downto 0) of std_logic; type YOUR_WORD is array (0 to 15) of std_logic; type VAR is array (0 to 7) of integer; type STD_LOGIC_1D is array (std_ulogic) of std_logic; Snímek 16 z 34

Vícerozměrná pole type MY_MATRIX_3X2 is array (1 to 3, 1 to 2) of natural; type YOUR_MATRIX_4X2 is array (1 to 4, 1 to 2) of integer; type STD_LOGIC_2D is array (std_ulogic, std_ulogic) of std_logic; Příklady použití výše definovaného typu pole: variable DATA_ARR: MY_MATRIX_3X2 :=((0,2), (4,6), (5,7)); variable DATA_ARR: YOUR_MATRIX_4X2 :=((0,2), (1,3), (4,6), (5,7)); Snímek 17 z 34

Předem nespecifikované (unconstrained) pole Syntaxe: type jméno pole is array (typ range <>) of typ elementu; Příklady: type MATRIX is array (integer range <>) of integer; type VECTOR_INT is array (natural range <>) of integer; type VECTOR2 is array (natural range <>, natural range <>) of std_logic; Snímek 18 z 34

Datový typ Record Syntaxe: type name is record identifikátor : dat. typ; : identifikátor : dat. typ; end record; Příklady: type MY_MODULE is record RISE_TIME : time; FALL_TIME : time; SIZE : integer range 0 to 200; DATA : bit_vector (15 downto 0); end record; signal modul: MY_MODUL; modul.rise_time<= 20ns; --přístup na položku záznamu Snímek 19 z 34

Typová konverze VHDL silně typově orientovaný jazyk!!! není možné přiřadit hodnotu signálu jednoho datového typu signálu jiného datového typu Proto existují tzv. konverzní funkce viz. např. knihovna std_logic_1164 -umožňuje realizovat následující konverze datových typů std_ulogic, std_logic, std_logic_vector na bit, bit_vektor apod., případně opačnou konverzi. Snímek 20 z 34

Konverzní funkce v knihovně std_logic_1164 function to_bit(arg: std_ulogic) ret. to_bit function to_bitvector(arg: std_logic_vector) ret. bit_vector function to_bitvector(arg: std_ulogic_vector) ret. to bit_vector function to_stdulogic(arg: bit) ret. std_ulogic function to_stdlogicvector(arg: bit_vector) ret. std_logic_vector function to_stdulogicvector(arg: bit_vector) ret. std_logic_vector function to_stdlogicvector(arg: std_ulogic) ret. std_logic_vector function to_stdulogicvector(arg: std_logic) ret. std_ulogic_vector Snímek 21 z 34

Konverzní funkce v knihovně std_logic_arith function CONV_INTEGER (ARG: INTEGER) ret. INTEGER; function CONV_INTEGER (ARG: UNSIGNED) ret. INTEGER; function CONV_INTEGER (ARG: SIGNED) ret. INTEGER; function CONV_INTEGER (ARG: STD_ULOGIC) return SMALL_INT; function CONV_UNSIGNED (ARG: INTEGER; SIZE: INTEGER) ret. UNSIGNED; function CONV_UNSIGNED (ARG: UNSIGNED; SIZE: INTEGER) ret. UNSIGNED; function CONV_UNSIGNED (ARG: SIGNED; SIZE: INTEGER) ret. UNSIGNED; function CONV_UNSIGNED (ARG: STD_ULOGIC; SIZE: INTEGER) ret. UNSIGNED; function CONV_SIGNED (ARG: INTEGER; SIZE: INTEGER) ret. SIGNED; function CONV_SIGNED (ARG: UNSIGNED; SIZE: INTEGER) ret. SIGNED; function CONV_SIGNED (ARG: SIGNED; SIZE: INTEGER) ret. SIGNED; function CONV_SIGNED (ARG: STD_ULOGIC; SIZE: INTEGER) ret. SIGNED; Snímek 22 z 34

Konverzní funkce v knihovně std_logic_arith function CONV_STD_LOGIC_VECTOR(ARG: INTEGER; SIZE: INTEGER) ret. STD_LOGIC_VECTOR; function CONV_STD_LOGIC_VECTOR(ARG: UNSIGNED; SIZE: INTEGER) ret. STD_LOGIC_VECTOR; function CONV_STD_LOGIC_VECTOR(ARG: SIGNED; SIZE: INTEGER) ret. STD_LOGIC_VECTOR; function CONV_STD_LOGIC_VECTOR(ARG: STD_ULOGIC; SIZE: INTEGER) ret. STD_LOGIC_VECTOR; Snímek 23 z 34

Operátory v jazyce VHDL Logické Relační Posuny Doplňkové Unární Násobící Různé jiné Snímek 24 z 34

Logické operátory AND, OR, NAND, NOR, XOR, XNOR Všechny definovány pro dat. typ : bit, boolean, std_logic a std_ulogic Lze aplikovat pro signály, proměnné i konstanty NAND a NOR nejsou asociativní pozor na vyhodnocení výrazů nutno korektně závorkovat X nand Y nand Z - špatná syntaxe (X nand Y) nand Z - správná syntaxe Snímek 25 z 34

Relační operátory = rovno (pro jakýkoliv dat. typ) /= nerovná se (pro jakýkoliv dat. typ) < menší než (pro skalární dat.typ či diskrétní pole) <= menší než nebo rovno (pro skalární dat.typ či diskrétní pole) > větší než (pro skalární dat.typ či diskrétní pole) <= menší než nebo rovno (pro skalární dat.typ či diskrétní pole) Výstupní hodnota těchto operací : std_logic (L nebo H) Snímek 26 z 34

Použití relačních operátorů Příklady: variable STS : Boolean; constant A : integer :=24; constant B_COUNT : integer :=32; constant C : integer :=14; STS <= (A < B_COUNT) ; -- bude přiřazena hodnota TRUE do proměnné STS STS <= ((A >= B_COUNT) or (A > C)); -- bude přiřazena hodnota TRUE do proměnné STS STS <= (std_logic ( 1, 0, 1 ) < std_logic( 0, 1, 1 )); -- bude přiřazena hodnota FALSE do proměnné STS Snímek 27 z 34

Operátory posunu Logické posuny SLL - Shift Left Logical (zprava se doplňují nuly) SRL - Shift Right Logical (zleva se doplňují nuly) Aritmetické posuny SLA - Shift Left Arithmetic (zprava se kopíruje hodnota nejnižšího bitu) SRA - Shift Right Arithmetic (zleva se kopíruje hodnota nejnižšího bitu) Kruhové posuny (rotace) ROL - ROtate Left (nejvyšší bit se přesouvá na pozici nejnižšího bitu) ROR - ROtate Right (nejnižší bit se přesouvá na pozici nejvyššího bitu) Snímek 28 z 34

Použití operátorů posunu Příklady: variable A: bit_vector := 101001 ; A sll 2 výsledek operace: 100100 A srl 2 výsledek operace: 001010 A sla 2 výsledek operace: 100111 A sra 2 výsledek operace: 111010 A rol 2 výsledek operace: 100110 A ror 2 výsledek operace: 011010 Tyto operace nejsou definovány nad datovými typy std_logic_vector, std_ulogic_vector!!! Lze je provést například s použitím operátoru konketanace neboli zřetězení symbol & Příklady: variable A: std_logic_vector(6 downto 0 := 101001 ; A := A(0) & A(6 downto 1); --cykliká rotace vlevo Snímek 29 z 34

Doplňkové operátory a jejich použití + Operátor sčítání - Operátor odčítání & Operátor zřetězení Příklady: signal MYBUS : std_logic_vector (15 downto 0); signal STATUS : std_logic_vector (2 downto 0); signal RW, CS1, CS2 : std_logic; signal MDATA : std_logic_vector ( 0 to 9); MYBUS <= STATUS & RW & CS1 & SC2 & MDATA; Snímek 30 z 34

Unární operátory Unární operátor slouží pro definici znaménka daného čísla symbol + symbol - značí operátor tzv. identity značí operátor tzv. negace Snímek 31 z 34

Operátory pro násobení Zajišťují provádějí operací násobení a dělení nad číselnými formáty integer a real symbol * symbol / - operátor násobení - operátor dělení rem mod - operátor remainder zbytek po celočíselném dělení - operátor modulo zbytek po celočíselném dělení A rem B = A - (A/B)*B (A/B je celé číslo - integer) znaménko podle A, abs.hodnota je menší než B A mod B = A - (B*N) (N je celé číslo - integer) znaménko podle B Příklad: 11 rem 5 Výsledek : 1 (-11) rem 5 Výsledek : -1 9 mod 4 Výsledek : 1 (9-4*2) 7 mod (-4) Výsledek : - 1 (7 4*2 = -1) Snímek 32 z 34

Další aritmetické operátory ** exponenciální (jakýkoliv numerický typ) abs absolutní hodnota (jakýkoliv numerický typ) not logická negace (jakýkoliv bit nebo typ boolean) Příklady: signal a,b :std_logic; signal Y, Z: integer; Y <= 2**3; -- výsledek 8 Z<= abs (Y) a= not b; Snímek 33 z 34

Děkuji za pozornost, máte nějaké otázky? Snímek 34 z 34