Documente Academic
Documente Profesional
Documente Cultură
Documentație Agenda Birou
Documentație Agenda Birou
Titlul lucrării:
AGENDĂ DE BIROU
2021
CUPRINS
1. Cerința proiectului
2. Cutia neagră
3. Proiectare și componete
4. Implementarea în Active-HDL
4.1 Memoria RAM
4.1.1 Entitatea
4.1.2 Arhitectura
4.2Agenda
4.2.1 Entitatea
4.2.2 Arhitectura
5. Interfața cu exteriorul I/O
6. Justificarea soluției alese
7. Instrucțiuni de utilizare
8. Posibilități de dezvoltare ulterioară
9. Bibliografie
2021
1. CERINȚA PROIECTULUI
Să se proiecteze o agendă de birou care să afișeze secunda, minutul, ora, ziua, luna, anul și
temperatura ambientală în grade Celsius. De asemenea, agenda va fi prevazută cu o alarmă
asociată unei anumite ore și minut.
2. CUTIA NEAGRĂ
2021
3. PROIECTARE ȘI COMPONENTE
Cu scopul de a determina pe ieșiri secunde, minute, ore, zile, luni și ani este nevoie de un
generator de ceas care va număra frontul ascendent al intrării CLK a agendei (va aduna 1
la fiecare front ascendent). Se cunoaște și se va folosi faptul că 1000000000 ns este
echivalentul unei secunde. În momentul în care s-a atins valoarea respectivă avem 1 s.
Mai departe, se vor număra secunde cu scopul de a determina minute. La 60 de secunde
se va număra 1 minut iar contorul pentru secunde va porni de la 0 din nou. În același fel
se întâmplă și cu minutele ( 60 minute=1 ora, când se ajunge la 60 minutele încep din nou
de la 0 ), orele ( 24 ore =1 zi, când se ajunge la 24 orele încep din nou de la 0), zilele ( 30
zile=1 lună, când se ajunge la 30 zilele se resetează la 1) și lunile (12 luni=1 an, valoarea
la care se va reseta fiind 1). Valoarea maximă pentru ani am ales să fie 2500, valoarea de
reset fiind 2000.
În ceea ce privește temperatura ambientală, aceasta va fi extrasă dintr-o memorie RAM
(de 24 ) care stochează temperatura în grade Celsius la fiecare oră din zi.
Alarma asociată orei și minutului este un semnal care se va activa (va avea valoarea 1)
când se detectează minutul ALARMA_MINUT (intrare) și respectiv ora
ALARMA_ORA (intrare).
Agenda este prevăzută cu o intrare de reset (RST) care în momentul în care este activată
cu 1 aduce agenda în starea sa inițială, adică secundele, minutele și orele la valoarea 0,
zilele și lunile la valoarea 1, respectiv anul la valoarea 2000.
2021
4. IMPLEMENAREA ÎN ACTIVE-HDL
Menționez că librăriile folosite în cadrul proiectului sunt library ieee, ieee.std_logic_1164.all,
IEEE.STD_LOGIC_ARITH.ALL, IEEE.STD_LOGIC_UNSIGNED.ALL.
4.1MEMORIA RAM
4.1.1 ENTITATEA
entity MEMORIE_ROM_TEMPERATURA is
port (
A_ROM: in integer range 0 to 23;
CS_ROM: in bit;
D_ROM: out integer
);
end MEMORIE_ROM_TEMPERATURA;
Intrarea memoriei ROM (A_ROM) este un întreg care poate lua valori între 0 și 23,
valori corespunzătoare orei. CS_ROM este intrarea de activare iar D_ROM ieșirea care
corespunde temperaturii în grade Celsius la o anumită oră.
4.1.2 ARHITECTURA
2021
when 6 => D_ROM <= 6;
when 7 => D_ROM <= 8;
end temperatura_pe_ora;
2021
4.2AGENDA
4.2.1 ENTITATEA
entity agenda is
port(
CLK: in bit;
RST: in bit;
ALARMA_ORA: in integer range 0 to 23;
ALARMA_MINUT: in integer range 0 to 59;
an: out std_logic_vector (11 downto 0);
luna: out std_logic_vector (3 downto 0);
ziua: out std_logic_vector (4 downto 0);
ora: out std_logic_vector(4 downto 0);
minut: out std_logic_vector (5 downto 0);
secunda: out std_logic_vector (5 downto 0);
temperatura: out integer;
ALARMA: out bit
);
end agenda;
Agenda are ca intrări CLK (intrarea de tact), RST (intrarea de reset, activă pe 1), ALARMA_ORA
și ALARMA_MINUT (intrări de tip întreg între 0 și 23 respectiv 0 și 59, numere reprezentând ora
și minutul la care se dorește activarea alarmei). Ieșirile an, luna, ziua, ora, minut și secunda sunt
de tipul STD_LOGIC_VECTOR având lungime vectorului în funcție de întregul cel mai mare
transformat în binar (2500 în binar este un șir de lungime 12, 30 în binar este un șir de lungime 4
etc). Ieșirea temperatura este un întreg care va lua valori la fiecare oră din memoria RAM
definită anterior. ALARMA se activează în momentul în care ora și minutul detectat este egal cu
ieșirile ALARMA_ORA și ALARMA_MINUT.
2021
4.2.2 ARHITECTURA
Voi începe prezentarea arhitecturii agendei prin explicarea părții de declarații din cadrul
acesteia, respective componenta și semnalele intermediare.
component MEMORIE_ROM_TEMPERATURA is
port (
A_ROM: in integer range 0 to 23;
CS_ROM: in bit;
D_ROM: out integer
);
end component;
2021
Arhitectura agendei este alcătuite din 2 procese, fiecare având un scop bine definit și
folosind semnalele anterioare
În cadrul acestui process este generat practic un nou semnal de tact și anume clk_start.
Acesta în momentul declarării sale în cadrul arhitecturii ia valoarea 1. Când intrarea
agendei CLK este pe frontul ascendent, contorul count se incrementează. Dacă s-a
ajuns cu contorul la 50000000 clk_start va lua valoarea s-a opusă (dacă era 0 va
deveni 1 și invers) iar contorul count va reîncepe numărătoarea de la 1. Valoarea de
50000000 a fost aleasă deoarece simularea va rula cu intrarea CLK la o
frecvență de 100 MHz deci o durată de 10 ns între fronturile ascendente, motiv
pentru care ar trebui să se numere până la 100000000 (100000000*10 ns=1 s).
Deoarece în procesul al doilea se numără secunda în momentul detectării frontului
ascendent al clk_start valoarea acestui semnal trebuie schimbată de 2 ori ( din 1 în 0 o
data la 50000000 ns și încă o data din 0 în 1 tot la 50000000 ns pentru a
genera un front ascendent pe clk_start).
2021
Al doilea process
process (clk_start, RST)
begin
if (RST ='0') then
if (rising_edge(clk_start)) then
if (sec_t = 59) then
sec_t <= 0;
if (min_t = 59) then
min_t <= 0;
if (ora_t = 23) then
ora_t <= 0;
if(ziua_t = 30) then
ziua_t <= 1;
if(luna_t = 12) then
luna_t <= 1;
if(an_t=2500) then
an_t <= 2000;
else
an_t <= an_t+1;
end if;
else
luna_t <= luna_t+1;
end if;
else
ziua_t <= ziua_t + 1;
end if;
2021
else
ora_t <= ora_t + 1;
end if;
else
min_t <= min_t + 1;
end if;
else
sec_t <= sec_t + 1;
end if;
end if;
else
sec_t <= 0;
min_t <= 0;
ora_t <= 0;
ziua_t <= 1;
luna_t <= 1;
an_t <= 2000;
end if;
2021
care RST are valoarea 0 și este detectat un front ascendent al semnalului clk_start (1
secundă)
Atribuiri finale
c1: MEMORIE_ROM_TEMPERATURA port map(ora_t, '1', temperatura);
secunda <= conv_std_logic_vector(sec_t, 6);
minut <= conv_std_logic_vector(min_t, 6);
ora <= conv_std_logic_vector(ora_t, 5);
ziua <= conv_std_logic_vector(ziua_t, 5);
luna <= conv_std_logic_vector(luna_t, 4);
an <= conv_std_logic_vector(an_t, 12);
2021
5. INTERFAȚA CU EXTERIORUL I/O
INTRĂRI (I)
IEȘIRI (O)
an- semnal out de tip STD_LOGIC_VECTOR cu lungimea 12
luna- semnal out de tip STD_LOGIC_VECTOR cu lungimea 4
ziua- semnal out de tip STD_LOGIC_VECTOR cu lungimea 5
ora- semnal out de tip STD_LOGIC_VECTOR cu lungimea 5
minutul- semnal out de tip STD_LOGIC_VECTOR cu lungimea 6
secunda- semnal out de tip STD_LOGIC_VECTOR cu lungimea 6
temperatura- semnal out de tip integer
ALARMA- semnal out de tip BIT, are valoarea 1 când ora și minutul sunt egale
cu valorile date pe intrările ALARMA_ORA respectiv ALARMA_MINUT și
valoarea în caz contrar.
2021
6. JUSTIFICAREA SOLUȚIEI ALESE
Am ales să implementez acest proiect în modul prezentat anterior deoarece sunt de părere
că este o metodă cât se poate de simplă și logică în care este descrisă funcționarea unei
agende de birou de tipul celei cerute. Memoria RAM folosită facilitează într-un mod
elegant extragerea datelor dorite și determinarea temperaturii. Generatorul de ceas
detectează secunda prin schimbările produse pe semnalul clk_start formând fronturile
necesare. După detectarea secundei totul ține de incrementarea în cascadă a tuturor
semnalelor intermediare folosite în modul descries anterior.
7. INSTRUCȚIUNI DE UTILIZARE
2021
6. Se apasă butonul “Run for” din meniu și se urmăresc rezulatele opținute pe ieșiri.
Agenda de birou pe care am realizat-o este una care permite doar resetarea datelor la valoriile
inițiale. Acest lucru este realizat în momentul în care se activează intrarea RST.
Pentru a dezvolta proiectul este posibil adăugarea unei opțiuni de setare a secundei, minutului,
orei, zilei, lunii și anului la anumite valori date de utilizator.
Această îmbunătățire constă în modificarea entității agendei astefl încât să avem o intrare SET
care atunci când este activată să determine agenda să atribuie valorile date de utilizator. Sunt
necesare de asemenea și alte 6 intrări pentru a oferi posibilitatea de introducere de date. Se poate
adăuga și o opțiune de resetare la valorile introduse de utilizator. Acesta ar fi cazul în care
intrarea RST ar fi activă în același timp cu intrarea SET (asta pentru a crea o prioritate în
momentul în care sunt active ambele intrări).
Se mai pot adăuga multiple alarme asociate chiar cu data (ziua, luna, anul), un fel de marcare de
eveniment. Pentru această opțiune este nevoie de modificarea entității astfel încât să se ofere
utilizatorului posibilitatea să adauge data evenimentului pentru care dorește alarma dar și încă o
ieșire care să marcheze detectarea datei respective.
2021
9. BIBLIOGRAFIE
2021
2021