J zyki Opisu Sprz tu 5 dzienne

background image

Języki Opisu Sprzętu

Wykład 5

III rok kierunek Elektronika

J.Kasperek P.J.Rajda

background image

Program wykładu

Kontakt z prowadzącymi:

C-3 p.502 tel. (617)3980

mgr inż. Jerzy Kasperek kasperek@uci.agh.edu.pl

mgr inż. Paweł J.Rajda pjrajda@uci.agh.edu.pl

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Typy rozszerzone (Extended Types)

Typy wyliczeniowe (Enumerated Types)
Podtypy (Subtypes)

Typy złożone (Composite Types)

Tablice (Arrays)
Rekordy (Records)

Inne typy predefiniowane (Other

Predefined Types)

Pliki (Files)
Linie (Lines)

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Predefiniowane typy danych

STANDARD Package definiuje typy:

Boolean

Bit

Bit_vector

Character

String

Text

STANDARD Package między innymi zawiera następujące
deklaracje:

type

boolean

is

(false, true);

-- initial value: FALSE

type

bit

is

(

‘0’

,

‘1’

);

type

std_logic

is

(

‘U’

,

‘X’

,

‘0’

,

‘1’

,

‘Z’

,

‘W’

,

‘L’

,

‘H’

,

‘-’

);

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Typy wyliczeniowe

W deklaracji występuje lista nazw lub wartości
definiujących nowy typ. Jest on dogodnym środkiem dla
symbolicznej reprezentacji kodów.

Składnia:

type

identifier

is

(item {, item});

item: {identifier | character_literal}

Przykłady:
identifiers:

type

tools

is

(hammer, saw, drill, wrench);

literals:

type

fiveval

is

(

‘?’

,

‘0’

,

‘1’

,

‘Z’

,

‘X’

);

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

architecture

behave

of

cpu

is

type

instr

is

(add, lda,

ldb);

begin

process

variable

a, b, data:

integer

;

variable

opcode: instr;

begin

..........

case

opcode

is

when

lda => a := data;

when

ldb => b := data;

when

add => a := a + b;

end case

;

wait on

data;

end process

;

end

behave;

Kodowanie elementów

listy dla syntezy:

00 add

01 lda

10 ldb

11 ---

type

instr

is

(add,lda,ldb,invalid);

Typy wyliczeniowe

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Wyrażenia kwalifikujące

Nie można rozróżnić typu literałów n.p.: char

‘1’

, bit

‘1’

czy std_logic

‘1’

. Są one niejednoznaczne. Stosuje się

więc narzucanie typów (typecasting).

Składnia:
type
’(literal | expression);

Przykłady:
bit’(

‘1’

)

type

month

is

(April, May, June);

type

name

is

(April, June, Judy);

months’(June)
name’(June)

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Konwersje typów

Pytanie:
Jaka jest różnica między

zapisami:

integer(

3.0

)

integer’(

3.0

)

Odpowiedź:

integer(

3.0

) jest legalnym odwołaniem do wbudowanej

funkcji konwersji z typu real do typu integer.

integer’(

3.0

) jest błędnym wyrażeniem kwalifikującym. Nie

można narzucić typu integer typowi real.

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Funkcje konwersji typów mogą być przydatne przy
dopasowywaniu dwóch projektów, które używają
różnych typów.

Przykład:

process

..........;

variable

abc: fourval;

variable

xyz: value4;

begin

xyz := convert4val (abc);

-- wywołanie funkcji

end process

;

Konwersje typów

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Konwersje typów

type

fourval

is

(

‘X’

,

‘L’

,

‘H’

,

‘Z’

);

type

value4

is

(

‘X’

,

‘0’

,

‘1’

,

‘Z’

);

function

convert4val (s: fourval)

return

value4

is
begin

case

s

is

when

‘X’

=>

return

‘X’

;

when

‘L’

=>

return

‘0’

;

when

‘H’

=>

return

‘1’

;

when

‘Z’

=>

return

‘Z’

;

end case

;

end

convert4val;

Odpowiedź: Tak, wartość zwracana przez funkcję jest
zadeklarowana

jako typ value4.

Pytanie: Czy wyrażenie

return

‘X’

jest jednoznaczne?

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Podtypy skalarne

Są uściśleniem wcześniej zdefiniowanych typów przez
zawężenie ich zakresu.

