Stratix II Architecture

Download Report

Transcript Stratix II Architecture

Język HDL - VERILOG

Hardware Description Language

(Syntetyzowalna

warstwa języka)

Krzysztof Jasiński 2009 PRUSn_W6

VERILOG Przegląd zagadnień

Krzysztof Jasiński 2009 PRUSn_W6

Wprowadzenie do języka

Reprezentacja układu cyfrowego w Verilogu

opis strukturalny elementy + połączenia opis behawioralny – funkcja jako zachowanie

Podstawowe elementy i konstrukcje języka

moduł, instrukcje współbieżne i proceduralne instancja (powielanie), struktura hierachiczna wartości sygnałów, węzły i typy węzłów zapis wektorowy, parametry, sieci i zmienne operacje arytmetyczne i reprezentacja liczb operatory w VERILOGu

I T P W Krzysztof Jasiński 2009 PRUSn_W6 3

Opis strukturalny

I T P W

  Elementy konstrukcji: Zbiór prymitywów, odpowiadających typowym bramkom logicznym bramka => nazwy funkcji, wyjścia i wejść np. 2-we AND and (y, x1, x2) // y – wyjście, x1, x2 - wejścia 4-we OR NOT or (y, x1, x2, x3, x4) not (y, x) Specyfikacja (forma opisu): moduł – zawiera instrukcje i wyrażenia definiujące układ, wejścia i wyjścia (porty), sygnały, połączenia jawne i ukryte; nazwy modułów i sygnałów muszą zaczynać się literą i mogą zawierać dowolną literę lub liczbę plus znaki „_” i $ VERILOG rozróżnia wielkość liter znak „ // ” poprzedza komentarz (do końca linii)

Krzysztof Jasiński 2009 PRUSn_W6 4

Opis strukturalny

Przykład:

x

1

x

2

f x

3

Rys. 2.30. Prosta funkcja logiczna (mux2-1) I T P W Krzysztof Jasiński 2009 PRUSn_W6 5

Opis strukturalny

module

example1 (x1, x2, x3, f);

input

x1, x2, x3;

output

f;

and

(g, x1, x2);

not

(k, x2);

and

(h, k, x3);

or

(f, g, h);

endmodule I T P W Krzysztof Jasiński

Rys. 2. 31. Opis w Verilog’u układu z rys. 2.30.

2009 PRUSn_W6 6

Opis strukturalny

module

example2 (x1, x2, x3, x4, f, g, h);

input

x1, x2, x3, x4;

output

f, g, h;

and

(z1, x1, x3);

and

(z2, x2, x4);

or

(g, z1, z2);

or

(z3, x1, ~x3);

or

(z4, ~x2, x4);

and

(h, z3, z4);

or

(f, g, h);

I T P W endmodule

Rys. 2.32. Opis w VERILOGu układu o 4-wejściach

Krzysztof Jasiński 2009 PRUSn_W6 7

Opis strukturalny

g f h

I T P W Rys. 2.33. Schemat układu opisanego kodem z rys. 2.32

Krzysztof Jasiński 2009 PRUSn_W6 8

Opis behawioralny

Opis strukturalny przy użyciu prymitywów nieefektywny dla dużych układów!

alternatywa – bardziej abstrakcyjny opis za pomocą wyrażeń logicznych i konstrukcji programowych (instrukcji i przypisań) definicja funkcji za pomocą równań – słowo kluczowe assign określa przypisania ciągłe (typ instrukcji współbieżnej), które są realizowane równolegle, bez względu na porządek występowania zachowanie układu może być zdefiniowane za pomocą instrukcji if-else (typ instrukcji proceduralnej), której konstrukcja znajduje się wewnątrz bloku always blok ten może zawierać wiele instrukcji, przy czym są one realizowane ściśle w kolejności występowania I T P W w bloku always po symbolu @ w nawiasach znajduje się ciąg sygnałów (lista wrażliwości): instrukcje wewnątrz bloku są wykonywane tylko wtedy, gdy zmienia się sygnał z tej listy Krzysztof Jasiński 2009 PRUSn_W6 9

Opis behawioralny

module

example3 (x1, x2, x3, f);

input

x1, x2, x3;

output

f ;

assign

f = (x1 & x2) | (~x2 & x3); // symbol ~ (tylda) oznacza negację

endmodule Rys. 2.34. Specyfikacja układu z rys. 2.30 z użyciem przypisania ciągłego I T P W Krzysztof Jasiński 2009 PRUSn_W6 10

Opis behawioralny

module

example4 (x1, x2, x3, x4, f, g, h);

input

x1, x2, x3, x4;

output

f, g, h;

assign

g = (x1 & x3) | (x2 & x4);

assign

h = (x1 | ~x3) & (~x2 | x4);

assign

f = g | h;

