Sunteți pe pagina 1din 17

Laborator 2

UNIVERSITATEA PITETI

Programarea structurilor hardware reconfigurabile prin descrieri concurente

1. SCOPUL LUCRRII n aceast lucrare sunt prezentate implementri prin descrieri cu specificaii concurente. Sunt realizate mai multe exemple prin care sunt cuprinse o parte din specificaiile concurente pentru a fi sintetizate i implementate pe sistemul reconfigurabil de laborator utiliznd descrieri de tip flux de date sau de tip structural. n final sunt propuse probleme din aceeai categorie n vederea implementrii acestora. 2. INTRODUCERE TEORETIC 2.1. Descrierea cu specificaii concurente Prin intermediul limbajelor de descriere hardware pot fi proiectate module digitale independente, interconectate ntre ele prin semnale i care funcioneaz n paralel. Limbajul de descriere hardware prezint mecanisme de descriere paralel cu specificaii concurente a modulelor digitale combinaionale. Prin definiie, logica combinaional este aceea n care ieirile unui circuit depind numai de intrrile acestuia (structuri logice care nu prezint memorie). intrri logice ieiri logice

Circuit logic combinaional

n cadrul unui program scris n limbajul VHDL zona de descriere concurent se gsete ntre specificaiile begin i end ale unei arhitecturi.

library IEEE; use IEEE.STD_LOGIC_1164.all; -- alte incuziuni de librrii i pachete;

Laborator 2

UNIVERSITATEA PITETI

entity modul_digital is generic ( --declaraii de constante generice ) port( --); end modul_digital; architecture descriere of modul_digital is begin - - - zona de specificaii concurente end descriere;

2.1.1. Atribuirea condiional a semnalelor Atribuirea asupra semnalelor se face n interiorul arhitecturii sau a proceselor. Atribuirea simpl a unui semnal este realizat prin operatorul <=. Atribuirea condiional n domeniul concurent se realizeaz prin specificaia WHEN/ELSE. Sintax:
LABEL1: -- etichet optional SIG_NAME <= <expresie> when <condiie> else --<expresie> when <condiie> else <expresie>;

Modificarea valorii logice a unui semnal se face numai dac este ndeplinit o anumit condiie boolean. Altfel, este luat n considerare condiia urmtoare care apare dup clauza ELSE. ntotdeauna, o atribuire condiional trebuie s se termine cu specificaie ELSE. 2.1.2. Atribuirea selectiv a semnalelor Atribuirea selectiv a semnalelor este realizat cu specificaia WITH/SELECT. n acest caz, spre deosebire de atribuirea condiional, trebuie incluse toate combinaiile posibile n declaraia condiional.

Laborator 2

UNIVERSITATEA PITETI

LABEL1: -- etichet opional with <expresie de selecie> select SIG_NAME <= <expresie> when <selectie>, <expresie> when <selectie>, --<expresie> when others;

Pentru eliminarea tuturor posibilitilor de selecie din expresia condiional, la sfritul specificaiei de atribuire este obligatorie introducerea clauzei WHEN OTHERS. 2.2. Descrierea structural Componenta reprezint o pereche entitate/arhitectur i specific un susbsistem care poate fi instaniat n alt arhitectur pe o metodologie ierarhic. Componenta, pentru a fi utilizat, este declarat dup care inserarea acesteia n alte module se realizeaz prin instaniere. Declararea unei componente Declaraia unei componente reprezint o interfa ntre o entitate virtual pentru a fi utilizat ntr-un alt modul prin instanierea componentei respective. Sintaxa:
component component_name [ is ] generic (generic_list); port (port_list); end component component_name;

Componenta trebuie declarat nainte de a fi instaniat. Declaraia componentei (sintaxa de mai sus) definete interfaa virtual (soclul n care va fi introdus circuitul) dar nu indic direct componenta. O component poate fi definit n package-uri, entitate, arhitectur sau declaraii de blocuri. n cazul n care, componenta este declarat ntr-o arhitectur, aceasta trebuie s fie plasat n zona declarativ a arhitecturii, nainte de begin. nstanierea unei componente Prin instanierea unei componente se nelege realizarea asocierilor de semnale si atribuirii de valori generice specifice acestei componente n cadrul arhitecturii modulului digital.