Przykłady:

subtype

digit

is

integer

range

0

to

9

;

variable

msd, lsd: digit;

jest równoważny:

variable

msd, lsd: integer

range

0

to

9

;

type

instr

is

(add, sub, mul, div, sta, stb, outa,

xfr);

subtype

arith

is

instr

range

add

to

div;

subtype

pos

is

integer

range

1

to

2147483647

;

subtype

nano

is

time

range

0

ns

to

1

us;

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Tablice

Tablice składają się z elementów tego
samego typu.

Są one używane do opisu magistral,
rejestrów i innych
zbiorów elementów sprzętowych.

Elementy tablic mogą być skalarami lub
elementami
złożonymi.

Dostęp do poszczególnych elementów dzięki
użyciu
wskaźników.

Jedynymi predefiniowanymi typami
tablicowymi są

:

bit_vector

string

std_logic_vector

Użytkownik musi sam deklarować nowe typy
tablic dla elementów real i integer.

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Tablice – deklaracja zakresu indeksów

Sposób dostępu zależy od sposobu
deklaracji.

Przykłady:

variable

c: bit_vector (

0

to

3

);

variable

d: bit_vector (

3

downto

0

);

c :=

“1010”

;

d := c;

1

0

1

0

c(

0

) c(

1

) c(

2

) c(

3

)

d(

3

) d(

2

) d(

1

)

d(

0

)

(

4

TO

7

)

dowolny sposób

c(

4

)

indeks poza

zakresem

c(

1.0

)

błędny typ

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Tablice - przypisania

Przykład: dla typu bit_vector:
c :=

“1010”

;

stała typu bit_vector

c := S & T & M & W;

4 połączone sygnały 1-

bitowe
c := (

‘1’

,

‘0’

,

‘1’

,

‘0’

);

4-bitowy agregat

c :=

3

;

niedozwolony

Fragment tablicy (slice)
Przykłady:

variable

a: bit_vector (

3

downto

0

);

variable

c: bit_vector (

8

downto

1

);

c(

6

downto

3

) := a;

c(

6

downto

3

) nie c(

3

to

6

)

-

kierunek indeksów

musi być

taki sam jak w deklaracji

!

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Agregaty

Literał tablicowy może zawierać listę elementów w
notacji
pozycyjnej i / lub specyfikacyjnej, tworząc agregat.

Składnia:
[type_name
’] ([choice =>] expression1 {,[

others

=>]

expression2})

Przykłady:

variable

a,b: bit :=

‘1’

;

variable

x,y,z: bit_vector (

1

to

4

);

x := bit_vector’(

‘1’

,a

nand

b,

‘1’

,a

or

b);

y := (

1

=>

‘1’

,

4

=> a

or

b,

2

=> a

nand

b,

3

=>

‘1’

);

=> czytaj: “otrzymuje”

Pytanie:
Jakie będą wartości x, y ?

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Przy użyciu notacji specyfikacyjnej, [choice =>] wskazuje na
jeden lub kilka elementów.

[choice =>] może zawierać wyrażenie (n.p.: (i

mod

2

) =>),

wskazujące na jeden element lub zakres (n.p.:

3

to

5

=>

lub

7

downto

0

=>), wskazujące na sekwencję elementów.

Notacja pozycyjna musi być użyta przed notacją
specyfikacyjną.

Przykład:

variable

b: bit;

variable

c: bit_vector (

8

downto

1

);

c := bit_vector’(

‘1’

,b,

5

downto

2

=>

‘1’

,

others

=>

‘0’

);

Agregaty

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Deklaracja typu tablicowego

Aby zadeklarować typ tablicowy należy wyspecyfikować:
nazwę typu, typ elementów, liczbę zakresów indeksów, typ
indeksów oraz zakres indeksów (opcjonalnie).

Składnia:

type

name

is

array

[index_constraint]

of

element_type ;

index_constraint: [range_spec]

index_type

range

[range_spec]

index_type

range

<>

Przykłady:

type

word8

is array

(

1

to

8

)

of

bit;

type

word8

is array

(integer

range

1

to

8

)

of

bit;

type

word

is array

(integer

range

<>)

of

bit;

type

ram

is array

(

1

to

8

,

1

to

10

)

of

bit;