endmodule Rys. 2.35. Specyfikacja układu z rys. 2.33 z użyciem przypisania ciągłego I T P W Krzysztof Jasiński 2009 PRUSn_W6 11

Opis behawioralny

// Specyfikacja behawioralna module

example5 (x1, x2, x3, f);

input

x1, x2, x3;

output

f ;

reg

f ;

// zmienna dla przypisań w instrukcjach proceduralnych always

@(x1 or x2 or x3)

if

(x2 == 1) f = x1;

else

f = x3;

endmodule Rys. 2.36. Opis układu z rys. 2.30 z użyciem instrukcji if-else I T P W Krzysztof Jasiński 2009 PRUSn_W6 12

Elementy języka

Sygnały

– deklarowane jako typ

net

lub

variable

odnosi się do połączeń punktów układu; , termin

net

Identyfikatory

– nazwy zmiennych i innych elementów języka, mogą się składać z dowolnych liter lub cyfr i znaków „ _ ” i $;

Wartości sygnałów, liczby i parametry

– pojedyncze sygnały mogą przyjmować cztery wartości:

0

– wartość logiczna 0

1

– wartość logiczna 1

z

– tri-state (stan wysokiej impedancji)

x

– wartość nieznana

I T

Wartości zmiennych wektorowych są określone za pomocą stałych o postaci: [

size

][‘

radix

]

constant

, gdzie

size

jest liczbą bitów stałej, a

radix

podstawą systemu liczbowego

P W Krzysztof Jasiński 2009 PRUSn_W6 13

Elementy języka

Radix

– podstawa może być: d = dziesiętna b = binarna h = heksadecymalna o = oktalna Jeśli podstawa nie jest określona, to domyślnie jest dziesiętna

I T P W

Gdy

size

określa większą liczbę bitów niż potrzebna do reprezentacji stałej, to uzupełnia się ją zerami

Przykłady: 0

liczba 0

10

‘b10 ‘h10 4’b100 dziesiętna liczba 10 binarna liczba 10 = (2) 10 heksadecymalna liczba 10 = (16) binarna liczba 0100 = (4) 10 10 4’bx nieznana 4-bitowa liczba xxxx

Krzysztof Jasiński 2009 PRUSn_W6 14

Elementy języka

Parametr

wiąże nazwę identyfikatora ze stałą Przykłady deklaracji:

parameter

n = 4;

parameter

S0 = 2’b00, S1 = 2’b01, S3 = 2’b11; Identyfikator n może być użyty w miejsce liczby 4, nazwę S0 można podstawić w miejsce wartości 2’b00 itd..

Ważnym zastosowaniem parametrów jest jest parametryzowanie podukładów

I T P W Krzysztof Jasiński 2009 PRUSn_W6 15

Elementy języka

Typy sieci i zmiennych Sieć (Net)

reprezentuje węzeł w układzie, do syntezy stosuje się dwa typy:

wire

i

tri

Typ

wire

stosuje się do połączeń wyjść jednego elementu logicznego z wejściami innego Przykład deklaracji typu skalar

wire

(dla pojedynczych węzłów):

wire

x;

I T P W

wire

Cin, AddSub; Oraz wektor

wire

(dla grupy węzłów):

wire

[3:0] S

Krzysztof Jasiński 2009 PRUSn_W6 16

Elementy języka

I T P W Typy zmiennych Zmienna (Variable)

sieci reprezentują połączenia między elementami logicznymi nie oddając istoty zachowania; do tego celu używa się zmiennych, którym w jednej instrukcji przypisuje się pewną wartość do czasu wykonania następnej instrukcji, Rozróżnia się dwa typy zmiennych:

reg

i

integer

Przykład: Count = 0; //

reg

[2:0] Count;

for

(k = 0; k < 4; k = k +1) //

integer k

;

if

(S[k])

Krzysztof Jasiński

Count = Count + 1;

2009 PRUSn_W6 17

Elementy języka

I T P W Moduł – podstawowa konstrukcja języka

Opisuje układ lub podukład; w 1 ej linii deklaracji modułu znajduje się jego nazwa np. identyfikator, w następnych liniach lista portów; typy portów –

input

,

output

skalarne i wektorowe, i

inout

(dwukierunkowe) oraz przykłady portów:

input

Cin, x, y;

input

[3:0] X, Y;

inout

[7:0] Bus;

output

Cout, s;

Krzysztof Jasiński 2009 PRUSn_W6 18

Elementy języka

I T P W module

module name [(port name{, port name})]; [

parameter

declarations] [

input

declarations] [

output

declarations] [

inout

declarations] [

wire

[

reg

or or

tri

declarations]

integer

declarations] [

function

[

assign

or

task

declarations] continuous assignmen ts] [

initial

block] [

always

blocks] [gate instantiations] [module instantiations]

Endmodule

Rys. A.1. Ogólna deklaracja modułu