Laborator 2

UNIVERSITATEA PITETI

Sintax:
etichet : [ component ] nume_component generic map ( list_valori_generice ) port map ( lista_porturi ); etichet : entity nume_entitate [(identificator_arhitectur)] generic map ( list_valori_generice ) port map ( list_porturi ); eticht : configuration nume_configuraie generic map ( list_valori_generice ) port map ( list_porturi );

Prin instanierea unei componente sunt pstrate referinele unitii instaniate i valorile actuale a genericelor i porturilor acesteia. Numele componentei instaniate trebuie s fie acelai cu numele componentei declarate. Lista de asociere poate fi realizat dup nume sau poziionare a porturilor. Asocierea poziional, parametrii actuali sunt conectai n aceeai ordine cu porturile unde a fost declarat componenta.
U1: poarta PORT MAP(a, b, c);

Asocierea dup nume d posibilitatea porturilor i valorilor generice s fie puse ntr-o ordine diferit dc cea declarat n component. Asocierea porturilor sau valorilor generice se face prin operatorul =>.
U1: poarta PORT MAP(in1 =>a, in2 => b,iesire => c);

Specificaia GENERATE Specificaia GENERATE reprezint o facilitate furnizat de VHDL pentru realizarea iterativ sau condiional a unor poriuni de program. Sintax:
etichet: for parametru in interval generate [ { declaraii } begin ] { specificaii concurente } end generate [ etichet ] ; etichet: if condiie generate [ { declaraii } begin ] { specificaii concurente } end generate [ etichet ] ;

Laborator 2

UNIVERSITATEA PITETI

Specificaia de tip generate este utilizat pentru simplificarea descrierii unor poriuni de program repetitive. De obicei este utilizat pentru specificarea unui grup de componente identice prin crearea unei singure componente care este repetat prin mecanismul GENERATE. O specificaie generate const n: - generarea de scheme (for generate sau if generate); - parte declarativ (declaraii locale de subprograme, tipuri, semnale, constante, componente, atribute, configuraii, fiiere i grupuri); - specificaii concurente. Elementele limbajului VHDL prezentate n partea teoretic a acestei lucrri de laborator vor fi regsite n aplicaiile urmtoare. 3. APLICAII a) Este descris n limbajul VHDL un multiplexor de tipul 4:1 cu ajutorul specificaiei condiionale concurente WHEN/ELSE.

a b c
Programul VHDL este urmtorul:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux_a is Port ( a,b,c,d : in std_logic; s1,s2 : in std_logic; y : out std_logic); end mux_a; architecture Behavioral of mux_a is signal s_temp : std_logic_vector(1 downto 0); begin s_temp <= s2 & s1; y <= a when s_temp="00" else b when s_temp="01" else c when s_temp="10" else d; end Behavioral;

d s1 s1

Laborator 2

UNIVERSITATEA PITETI

b) n acest program este realizat tot multiplexorul anterior dar implementat prin specificaia selectiv WITH / SELECT / WHEN:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity mux_b is Port ( a,b,c,d : in std_logic; s1, s2 : in std_logic; y : out std_logic); end mux_b; architecture Behavioral of mux_b is signal s_temp : std_logic_vector(1 downto 0); begin WITH s_temp SELECT y <= a when "00", b when "01", c when "10", d when OTHERS; end Behavioral;

c) Este descris hardware un corector de paritate prin care datele de ieire vor avea numai paritate par sau impar, specificat printr-un semnal de intrare sel_par de selecie al paritii indiferent de paritatea datelor de intrare. Corectarea paritii se realizeaz prin adugarea unui bit pe poziia cea mai semnificativ a datei de intrare. n figura de mai jos este prezentat entitatea modului digital.

a[6..0] sel_par

y[7..0]

sel_par = 0 paritate par sel_par = 1 paritate impar

De exemplu: Dat de intrare a[6..0] 1001001 1001001 0001100 0001100 Bit paritate sel_par Dat de ieire y[7..0] 0 paritate par 11001001 1 paritate impar 01001001 0 paritate par 00001100 1 paritate impar 10001100

