Sunteți pe pagina 1din 53

Sistem de afiare cu multiplexare n timp pentru 4

cifre LED 7 segmente

Lucrarea de fa i propune :

realizarea unui program n Schematic, sub mediul de lucru Xilinx ISE, care s implementeze
un sistem de afiare cu multiplexare n timp pe un dispozitiv de 4 cifre alctuite din 7 segmente
(leduri).

realizarea unui program n limbaj VHDL, sub mediul de lucru Xilinx ISE, care s
implementeze un sistem de afiare cu multiplexare n timp pe un dispozitiv de 4 cifre alctuite din 7
segmente (leduri).

implementarea pe plac FPGA a ambelor programe.

Referine:
Robert K. Dueck Digital Design with CPLD Applications and VHDL
Capitolul 2: Logic Functions & Gates
Capitolul 5: Combinational Logic Functions
Capitolul 9: Counters and Shift Registers

Programe necesare:

Xilinx ISE Design Suite 10.1

Cuprins:
Implementarea n Schematic................................................................................ 2
Implementare FPGA a programului n Schematic..............................................24
Implementarea n VHDL....................................................................................... 30
Implementare FPGA a programului n VHDL......................................................44

Implementarea n Schematic
Pentru realizarea acestuia deschidem aplicaia Xilinx ISE 10.1 i se creaz
un nou proiect: din meniul File se selecteaz New Project.

Se alege locaia proiectului, precum i numele acestuia (numele dosarului


i al proiectului nu trebuie s conin caracterul spaiu deoarece va da eroare la
implementarea pe placa FPGA).

Se d Next i se alege ca dispozitiv Spartan3 XC3S1000, iar ca simulator se selecteaz Ise


Simulator(VHDL/Verilog):

n continuare se d Next pentru urmtoarele dou casete de dialog ce corespund crerii,


respectiv adugrii de surse:

n fereastra de dialog aprut sunt artate proprietile proiectului ce urmeaz a fi creat. Se


selecteaz Finish i noul proiect este creat:

Se creaz o nou surs de tip Schematic: click dreapt n toolbarul Sources i se selecteaz
New Source

n fereastra deschis se introduce un nume pentru fiierul ce urmeaz a fi creat, selectnd ca


tip Schematic:

Se apas Next i apoi Finish; un nou fiier Schematic este creat.

Pasul 1 Crearea unui registru de deplasare la stnga


n fiierul nou creat vom realiza un registru de deplasare spre stnga folosind 4 bistabili de tip
D cu RESET.
n fereastra Sources se selecteaz submeniul Symbols; n cmpul Symbol Name Filter se va
introduce FDR (bistabil de tip D cu Reset).Se selecteaz din csua Symbols fdr, apoi se d un click
n foaia de lucru n locul n care se dorete a fi plasat bistabilul D. Se repet acest pas pn adugm
toate simbolurile necesare .

Opiunea Add Wire din bara de instrumente sau folosind scurttura Crtl + W va ajuta la
conectarea bistabililor i porilor:

Avnd selectat opiunea Add Wire se d click pe o intrare / ieire a unui simbol i se
deplaseaz cursorul pn la o intrare / ieire a simbolului cu care se dorete a fi conectat i apoi se
execut click- astfel conectarea este realizat.
Dup ce sunt aranjate firele se pot aduga markerele de intrare/ieire I/O Marker. n toolbar
Schematic Editor se selecteaz butonulI/O Marker i se plaseaz markerele la capetele firelor.
Acestea se seteaz automat ca fiind markere de intrare, respectiv de ieire.

Dup adugare se poate schimba numele dnd dublu click pe fiecare marker i schimbndu-i
numele n csua Name.

Salvm schema fcut. n continuare vom crea simbol pentru schem astfel: Tools -> Symbol
Wizard ->Using Schematic.

Putem schimba ordinea ieirilor i a intrrilor pentru facilitarea utilizrii (n coloana Order).