Krzysztof Jasiński 2009 PRUSn_W6 19

Język VERILOG w praktyce

Krzysztof Jasiński 2009 PRUSn_W6

Specyfikacja układów arytmetycznych

c i x i y i

0 0 0 0 1 1 1 1 0 0 1 1 0 0 1 1 0 1 0 1 0 1 0 1

c

i

+ 1

0 0 0 1 0 1 1 1

s i

0 1 1 0 1 0 0 1 (a) Truth table

c i x i y i

00 0 1 1 01 1 11 10 1 1

s i

=

x i



y i



c i c i x i y i

00 0 01 11 1 10 1 1 1 1

c i

+ 1 =

x i y i

+

x i c i

+

y i c i

(b) Karnaugh maps

x i y i c i s i

I T P W Krzysztof Jasiński

c i

+ 1 (c) Circuit

Rys. 5.4. Pełny sumator

.

2009 PRUSn_W6 21

Specyfikacja układów arytmetycznych

module

fulladd (Cin, x, y, s, Cout);

input

Cin, x, y;

output

s, Cout;

xor

(s, x, y, Cin);

and and and

(z1, x, y); (z2, x, Cin); (z3, y, Cin); // instancje (kopie) bramki AND // symbol

and

można pominąć // symbol

and

można pominąć

or

(Cout, z1, z2, z3);

endmodule Rys. 5.23. Opis pełnego sumatora z użyciem bramek.

I T P W Krzysztof Jasiński 2009 PRUSn_W6 22

Specyfikacja układów arytmetycznych

module

fulladd (Cin, x, y, s, Cout);

input

Cin, x, y;

output

s, Cout;

assign

s = x ^ y ^ Cin; // równania logiczne ^ = XOR

assign

Cout = (x & y) | (x & Cin) | (y & Cin); // symbol

assign endmodule Rys. 5.23. Opis pełnego sumatora z użyciem przypisania ciągłego.

I T P W Krzysztof Jasiński 2009 PRUSn_W6 23

Specyfikacja układów arytmetycznych

module

adder4 (carryin, x3, x2, x1, x0, y3, y2, y1, y0, s3, s2, s1, s0, carryout);

input

carryin, x3, x2, x1, x0, y3, y2, y1, y0;

output

s3, s2, s1, s0, carryout; fulladd fulladd fulladd stage0 (carryin, x0, y0, s0, c1); // instancja modułu

fulladd

stage1 (c1, x1, y1, s1, c2); // każda instancja musi mieć unikalną nazwę stage2 (c2, x2, y2, s2, c3); // połączenia między instancjami są niejawne fulladd stage3 (c3, x3, y3, s3, carryout);

endmodule module

fulladd (Cin, x, y, s, Cout);

input

Cin, x, y;

output

s, Cout; // oryginał modułu

fulladd assign

s = x ^ y ^ Cin,

assign

Cout = (x & y) | (x & Cin) | (y & Cin);

I T P W endmodule Krzysztof Jasiński Rys. 5.27. Opis 4-bitowego sumatora 2009 PRUSn_W6 24

Specyfikacja układów arytmetycznych

wykorzystanie notacji wektorowej module

adder4 (carryin, X, Y, S, carryout);

input

carryin;

input

[3:0] X, Y;

output

[3:0] S;

output wire

carryout; [3:1] C; // połączenia jawne fulladd stage0 (carryin, X[0], Y[0], S[0], C[1]); fulladd stage1 (C[1], X[1], Y[1], S[1], C[2]); fulladd stage2 (C[2], X[2], Y[2], S[2], C[3]); fulladd stage3 (C[3], X[3], Y[3], S[3], carryout);

I T P W endmodule Rys. 5.28. Opis cztero-bitowego sumatora z użyciem notacji wektorowej Krzysztof Jasiński 2009 PRUSn_W6 25

Specyfikacja układów arytmetycznych

iteracja zamiast kopiowania

x n –

1

y n

– 1

x

1

y

1

x

0

y

0

c n

FA

c n

” 1

c

2 FA

c

1 FA

c

0

s n

– 1 MSB pozycja

s

1 LSB pozycja

Rys 5.6. N-bitowy sumator kaskadowy I T P W Krzysztof Jasiński 2009 PRUSn_W6 26

I T P W

Specyfikacja układów arytmetycznych

iteracja zamiast kopiowania module

addern (carryin, X, Y, S, carryout);

parameter

n=32;

input

carryin;

input

[n-1:0] X, Y;

output

[n-1:0] S;

output

carryout;

reg

[n-1:0] S;

reg

carryout;

reg

[n:0] C;

integer

k;

Krzysztof Jasiński always

@(X or Y or carryin)

begin

C[0] = carryin;

for

(k = 0; k < n; k = k+1)

begin

// pętla

for