<> oznacza zakres nieograniczony

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Po deklaracji typu może on zostać użyty do deklaracji
zmiennej lub sygnału.

Przykład:

variable

mystuff: word8;

variable

yourstuff: word (

1

to

10

);

Typ wyliczeniowy albo podtyp może również być użyty do
oznaczenia zakresu zmienności indeksów.

Przykłady:

type

instruction

is

(add, sub, mul, div, lda, sta,

xfr);

subtype

arithmetic

is

instruction

range

add

to

div;

subtype

digit

is

integer

range

1

to

9

;

type

Ten_bit

is

array

(digit)

of

bit;

type

Inst_flag

is

array

(instruction)

of

digit;

Deklaracja typu tablicowego

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Szczególnie użyteczne przy symulacji pamięci RAM
lub ROM.

Przykład:

type

memory

is

array

(

0

to

7

,

0

to

3

)

of

bit;

constant

rom: memory := ((

‘0’

,

‘0’

,

‘0’

,

‘0’

),

(

‘0’

,

‘0’

,

‘0’

,

‘1’

),

(

‘0’

,

‘0’

,

‘1’

,

‘0’

),

(

‘0’

,

‘0’

,

‘1’

,

‘1’

),

(

‘0’

,

‘1’

,

‘0’

,

‘0’

),

(

‘0’

,

‘1’

,

‘0’

,

‘0’

),

(

‘0’

,

‘1’

,

‘1’

,

‘0’

),

(

‘0’

,

‘1’

,

‘0’

,

‘1’

));

data_bit := rom(

5

,

3

);

-- słowo 5, bit 3

Tablice wielowymiarowe

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Tablice tablic

Przykład:

type

word

is

array

(

0

to

3

)

of

bit;

type

memory

is

array

(

0

to

4

)

of

word;

variable

addr, index: integer;

variable

data: word;

constant

rom_data: memory := ((

‘0’

,

‘0’

,

‘0’

,

‘0’

),

(

‘0’

,

‘0’

,

‘0’

,

‘1’

),

(

‘0’

,

‘0’

,

‘1’

,

‘0’

),

(

‘0’

,

‘1’

,

‘1’

,

‘1’

),

(

‘0’

,

‘1’

,

‘1’

,

‘1’

));

data := rom_data(addr);

rom_data(addr)(index)

--dostęp do pojedynczego bitu

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Nieograniczony typ tablicowy

Możliwe jest zadeklarowanie typu tablicowego bez podania
zakresu zmienności indeksów. Pełna deklaracja następuje w
momencie deklarowania zmiennej lub sygnału tego typu.

Przykład:
STANDARD Package:

type

bit_vector

is

array

(natural

range

<>)

of

bit;

Pytanie:
Czy można zadeklarować typ nieograniczonej tablicy liczb
typu real
? Jeśli tak, proszę to wykonać, nazywając nowy typ
real_array.

Odpowiedź:

type

real_array

is

array

(integer

range

<>)

of

real;

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Konwersje typów

type

int_1

is range

0

to

10

;

type

int_2

is range

0

to

20

;

type

array_1

is array

(

1

to

10

)

of

int_1;

type

array_2

is array

(

11

to

20

)

of

int_2;

subtype

my_bit_vector

is

bit_vector (

1

to

10

);

type

bit_array_10

is array

(

11

to

20

)

of

bit;

type

bit_array_20

is array

(

0

to

20

)

of

bit;

signal

s_int: int_1;

signal

s_array: array_1;

signal

s_bit_vec: my_bit_vector;

signal

s_bit: bit;

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Konwersje typów integer:
int_2’(s_int);

rozszerzenie zakresu

Konwersje podobnych typów:
bit_array_10’(s_bit_vec);

przesuniecie zakresu

Niedozwolone konwersje typów:

boolean’(s_bit);

pomiędzy dwoma typami
wyliczeniowymi

int_1’(s_bit);

wyliczeniowych na inne

bit_array_20’(s_bit vec);

różne długości tablic

array_1’(s_bit_vec);

typy elementów nie

poddają się

konwersji

Konwersje typów

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Grupują obiekty różnych typów. Elementy rekordów
mogą być skalarami lub typami złożonymi i są
dostępne przez nazwę.

Przykład:

type

two_digit

is record

sign: bit;
msd: integer