Se apas Next i va aprea fereastra Symbol Wizard - Option Page; se apas din nou Next i
va aprea fereastra Symbol Wizard Preview Page.

Se apas Finish i astfel simbolul este creat.

Pasul 2 Crearea unui registru de deplasare la stnga pe 4


bii cu ncrcare paralel
Crem un nou fiier : click dreapta n toolbarul Sources i se selecteaz New Source; alegem
Schematic i numim fiierul RDS16. Se adaug 4 simboluri RDS4 (cel creat anterior) din Sources ->
Symbols ( avem grij s selectm folderul unde am creat simbolul, de obicei acelai cu proiectul).

Realizm legturile ca n figura urmtoare. n continuare vom crea un BUS. Busul este o
modalitate de a reprezenta mai multe fire printr-unul singur. Exemplificm pentru intrrile data.
Denumim fiecare fir de intrare ca n figur. Crem un fir i i dm denumirea D(0:3), apoi adugm un
input.

Dup ce am creat Busurile i pentru ieiri, schema va arta ca n figura urmtoare.

Vom crea un simbol i pentru aceast schem care va arta n fel urmtor:

Pasul 3 - Crearea unui multiplexor 16 la 4


Crem un fiier Schematic nou pe care l numim mux16to4 n care adugm 4 multiplexoare 4
la 1 din Symbols(M4_1E).

Construim o schem asemntoare cu cea din figur, n care, pe lng multiplexoare, avem i
un bloc Constant.

Salvm schema i facem un nou simbol care va arta ca mai jos:

Pasul 4 Crearea unui decodificator 2 la 4


Crem alt fiier n care vom face un decodificator 2 la 4. Fiierul se va numi SelDig
(decodificatorul are rolul de a selecta ledurile pe care se face afiarea). Pentru a deduce schema
decodificatorului facem tabela de adevr:
S1 S0 Digit0 Digit1 Digit2
Digit3
0
0
0
1
1
1
0
1
1
0
1
1
1
0
1
1
0
1
1
1
1
1
1
0
Folosind POS (product of sums) determinm formulele pentru ieiri:
Digit0 S1 S0
Digit1
S1 S0
Digit2
S1 S0

Digit3
S1 S0

Deci avem nevoie de 4 pori Or2 i 2 inversoare (inv) din Symbols.

Schema va arta ca n figura ce urmeaz:

Dup ce salvm schema vom crea un simbol care va arta astfel:

Pasul 5- Decodificatorul BCD 7 segmente


Decodificatorul BCD 7 segmente a fost fcut n laboratoarele anterioare, de aceea nu este nevoie
s-l crem din nou, ci doar vom include Schematic-urile i simbolurile necesare. Vom proceda n felul
urmtor:

vom copia cele 8 fiiere Schematic i cele 7 simboluri n folderul nostru, n cazul nostru numit
Baleiaj;

pentru a aduga fiierele dm click dreapta n panoul Sources alegem Add Source:

vom selecta cele 8 fiiere Schematic i dm click pe Open

ne va aprea fereastra de mai jos i apsm OK:

Fiierele sunt acum adugate n proiect.

Vom face un simbol i pentru decodificatorul BCD 7 segmente care va arta astfel:

Pasul 6 Crearea BlackBox-ului


Crem un nou fiier Schematic pe care l denumim BlackBox n care vom aduga simbolurile
pentru decodificatorul BCD 7 segmente (BCD4TO7), multiplexorul 16 la 4 (MUX16TO4),
decodificatorul 2 la 4 (SelDig), registrul de deplasare pe 4 bii cu ncrcare paralel (RDS16), un
numrtor pe 2 bii (modulo 4: CB2CE, care se gsete n Symbols->Categories ->Counter sau putem
s-l crem noi cum am nvat n unul din laboratoarele precedente) i un bloc Constant.

Dup ce am creat legturile, schema va arta astfel:

Cum ne-am obinuit i pentru aceast schem vom face un simbol care va arta astfel:

nainte s trecem la schema final, vom crea i un divizor de clock n vhdl.

Pasul 7 Crearea divizorului


Se d click dreapta n toolbarul Sources i se alege New Source. i acum, n loc de Schematic
alegem VHDL Module; mai departe procedm asemntor.
Codul VHDL pentru divizor este urmtorul:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY divizor_ent IS
PORT( clockin : n STD_LOGIC;
clockout1 : OUT STD_LOGIC;
clockout2 : OUT STD_LOGIC);
END divizor_ent;
ARCHITECTURE divizor_arch OF divizor_ent IS
BEGIN
PROCESS (clockin)
VARIABLE cnt1 : INTEGER := 0;
VARIABLE cnt2 : INTEGER := 0;
BEGIN
IF (clockin'EVENT and clockin='1') THEN

cnt1 := cnt1 + 1;
cnt2 := cnt2 + 1;
IF (cnt1 = 25000) THEN
clockout1 <= '1'; -- acest clock va avea o frecven de 1KHz
ELSIF (cnt1 = 50000) THEN
clockout1 <= '0';
cnt1 := 0;
END IF;
IF (cnt2 = 25000000) THEN
clockout2 <= '1'; ; -- acest clock va avea o frecven de 1Hz
ELSIF (cnt2 = 50000000) THEN
clockout2 <= '0';
cnt2 := 0;
END IF;
END IF;
END PROCESS;
END divizor_arch;

Acum putem trece la realizarea schemei finale.

Pasul 8 Crearea sistemului de afiare cu multiplexare n


timp pentru 4 cifre LED cu 7 segmente
Crem un fiier Schematic nou pe care l numim Baleiaj; vom aduga urmtoarele simboluri:

BlackBox
CB4CE (numrtor pe 4 bii (modulo 16) din Symbols->Categories->Counter)

divizor_ent
Constant

Schema final este urmtoarea:

Implementare FPGA a programului n


Schematic
Pentru implementare Schematic pe placa FPGA, procedm astfel:

selectm baleiaj.sch din toolbarul Sources for: Implementation;


verificm sintaxa dnd dublu click pe butonul Check Schematic.

n toolbarul Process dm dublu click pe Floorplan Area/IO/Logic Post-Synthesis pentru a


seta pinii.

n fereastra de mai jos ar trebui s se introduc valori n coloana Loc, corespunztoare la


locaia din fiecare I / O marker pe bord; valoarea BANK va fi introdus automat.

Acum, se conectez plcua FGPA la PC utiliznd cablul JTAG furnizat dup cum se arat n
figura de mai jos.

Cu placa FPGA alimentat se poate ncepe verificarea programului urmnd pai de mai jos:

Se pornete programul iMPACT prin dublu-clic pe Configure Target Device din


fereastra Processes (n cazul n care apare un avertisment spunnd c nu exist nici un
fiier de proiect iMPACT, se va face click pe OK) .

n cazul n care csua de dialog Configure Devices apare, se selecteaz Configure


devices using Boundary-Scan (JTAG) i Automatically connect to cable and
identify Boundary-Scan chain i se apas Finish.

Dup realizarea cu succes a testelor, cnd apare meniul selectai fiierul,se va alege
documentul generat mai devreme (ar trebui s existe doar unul dintre aceste fiiere n directorul
proiectului). Se selecteaz acel fiier i se apas Open. Pentru al doilea dispozitiv (Flash-ROM-ul de
pe plcu), se poate selecta Bypass, pentru c nu se folosete .

Configurarea se va ncheia cu o fereastr pentru a selecta proprietile de programare


dispozitiv. Ar trebui fie toate csuele nemarcate ca n figurile urmtoare:

Odat cu atribuirea fiierelor programului, se face click dreapta pe dispozitivul din stnga i se
selecteaz Program; acest lucru va dura cteva secunde, dup care ar trebui s apar mesajul:
"Program Succeeded".

n cazul n care mesajul afiat este Program failed vom verifica dac avem bifat opiunea
Use HIGHZ instead of BYPASS. Parcurgem urmtorii pai:

selectm din meniul EDIT opiunea Preferences

ne va aprea urmtoarea fereastr i vom alegem opiunea Configuration


Preferences

n fereastra aprut bifm Use HIGHZ instead of BYPASS i apsm butonul OK.

Se d din nou click dreapta pe dispozitivul din stnga i se selecteaz Program.

Implementarea n VHDL
Pasul 1- Crearea registrului de deplasare pe 4 bii cu
ncrcare paralel
Se va crea o nou surs de tip VHDL Module; n fereastra Sources dm click-dreapta i
selectm New Source:

Se introduce numele fiierului (registru), iar ca tip de surs se selecteaz VHDL Module:

Se apas Next, iar Next i apoi Finish.


Codul pentru registrul de deplasare pe 4 bii cu ncrcare paralel este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY RDS16_ent IS
PORT( LOAD : n STD_LOGIC;
RESET: n STD_LOGIC;
DATAIN : n STD_LOGIC_VECTOR(0 to 3);
M, N, P, R: BUFFER STD_LOGIC_VECTOR(0 to 3));
END RDS16_ent;
ARCHITECTURE RDS16_arch OF RDS16_ent IS
BEGIN
PROCESS (LOAD)
BEGIN
IF (RESET = '1') THEN
M <= "0000";
N <= "0000";
P <= "0000";
R <= "0000";
ELSIF (RISING_EDGE(LOAD)) THEN
M <= N;

N <= P;
P <= R;
R <= DATAIN;
END IF;
END PROCESS;
END RDS16_arch;

Pasul 2 Crearea multiplexorului 16 la 4


Se va crea o nou surs de tip VHDL Module pe care o numim mux. Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY mux16to4_ent IS
PORT( sel : n STD_LOGIC_VECTOR(0 to 1);
M, N, P, R : n STD_LOGIC_VECTOR(0 to 3);
DATA : OUT STD_LOGIC_VECTOR(0 to 3));
END;
ARCHITECTURE mux16to4_arch OF mux16to4_ent IS
BEGIN

WITH sel SELECT


DATA <=

M WHEN "00",
N WHEN "01",
P WHEN "10",
R WHEN "11",
"0000" WHEN OTHERS;

END mux16to4_arch;

Pasul 3 Crearea numrtorului pe 2 bii


Se va crea o nou surs de tip VHDL Module pe care o numim numarator. Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY num2biti_ent IS
PORT( CLK : n STD_LOGIC;
output : OUT STD_LOGIC_VECTOR(0 to 1));
END num2biti_ent;
ARCHITECTURE num2biti_arch OF num2biti_ent IS

SIGNAL count : STD_LOGIC_VECTOR(0 to 1) := "00";


BEGIN
PROCESS (CLK)
BEGIN
IF (RISING_EDGE(CLK)) THEN
count <= count + 1;
output <= count;
END IF;
END PROCESS;
END num2biti_arch;

Pasul 4 Crearea decodificatorului 2 la 4


Se va crea o nou surs de tip VHDL Module pe care o numim selector . Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY digsel_ent IS
PORT( sel : n STD_LOGIC_VECTOR(0 to 1);
digitsel: OUT STD_LOGIC_VECTOR(0 to 3));

END digsel_ent;
ARCHITECTURE digsel_arch OF digsel_ent IS
BEGIN
WITH sel SELECT
digitsel <= "0111" WHEN "00",
"1011" WHEN "01",
"1101" WHEN "10",
"1110" WHEN "11",
"1111" WHEN OTHERS;
END digsel_arch;

Pasul 5 Crearea decodificatorului BCD 7 segmente


Se va crea o nou surs de tip VHDL Module pe care o numim bcd . Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY bcd4to7_ent IS
PORT( input : n STD_LOGIC_VECTOR(0 to 3);
output : OUT STD_LOGIC_VECTOR(0 to 6));

END bcd4to7_ent;
ARCHITECTURE bcd4to7_arch OF bcd4to7_ent IS
BEGIN
WITH input SELECT
output <=
"0000001" WHEN "0000", -- 0
"1001111" WHEN "0001", -- 1
"0010010" WHEN "0010", -- 2
"0000110" WHEN "0011", -- 3
"1001100" WHEN "0100", -- 4
"0100100" WHEN "0101", -- 5
"0100000" WHEN "0110", -- 6
"0001111" WHEN "0111", -- 7
"0000000" WHEN "1000", -- 8
"0000100" WHEN "1001", -- 9
"0001000" WHEN "1010", -- A
"1100000" WHEN "1011", -- b
"0110001" WHEN "1100", -- C
"1000010" WHEN "1101", -- d
"0110000" WHEN "1110", -- E
"0111000" WHEN "1111",
"1111111" WHEN OTHERS;
END bcd4to7_arch;

Pasul 6 Crearea blackboxului


Se va crea o nou surs de tip VHDL Module pe care o numim blackbox .
n crearea blackboxului va trebui s introducem cele 5 fiiere vhdl pe care le-am creat. Acest
lucru se face cu ajutorul instruciunilor COMPONENT i PORT MAP.

COMPONENT se adaug n blocul ARCHITECTURE, nainte de BEGIN; se poate spune c


instruciunea COMPONENT este o declarare a unei entiti; n interiorul fiecrei instruciuni
COMPONENT se copiaz ce este n blocul ENTITY al fiecrui fiier pe care vrem sa-l adugm;
numele componentei va fi acelai ca al entitii.
PORT MAP realizeaz apelul acelor entiti; se folosete n blocul ARCHITECTURE, dup
BEGIN; primul cuvnt reprezint numele pe care vrem s-l dm noi acestei instruciuni, iar urmtorul
reprezint numele entitii pe care vrem s o mapm; urmeaz cuvintele cheie PORT MAP, iar n
parantez se pun parametrii cu care se face apelarea entitii. Dac modurile parametrilor cu care
apelm difer de modurile parametrilor din interiorul entitii, atunci va trebui s-i declarm ca
SIGNAL.

Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY blackbox_ent IS
PORT( CLOCK : n STD_LOGIC;
RESET : n STD_LOGIC;
LOAD : n STD_LOGIC;
DATA : n STD_LOGIC_VECTOR(0 to 3);
segmente : OUT STD_LOGIC_VECTOR(0 to 6);
digits : OUT STD_LOGIC_VECTOR(0 to 3));
END blackbox_ent;
ARCHITECTURE blackbox_arch OF blackbox_ent IS
COMPONENT bcd4to7_ent
PORT( input : n STD_LOGIC_VECTOR(0 to 3);
output : OUT STD_LOGIC_VECTOR(0 to 6));
END COMPONENT;
COMPONENT digsel_ent
PORT( sel : n STD_LOGIC_VECTOR(0 to 1);
digitsel: OUT STD_LOGIC_VECTOR(0 to 3));

END COMPONENT;
COMPONENT mux16to4_ent
PORT( sel : n STD_LOGIC_VECTOR(0 to 1);
M, N, P, R : n STD_LOGIC_VECTOR(0 to 3);
DATA : OUT STD_LOGIC_VECTOR(0 to 3));
END COMPONENT;
COMPONENT num2biti_ent
PORT( CLK : n STD_LOGIC;
output : OUT STD_LOGIC_VECTOR(0 to 1));
END COMPONENT;
COMPONENT RDS16_ent
PORT( LOAD : n STD_LOGIC; -- e un fel de CLK
RESET: n STD_LOGIC;
DATAIN : n STD_LOGIC_VECTOR(0 to 3);
M, N, P, R: BUFFER STD_LOGIC_VECTOR(0 to 3));
END COMPONENT;
SIGNAL M, N, P, R : STD_LOGIC_VECTOR(0 to 3);
SIGNAL sel : STD_LOGIC_VECTOR(0 to 1);
SIGNAL BCDDATA: STD_LOGIC_VECTOR(0 to 3);
BEGIN
registru: RDS16_ent PORT MAP(LOAD, RESET, DATA, M, N, P, R);
mux: mux16to4_ent PORT MAP(sel, M, N, P, R, BCDDATA);
numarator: num2biti_ent PORT MAP(CLOCK, sel);
selector: digsel_ent PORT MAP(sel, digits);
bcd: bcd4to7_ent PORT MAP(BCDDATA, segmente);
END blackbox_arch;

Pasul 7 Crearea divizorului de ceas


Se va crea o nou surs de tip VHDL Module pe care o numim divizor .
Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY divizor_ent IS
PORT( clockin : n STD_LOGIC;
clockout1 : OUT STD_LOGIC; -- pentru baleiaj
clockout2 : OUT STD_LOGIC); -- pentru numarator
END divizor_ent;
ARCHITECTURE divizor_arch OF divizor_ent IS
BEGIN

PROCESS (clockin)
VARIABLE cnt1 : INTEGER := 0;
VARIABLE cnt2 : INTEGER := 0;
BEGIN
IF (clockin'EVENT and clockin='1') THEN
cnt1 := cnt1 + 1;
cnt2 := cnt2 + 1;
IF (cnt1 = 25000) THEN
clockout1 <= '1';
ELSIF (cnt1 = 50000) THEN
clockout1 <= '0';
cnt1 := 0;
END IF;
IF (cnt2 = 25000000) THEN
clockout2 <= '1';
ELSIF (cnt2 = 50000000) THEN
clockout2 <= '0';
cnt2 := 0;
END IF;
END IF;
END PROCESS;
END divizor_arch;

Pasul 8 Crearea numrtorului pe 4 bii


Se va crea o nou surs de tip VHDL Module pe care o numim numarator4 .
Codul este:
---------------------------------------------------------------------------------library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY num4biti_ent IS
PORT( CLK : n STD_LOGIC;
RESET : n STD_LOGIC;
output : OUT STD_LOGIC_VECTOR(0 to 3));
END num4biti_ent;
ARCHITECTURE num4biti_arch OF num4biti_ent IS
SIGNAL count : STD_LOGIC_VECTOR(0 to 3) := "0000";
BEGIN
PROCESS (CLK)
BEGIN
IF (RESET = '1') THEN
count <= "0000";
ELSIF (RISING_EDGE(CLK)) THEN
count <= count + 1;
END IF;
output <= count;
END PROCESS;
END num4biti_arch;

Pasul 9 Crearea sistemului de afiare cu multiplexare n


timp pentru 4 cifre LED cu 7 segmente
Se va crea o nou surs de tip VHDL Module pe care o numim baleiaj .
Vom aduga componentele blackbox, numarator4 i divizor urmnd aceleai etape ca mai nainte.
Codul este:
library IEEE;
use IEEE.STD_LOGIC_1164.ALL;
use IEEE.STD_LOGIC_ARITH.ALL;
use IEEE.STD_LOGIC_UNSIGNED.ALL;
---- Uncomment the following library declaration if instantiating
---- any Xilinx primitives n this code.
--library UNISIM;
--use UNISIM.VComponents.all;
ENTITY baleiaj_ent IS
PORT( CLOCK : n STD_LOGIC;
RESET : n STD_LOGIC;
segmente : OUT STD_LOGIC_VECTOR(0 to 6);
digits : OUT STD_LOGIC_VECTOR(0 to 3));
END baleiaj_ent;
ARCHITECTURE baleiaj_arch OF baleiaj_ent IS
COMPONENT blackbox_ent
PORT( CLOCK : n STD_LOGIC;

RESET : n STD_LOGIC;
LOAD : n STD_LOGIC;
DATA : n STD_LOGIC_VECTOR(0 to 3);
segmente : OUT STD_LOGIC_VECTOR(0 to 6);
digits : OUT STD_LOGIC_VECTOR(0 to 3));
END COMPONENT;
COMPONENT divizor_ent
PORT( clockin : n STD_LOGIC;
clockout1 : OUT STD_LOGIC; -- pentru baleiaj
clockout2 : OUT STD_LOGIC); -- pentru numarator
END COMPONENT;
COMPONENT num4biti_ent
PORT( CLK : n STD_LOGIC;
RESET : n STD_LOGIC;
output : OUT STD_LOGIC_VECTOR(0 to 3));
END COMPONENT;
SIGNAL CLOCKHF, CLOCKLF : STD_LOGIC;
SIGNAL DATA : STD_LOGIC_VECTOR(0 to 3); -- DATA de la numarator 4 biti
BEGIN
divizor: divizor_ent PORT MAP(CLOCK, CLOCKHF, CLOCKLF);
blackbox: blackbox_ent PORT MAP(CLOCKHF, RESET, CLOCKLF, DATA, segmente, digits);
numarator: num4biti_ent PORT MAP(CLOCKLF, RESET, DATA);
END baleiaj_arch;

Implementare FPGA a programului n VHDL


Implementarea se face urmnd aceeai pai ca la implementarea pe placa FPGA pentru Schematic;
Pentru implementare pe placa FPGA din VHDL procedm astfel:

selectm baleiaj.vhd din toolbarul Sources for: Implementation;


verificm sintaxa dnd dublu click pe Check Syntax

n toolbarul Process dm dublu click pe Floorplan Aa/IO/Logic Post-Synthesis pentru a seta


pinii

n fereastra de mai jos ar trebui s se introduc valori n coloana Loc,


corespunztoare locaiei din fiecare I / O marker pe plac; valoarea BANK va fi
introdus automat.

Acum, se conectez plcua FGPA la PC utiliznd cablul JTAG furnizat dup cum se arat n
figura de mai jos.

Cu placa FPGA alimentat se poate ncepe verificarea programului urmnd pai de mai jos:
Se pornete programul iMPACT prin dublu-clic pe Configure Target Device din fereastra
Processes (n cazul n care apare un avertisment spunnd c nu exist nici un fiier de proiect
iMPACT, se va face clic pe OK) .

n cazul n care csua de dialog Configure Devices apare, se selecteaz Configure devices
using Boundary-Scan (JTAG) i Automatically connect to cable and identify Boundary-Scan
chain i se apas Finish.

Dup realizarea cu succes a testelor, cnd apare meniul selectai fiierul,se va alege
documentul generat mai devreme (ar trebui s existe doar unul dintre aceste fiiere n directorul
proiectului). Se selecteaz acel fiier i se apas Open. Pentru al doilea dispozitiv (Flash-ROM-ul de
pe plcu), se poate selecta Bypass, pentru c nu se folosete .

Configurarea se va ncheia cu o fereastr pentru a selecta proprietile de programare


dispozitiv. Ar trebui fie toate csuele nemarcate ca n figurile urmtoare:

Odat cu atribuirea fiierelor programului, se face click dreapta pe dispozitivul din stnga i se
selecteaz Program; acest lucru va dura cteva secunde, dup care ar trebui s apar mesajul:
"Program Succeeded".

n cazul n care mesajul afiat este Program failed vom verifica dac avem bifat opiunea
Use HIGHZ instead of BYPASS. Parcurgem urmtorii pai:

selectm din meniul EDIT opiunea Preferences

ne va aprea urmtoarea fereastr i vom alegem opiunea Configuration


Preferences

n fereastra aprut bifm Use HIGHZ instead of BYPASS i apsm butonul OK.

Se d din nou click dreapta pe dispozitivul din stnga i se selecteaz Program.


Astfel am ncheiat implemenarea pe plac FPGA att a programului fcut n Schematic ct i a
celui n cod VHDL.

S-ar putea să vă placă și