Laborator 2

UNIVERSITATEA PITETI

Un numr binar este considerat de paritate par dac numrul de bii cu valoarea 0 logic este par. Un numr binar este considerat de paritate impar dac numrul de bii cu valoarea 1 logic este impar. Determinarea paritii unui numr binar se realizeaz prin efectuarea operaiei logice XOR ntre toi biii acestuia. n cazul exemplului nostru, relaia de determinare a paritii este urmtoarea:

paritate = a[6] XOR a[5] XOR a[4] XOR a[3] XOR a[2] XOR a[1] XOR a[0]
Dac se dorete ca semnalul de ieire s fie cu paritate par, atunci la numrul de intrare se ataeaz paritatea acestuia y = paritate & a; Dac se dorete paritate impar la numrul de intrare se ataeaz paritatea complementat y = not ( paritate) & a; Programul VHDL este urmtorul:
library IEEE; use IEEE.STD_LOGIC_1164.ALL; entity Corect_Parit is Port ( a : in std_logic_vector(6 downto 0); sel_par : in std_logic; y : out std_logic_vector(7 downto 0)); end Corect_Parit; architecture Behavioral of Corect_Parit is signal paritate : std_logic; begin paritate <= a(6)XOR a(5)XOR a(4)XOR a(3)XOR a(2)XOR a(1)XOR a(0); with sel_par select y <= paritate & a when '0', (not paritate) & a when others; end Behavioral;

Laborator 2

UNIVERSITATEA PITETI

d) Este descris un exemplu prin care se implementeaz o unitate aritmetico-logic cu operanzii reprezentai pe 4 bii. Operaiile realizate de ctre aceasta sunt date n tabelul de mai jos:
sel 000 001 010 011 100 101 110 111 operaie r <= x r <= y r <= x + z r <= x + y r <= x AND y r <= x OR y r <= NOT x r <= NOT y funcie Transfer x Transfer y Adun x cu y Adun x cu y i transport I logic SAU logic Complement x Complement y

unitate Aritmetic

Logic

Porturile unitii aritmetico-logice sunt prezentate n figura de mai jos:

x[3..0] y[3..0] sel_op[2..0]


UAL

r[3..0] cy

Selecia dintre unitatea logic i unitatea aritmetic se face cu bitul cel mai semnificativ al semnalului sel_op. Biii sel_op[0] i sel_op[1] sunt utilizai n selecia funciilor logice sau aritmetice corespunztoare celor dou uniti de calcul. Soluia prezentat n programul de mai jos este realizat integral n domeniul concurent cu specificaii de acest tip. Cele dou uniti de calcul (aritmetic i logic) opereaz, de asemenea, n paralel realiznd calculele de la aceleai magistrale de intrare: x, respectiv y. Implementarea acestor operaii sunt posibile datorit includerii pachetului de funcii std_logic_unsigned din biblioteca IEEE. n cadrul programului mai sunt utilizate dou semnale care fac legtura dintre unitatea aritmetic i unitatea logic cu multiplexorul de la ieire.

Laborator 2 library IEEE; use IEEE.STD_LOGIC_1164.ALL; use IEEE.STD_LOGIC_ARITH.ALL; use IEEE.STD_LOGIC_UNSIGNED.ALL;

UNIVERSITATEA PITETI

entity UAL is Port ( x, y : in std_logic_vector(3 downto 0); sel_op : in std_logic_vector(2 downto 0); r : out std_logic_vector(3 downto 0); cy : out std_logic); end UAL; architecture Behavioral of UAL is signal t_arith : std_logic_vector(4 downto 0); signal t_logic : std_logic_vector(3 downto 0); begin --descrierea unitatii aritmetice with sel_op(1 downto 0) select t_arith <= '0'& x when "00", '0'& y when "01", '0'& x + '0'& y when "10", '0'& x - '0'& y when others; --descrierea unitatii logice with sel_op(1 downto 0) select t_logic <= x and y when "00", x or y when "01", not x when "10", not y when others; --multiplexarea intre unitatea logica si unitatea aritmetica r <= t_arith(3 downto 0) when sel_op(2)='0' else t_logic; cy <= t_arith(4) when sel_op(2)='0' else '0'; end Behavioral;