range

0

to

9

;

lsd: integer

range

0

to

9

;

end record

;

process
variable

acntr, bcntr: two_digit;

begin

acntr.sign :=

‘1’

;

acntr.msd :=

1

;

acntr.lsd := acntr.msd;
bcntr := two_digit’(

‘0’

,

3

,

6

);

end process

;

Rekordy

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Instrukcja alias

Umożliwia wprowadzenie alternatywnej nazwy dla
części obiektu, ułatwiającej dostęp.

Przykład:

signal

count: bit_vector (

1

to

9

);

alias

sign: bit

is

count (

1

);

alias

msd: bit_vector (

1

to

4

)

is

count (

2

to

5

);

alias

lsd: bit_vector (

1

to

4

)

is

count (

6

to

9

);

count :=

“1_1001_0000”

;

sign :=

‘1’

;

msd :=

“1001”

;

lsd := msd;

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Predefiniowane typy tekstowe

Należą do nich typy text oraz line. Używane są do
operacji wejścia
i wyjścia podczas symulacji. Występują w deklaracji

file

wraz
z funkcjami odczytu, zapisu i pomocniczymi.

STD library - TEXTIO Package:

readline

,

read

,

writeline

,

write

endfile

(filename),

endline

(linename)

readline

(F:

in

text; L:

out

line);

read

(L:

inout

line; ITEM: integer);

a:

process

...

file

testvectors: text

is

in

“test.vec”;

variable

L: line;

variable

sim: bit_vector (

3

downto

0

);

begin

readline

(testvectors, L);

read

(L, sim);

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

use

std.textio.all;

entity

copy4

is

end

copy4;

architecture

first

of

copy4

is

begin
process

(go)

file

instuff: text

is in

“/path/test.data”;

file

outfile:

text

is out

“/path/new.data”;

variable

L1, L2: line;

variable

av: bit_vector (

3

downto

0

);

begin
while

not

(

endfile

(instuff))

loop

readline

(instuff, L1);

read

(L1, av);

write

(L2, av);

writeline

(outfile, L2);

end loop

;

end process

;

end first

;

Predefiniowane typy tekstowe

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Typ access

Typ access

Nie jest dostępny w syntezie, ale może być użyty
podczas symulacji. Udostępnia wskaźniki dla
definiowania w pamięci symulatora struktur danych
(rekordów) o zmiennych rozmiarach.

new

,

deallocate

Przykład:

type

two_digit

is

record

...

type

pntr

is

access

two_digit;

variable

xptr: pntr;

xptr :=

new

two_digit;

alokacja

deallocate

(xptr);

dealokacja

xptr.msd :=

“1001”

;

dostęp

background image

J.Kasperek P.J.Rajda © 2001 Katedra Elektroniki AGH

Kraków

Języki Opisu Sprzętu

Deklaracje typów

Deklaracja typu musi się pojawić się przed użyciem typu.
Typ zadeklarowany w

entity

nie może być użyty w

specyfikacji portów, ponieważ pojawia się ona przed
deklaracjami typów.

entity

E

is

type_declaration

begin

.....

end

E;

P:

process

type_declaration

begin

.....

end

process

P;

package

P

is

type_declaration

end

P;

B:

block

type_declaration

begin

.....

end

B;

function

F (...) is

type_declaration

begin

.....

end

F;

architecture

A

of

E

is

type_declaration

begin

.....

end

A;

background image

Ciąg dalszy

nastąpi...


Document Outline


Wyszukiwarka

Podobne podstrony:
J zyki Opisu Sprz tu 4 dzienne
J zyki Opisu Sprz tu 3 dzienne
Po katastrofie nawiązano połączenie z telefonem w Tu 154 Nasz Dziennik
Telefon ofiary katastrofy Tu 154 był aktywny po tragedii Nasz Dziennik
Dzienniki mowy
SP dzienni w2
Wyklad1 bilans BK dzienne zaoczne cr (1)
RIWKS dzienne W 1
Gatunki dziennikarskie
Wykład XI Metody opisu układów cyfrowych
SP dzienni w1
IK dzienne 1
Gatunki dziennikarskie licencjat PAT czesc 2
RIWKS dzienne W 11
RIWKS dzienne W 2
RIWKS dzienne W 6

więcej podobnych podstron