Explorați Cărți electronice
Categorii
Explorați Cărți audio
Categorii
Explorați Reviste
Categorii
Explorați Documente
Categorii
UNIVERSITATEA PITETI
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
n cadrul unui program scris n limbajul VHDL zona de descriere concurent se gsete ntre specificaiile begin i end ale unei arhitecturi.
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]
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
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.
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
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
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
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
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
SW6
SW DIP-8
W2 Y1 Y2 Y3 W4 W5 Y5 W6
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
imp
W2 Y1 Y2 Y3 W4
R4 470
GND
R5 R7 R8 R9 470
OP1
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
OP1 =
ceo
W2
LED1
R1
GND
470 R2
cmo
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
SW_USER4
GND
SW_USER5
9 8 7 6 5 4 3 2
D1 a[0] C1 a[1]
SW_USER6
GND
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.
Codor buton-binar
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