Cele dou uniti, aritmetic i logic, au la baz specificaii concurente selective. Pentru multiplexor s-a folosit o specificaie concurent condiional. n unitatea aritmetic s-a lucrat cu operanzii cu un bit mai mult tiind c adunarea a dou numere pe 4 bii pot avea rezultatul pe 5 bii. Din aceast cauz, operanzii au fost mrii cu un bit prin operatorul de concatenare &.

Laborator 2

UNIVERSITATEA PITETI

De exemplu semnalul x este reprezentat pe 3 bii dar scriindu-l sub forma 0 & x rezult un semnal pe 4 bii, bitul cel mai semnificativ fiind 0 logic. Bitul cy este extras numai atunci cnd are loc operaia aritmetic, adic sel_par[2]=1. e) n exemplul de mai jos se realizeaz implementarea n cod VHDL a unui modul digital care compar dou valori binare reprezentate pe 4 bii i arat relaia dintre acestea. Realizarea unui comparator pe mai muli bii cu ecuaii booleene este dificil. n acest caz se realizeaz un comparator general pe un singur bit ce poate fi plasat n cascad cu alte module de acelai tip formnd comparatorul pe mai muli bii. Etapa 1: (realizarea comparatorului pe un singur bit) Comparatorul pe un singur bit trebuie s poat realiza urmtoarele relaii dintre operatorii x i y : x < y , x > y i x = y . n plus, fa de semnalele x i y, sunt introduse dou porturi de intrare, cm i ce, care indic starea modulului comparator de ordin superior. Dac cm = 1 atunci x > y iar dac ce = 0 , ntre operatorii de intrare exist operaia de egalitate. Acest modul, mai are de asemenea, dou porturi de ieire prin care este dat starea acestuia pentru a fi preluat de modulele de grad inferior. Modulul digital are urmtoarea schem: x cmi cei comparator pe 1 bit y cmo ceo cmi cei x y relaie cmo ceo 0 0 X X < 0 0 0 1 0 0 = 0 1 0 1 0 1 < 0 0 0 1 1 0 > 1 0 0 1 1 1 = 0 1 1 0 X X > 1 0 1 1 X X invalid 1 1

Ecuaiile booleene simplificate rezultate din tabelul de adevr sunt urmtoarele:

cmo = cmi + cei x y ce = cmi cei + cei x y + cei x y


Programul surs n VHDL este urmtorul:

10

Laborator 2 library IEEE; use IEEE.STD_LOGIC_1164.all; entity comp1 is port( x : in STD_LOGIC; y : in STD_LOGIC; cmi : in STD_LOGIC; cei : in STD_LOGIC; cmo : out STD_LOGIC; ceo : out STD_LOGIC ); end comp1; architecture comp1 of comp1 is begin

UNIVERSITATEA PITETI

cmo <= cmi or (cei and x and (not y)); ceo <= (cmi and cei)or(cei and(not x)and (not y))or(cei and x and y); end comp1;

Etapa 2: (realizarea comparatorului pe mai muli 4 bii) Dup realizarea comparatorului pe un singur bit, se realizeaz comparatorul pe 4 bii prin conectarea modulului digital rezultat din programul anterior n cascad dup cum este dat n figura de mai jos: x(0) 0 ce(0) 1 cm(0) y(0) x(1) y(1) x(2) y(2) ce(3) Comp1 U3 cm(3) x(3) y(3) ceo cmo

ce(1) Comp1 U1 cm(1)

ce(2) Comp1 U2 cm(2)

ce(4) Comp1 U4 cm(4)

Comparatorul pe 4 bii este format prin cascadarea de 4 ori a comparatorului pe un bit. Acest lucru se realizeaz prin declararea unei componente comp1 i interconectarea acesteia prin intermediul specificaiei PORT MAP. Programul surs pentru descrierea comparatorului pe 4 bii este urmtorul:
library IEEE; use IEEE.STD_LOGIC_1164.all;

11