powtarza n razy // funkcje sumy i przeniesienia S[k] = X[k] ^ Y[k] ^ C[k]; C[k+1] = (X[k] & Y[k]) | (X[k] & C[k]) | (Y[k] & C[k]);

end end

carryout = C[n];

Rys 5.29. 32-bitowy sumator kaskadowy 2009 PRUSn_W6 27 endmodule

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych module

addern (carryin, X, Y, S);

parameter

n = 32;

input

carryin;

input

[n-1:0] X, Y;

output

[n-1:0] S;

reg

[n-1:0] S;

always

@(X or Y or carryin) S = X + Y + carryin; // bez wyjścia przeniesienia

endmodule I T P W Rys 5. 30. Specyfikacja n-bitowego sumatora przy użyciu operacji arytmetycznych

.

Krzysztof Jasiński 2009 PRUSn_W6 28

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych module

addern (carryin, X, Y, S, carryout, overflow);

parameter

n = 32;

input

carryin;

input

[n-1:0] X, Y;

output

[n-1:0] S;

output

carryout, overflow;

reg

[n-1:0] S;

reg

carryout, overflow;

I T P W always

@(X or Y or carryin)

begin

S = X + Y + carryin; carryout = (X[n-1] & Y[n-1]) | (X[n-1] & ~S[n-1]) | (Y[n-1] & ~S[n-1]); overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1];

end endmodule Krzysztof Jasiński Rys 5. 31. Specyfikacja n-bitowego sumatora z wyjściami przeniesienia i przepełnienia 2009 PRUSn_W6 29

I T P W

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych module

addern (carryin, X, Y, S, carryout, overflow);

parameter

n = 32;

input

carryin;

input

[n-1:0] X, Y;

output

[n-1:0] S;

output

carryout, overflow;

reg

[n-1:0] S;

reg

carryout, overflow;

reg

[n:0] Sum;

always

@(X or Y or carryin)

begin

Sum = {1'b0,X} + {1'b0,Y} + carryin;

end

S = Sum[n-1:0]; carryout = Sum[n]; // Suma

Sum

rozszerzona o jeden bit =

0

overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1];

endmodule Rys 5. 32. Alternatywna specyfikacja n-bitowego sumatora z wyjściami przeniesienia i przepełnienia Krzysztof Jasiński 2009 PRUSn_W6 30

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych module

addern (carryin, X, Y, S, carryout, overflow);

parameter

n = 32;

input

carryin;

input

[n-1:0] X, Y;

output

[n-1:0] S;

output

carryout, overflow;

reg

[n-1:0] S;

reg

carryout, overflow;

always

@(X or Y or carryin)

begin

{carryout, S} = X + Y + carryin; // konkatenacja przeniesienia i sumy

end

overflow = carryout ^ X[n-1] ^ Y[n-1] ^ S[n-1];

I T P W endmodule Krzysztof Jasiński Rys 5. 33. Uproszczona specyfikacja pełnego n-bitowego sumatora 2009 PRUSn_W6 31

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych

+ X Y + 0 1 1 1 0 1 0 1 + 7 5 Z carry + 1 1 0 0 0 1 1 0 1 0 0 1 0 12 S = 2

I T P W

+ X Y Z carry

Krzysztof Jasiński

+ 1 0 0 0 1 0 0 1 + 1 0 0 0 1 0 1 1 0 1 0 1 1 1 S = 7 + 8 9 17

Rys 5. 39. Sumator liczb w kodzie BCD 2009 PRUSn_W6 32

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych

X Y

c in

carry-out 4-bit adder Z Detect if sum

>

9 6 0 MUX Adjust

c out

4-bit adder 0

I T P W

S

Rys 5. 40. Schemat blokowy sumatora w kodzie BCD Krzysztof Jasiński 2009 PRUSn_W6 33

I T P W

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych module

bcdadd (Cin, X, Y, S, Cout);

input input

Cin; [3:0] X, Y;

output

[3:0] S;

output reg

Cout; [3:0] S;

reg

Cout;

reg

[4:0] Z;

Krzysztof Jasiński always

@ (X or Y or Cin)

begin

Z = X + Y + Cin;

if

(Z < 10)

end else

{Cout, S} = Z; {Cout, S} = Z + 6;

Rys 5. 41. Specyfikacja sumatora endmodule w kodzie BCD 2009 PRUSn_W6 34

Specyfikacja układów arytmetycznych

użycie operacji arytmetycznych

x

3

x

2

x

1

x

0

y

3

y

2

y

1

y

0

c in z

3 Four-bit adder

z

2

z

1

z

0

I T P W

c out

Krzysztof Jasiński

s

3 Two-bit adder

Rys 5. 43. Uproszczony układ sumatora w kodzie BCD

s

2

s

1

s

0

2009 PRUSn_W6 35