Laborator 2 entity comp4 is port(

UNIVERSITATEA PITETI

x : in STD_LOGIC_VECTOR(3 downto 0); y : in STD_LOGIC_VECTOR(3 downto 0); cmo : out STD_LOGIC; ceo : out STD_LOGIC ); end comp4; architecture comp4 of comp4 is component comp1 port( x : in STD_LOGIC; y : in STD_LOGIC; cmi : in STD_LOGIC; cei : in STD_LOGIC; cmo : out STD_LOGIC; ceo : out STD_LOGIC ); end component; signal cm,ce:std_logic_vector(4 downto 0); begin cm(0)<='0'; ce(0)<='1'; U1: comp1 port map(x(0),y(0),cm(0),ce(0),cm(1),ce(1)); U2: comp1 port map(x(1),y(1),cm(1),ce(1),cm(2),ce(2)); U3: comp1 port map(x(2),y(2),cm(2),ce(2),cm(3),ce(3)); U4: comp1 port map(x(3),y(3),cm(3),ce(3),cm(4),ce(4)); cmo<=cm(4); ceo<=ce(4); end comp4;

Etapa 3: (realizarea comparatorului pe 4 bii utiliznd specificaia FORGENERATE) n structura comparatorului pe 4 bii observm c este utilizat doar modulul comp1 i este interconectat repetitiv de patru ori. Acest lucru d posibilitatea ca descrierea structural a comparatorului pe 4 bii s fie realizat cu specificaia FOR GENERATE ca n programul de mai jos:
library IEEE; use IEEE.STD_LOGIC_1164.all; entity comp4 is port(

12

Laborator 2

UNIVERSITATEA PITETI x : in STD_LOGIC_VECTOR(3 downto 0); y : in STD_LOGIC_VECTOR(3 downto 0); cmo : out STD_LOGIC; ceo : out STD_LOGIC );

end comp4; architecture comp4 of comp4 is component comp1 port( x : in STD_LOGIC; y : in STD_LOGIC; cmi : in STD_LOGIC; cei : in STD_LOGIC; cmo : out STD_LOGIC; ceo : out STD_LOGIC ); end component; signal cm,ce:std_logic_vector(4 downto 0); begin cm(0)<='0'; ce(0)<='1'; unit: for i in 0 to 3 generate U1: comp1 port map(x(i),y(i),cm(i),ce(i),cm(i+1),ce(i+1)); end generate; cmo<=cm(4); ceo<=ce(4); end comp4;

4. DESFURAREA LABORATORULUI 1. n vederea implementrii programelor de mai sus s se realizeze urmtorii pai: - Pentru fiecare aplicaie n parte s se realizeze un proiect nou; - Introducerea surselor VHDL; - Simularea logic a proiectelor; - Crearea fiierelor de constrngeri ale pinilor dup schemele de implementare fizic date n subpunctele urmtoare; - Realizarea sintezei acestora; - Vizualizarea schemelor logice, respectiv tehnologice; - Simularea modelului comportamental rezultat dup sintez; - Implementarea proiectului; - Vizualizarea rutrii structurii fizice;

13

Laborator 2

UNIVERSITATEA PITETI

Simularea Post-Place & Post Route a modelului; Configurarea circuitului fizic.

Not: Circuitul configurabil FPGA este de tipul 3s400fg456 cu speed grade -4 2. Implementai hardware primele trei exemple descrise n aceast lucrare de VCC laborator: a. Exemplu multiplexor 4:1
1 4K7

FPGA
9 8 7 6 5 4 3 2 SW1

Y6
SW_DIP0 SW_DIP1 SW_DIP2 SW_DIP3

a b
D1

V6 U7 AA4
4K7

c d

W2
LED0

GND

GND
4K7 VCC SW_USER0

GND

SW_USER1

D1

C1

b. Exemplu corector paritate


VCC 1 R46 4K7 9 8 7 6 5 4 3 2

SW6

SW DIP-8

Y6 V6 U7 AA4 AB4 AA5 AB5 AA6

a(0) a(1) a(2) a(3) a(4) a(5) a(6) sel_par

y(0) y(1) y(2) y(3) y(4) y(5) y(6) y(7)

W2 Y1 Y2 Y3 W4 W5 Y5 W6

LED0 LED1 LED2 LED3 LED4 LED5 LED6 LED7

R74 R75 R76 R77 R78 R79 R80 R81

270

GND
270

GND
270

GND
270

GND
270

GND
270

GND

GND
270

GND
270

GND

FPGA

14

Laborator 2

UNIVERSITATEA PITETI
VCC

c. Exemplu UAL

1 R6 4K7 9 8 7 6 5 4 3 2

SW2

SW DIP-8

Y6 V6 U7 AA4 AB4 AA5 AB5 AA6


VCC

a(3) a(2) a(1) a(0) b(3) b(2) b(1) b(0)

imp

W2 Y1 Y2 Y3 W4

LED0 LED1 LED2 LED3 LED4

R4 470

GND
R5 R7 R8 R9 470

OP1

r(3) r(2) r(1)

GND
470

GND
470

GND
470

OP2

r(0)

GND

GND
VCC VCC

FPGA
R53 4k7

sel_op

R43 4k7

R52 4k7

D1 C1
SW12 SW13

B6
SW14

d. Exemplu de comparator

VCC

1 R3 4K7 9 8 7 6 5 4 3 2

SW1

SW DIP-8

Y6 V6 U7 AA4 AB4 AA5 AB5 AA6

x(0) x(1) x(2) x(3) y(0) y(1) y(2) y(3)


LED0

OP1 =

ceo

W2
LED1

R1

GND
470 R2

cmo

0 < 1 > OP2

Y1

GND
470

GND

FPGA

15

Laborator 2

UNIVERSITATEA PITETI

Legturile dintre pinii fizici ai structurii reconfigurabile i porturile din entitile modulelor descrise n VHDL sunt specificate n schemele electrice anterioare. Componentele din schemele electrice (butoane, LED-uri, rezistene) sunt prezente n schema sistemului de dezvoltare. Entitatea modului digital se regsete n chenarul notat: FPGA. 3. S se realizeze un decodor pe 4 bii n care se afieaz pe un digit cu apte segmente numerele de la 0 la 9. Combinaiile sunt date cu ajutorul butoanelor USER0, USER1, USER2, USER3 de pe sistemul de dezvoltare.

VCC

1 4K6

y[0] C6 y[1] B8 y[2] E7

DIG0_SEG0 DIG0_SEG1 DIG0_SEG2 DIG0_SEG3 DIG0_SEG4 DIG0_SEG5 DIG0_SEG6


GND GND GND GND GND GND GND

SW_USER4

GND
SW_USER5

9 8 7 6 5 4 3 2

D1 a[0] C1 a[1]
SW_USER6

GND

y[3] C5 y[4] E6 y[5] B5 y[6] A4

GND
SW_USER7

B6

a[2]

GND

A15 a[3]

FPGA
S se realizeze acest modul prin dou metode: descriere de tip flux de date si descriere structural.

4. S se realizeze n limbaj VHDL un modul digital care afieaz numrul de bii plasai n 1 logic a-i portului de intrare. Corelarea cu schema fizic a porturilor de intrare/ieire se va face dup schema electric a sistemului reconfigurabil.

16

Laborator 2

UNIVERSITATEA PITETI

Intern, modulul digital va fi realizat din dou module descrise cu specificaii concurente i interconectate prin descriere structural.

a[0] a[1] a[2] a[3] a[4] a[5] a[6]

Codor buton-binar

Decodor binar 7 segmente

y[0] y[1] y[2] y[3] y[4] y[5] y[6]

4. S se realizeze n limbajul VHDL un buffer cu ieirile de tip three-state utiliznd numai specificaii concurente. Numele de buffer three-state vine de la ieirea acestuia care poate lua una din cele trei stri: 1 logic, 0 logic sau Z fiind starea de nalt impedan. n general buffere-le de tip three-state sunt utilizate pentru conectarea unor module digitale la magistralele de date. Fiecare modul poate avea acces la magistral la un moment dat, celelalte module avnd ieirile trecute n nalt impedan. Tabelul de adevr i porturile de interconectare ale unui astfel de buffer este dat n figura de mai jos: e y 0 Z 1 d

d[7..0] e

Buffer three-state

y[7..0]

17