Professional Documents
Culture Documents
- projektna dokumentacija -
Profesor: Student:
Vladimir KOVAČEVIĆ Miljan RADOVIĆ E8774
Asistent:
Mihajlo KATONA
SADRŽAJ:
3. Laboratorijski zadaci
3.1 Izvršavanje programa A = (B+C)+D
3.2 Dodavanje instrukcije JNEG
3.3 Dodavanje instrukcija SUBT, XOR, OR, AND, JPOS,
JZERO i ADDI
3.4 Dodavanje instrukcija SHL i SHR
3.5 Prikaz registra PC na led displeju
3.6 Dodavanje instrukcija IN i OUT
3.11 Proširivanje adrese smanjivanjem opkoda
3.12 Dodavanje nove memorije
3.13 Dodavanje instrukcija CALL i RETURN
3.14 Dodavanje instrukcija PUSH i POP
3.15 Spajanje svih instrukcija u jednu celinu
4. Dodaci
4.1 Dodatak A - VHDL kod procesora µP1
4.2 Dodatak B - Datoteka za inicijalizaciju memorije
4.3 Dodatak C - Kompletan spisak instrukcija procesora µP1
4.4 Dodatak D - Zavisnosti između signala
4.4.1 Takt - CLOCK
4.4.2 Resetovanje - RESET
4.4.3 Stanje - STATE
4.4.4 Programski brojač - PC
4.4.5 Instrukcioni registar - IR
4.4.6 Memorijski adresni registar - MAR
4.4.7 Memorijski registar podatak - MDR
4.4.8 Akumulatorski registar - AC
5. Skraćenice
6. Literatura
1 UPOZNAVANJE SA PROCESOROM
RAČUNARSKOG SISTEMA
1.1 Uvod
Procesor
Memorija U /I
PC IR
AC
MAR
Adresna magistrala
ALU MDR
Magistrala podataka
Upravljacka
jedinica
Opkod Adresa
15 87 0
Opkod opisuje operaciju, kao što je saberi ili oduzmi, koja će biti
izvršena od strane instrukcije. Obično instrukcija šalje jedan paket
podataka kroz ALU za izvršavanje ove operacije. Nižih 8 bita svake
instrukcije sadrži adresu memorije. U zavisnosti od vrednosti opkoda,
ova adresa može pokazivati na mesto gde se nalaze podaci ili na
mesto gde se nalazi druga instrukcija. Osnovne instrukcije procesora
µP1 su prikazane u tabeli 1.1.
Zahvatanje
sledece
instrukcije
Dekodiranje
instrukcije
Izvršav anje
instrukcije
1. MAR = PC
2. ćitanje memorije, MDR = vrednost instrukcije iz memorije
3. IR = MDR
4. PC = PC + 1
DEKODIRANJE
*MAR = IR
Citanje iz memorije
IZVRSAVANJE
Op kod =ADD Op kod=LOAD Op kod=STORE
MDR = AC
AC = AC + MDR AC = MDR
Pisanje u memoriju
ALU
registar AC 0000
0211
+1 PC 00 16
8
MAR 00
Memory:
00: 0211 10: 0000
01: 0012 11: 0004
02: 0110 12: 0003
03: 0303
MW='0 '
MDR 0211
IR 0211
ALU
ragistar AC 0004
0211
+1 PC 01
16
MAR 01
Memory:
00: 0211 10: 0000
01: 0012 11: 0004
02: 0110 12: 0003
03: 0303
MDR 0012
IR 0012
0012
ALU
registar AC 0004
8
+1 PC 02
MAR 01
Memory:
00: 0211 10: 0000
01: 0012 11: 0004
02: 0110 12: 0003
03: 0303
MDR 0012
1. AC = AC + MDR
2. MAR = PC*
3. prelazak na izvršavanje dobavljanja
IR 0012
0003 0004
ALU
0004
02
0007
registar AC 0004
0003
PC 02 16
8
02
16 MAR 12
Memory:
00: 0211 10: 0000
01: 0012 11: 0004
02: 0110 12: 0003
03: 0303
MDR 0003
3 LABORATORIJSKI ZADACI
3.1
Rešenje:
00 : 0210;
01 : 0011;
02 : 0012;
05 : 0305;
-- test podaci
10 : 027C;
11 : 0901;
12 : 0BE3;
13 : 0000;
END;
- Izvršavanje programa:
3.2
Rešenje:
- Izvršavanje programa:
Prvo učitavamo vrednost sa adrese 10 a to je 027C (IR = 0210) i
ubacujemo je u AC. Zatim proveravamo da li je AC manje od 0. Pošto
kod nas nije program se nastavlja dalje izvršavanjem preostalih
instrukcija (0212, 0111, 0304 u petlji). U principu, instrukcije skoka
(JPOS, JNEG, JZERO) u MAR i PC upisuju vrednost iz nižih 8 bita IR
čime postavljaju menjaju redosled izvršavanja programa. Menjaju tako
što postave PC na bilo koju adresu unutar programa a znamo da PC
određuje koja će instrukcija biti zahvaćena.
3.3
10: 0527
11: 0AC4
12: 08CB
13: 0000
SUBT:
- Test program:
00 : 0211
01 : 0510
02 : 0302
- Izvršavanje programa:
XOR:
- Test program:
00 : 0211
01 : 0610
02 : 0302
- Način XOR-ovanja:
XOR 0 1
0 0 1
1 1 0
ac4 = 101011000100
527 = 010100100111
-----------------
111111100011 = fe3
Kada su vrednosi iste tada je rezultat 0 u suprotnom 1.
OR:
- Test program:
00 : 0211
01 : 0710
02 : 0302
- Izvršavanje programa:
ac4 = 101011000100
527 = 010100100111
-----------------
111111100111 = fe7
Kada su pojavi 1 tada je 1, 0 je jedino kada su obe 0.
AND:
- Test program:
00 : 0211
01 : 0810
02 : 0302
- Izvršavanje programa:
- Način AND-ovanja:
AND 0 1
0 0 0
1 0 1
ac4 = 101011000100
527 = 010100100111
-----------------
000000000100 = 4
Kada su pojavi 0 tada je 0, 1 je jedino kada su obe 1.
JPOS:
Za proveru instrukcije koristićemo program iz zadatka 3.2 samo
što ćemo umesto 0404 uneti vrednost 0904.
- Test program:
00 : 0210
01 : 0904
02 : 0212
03 : 0111
04 : 0304
- Izvršavanje programa:
JZERO:
U slučaju MDR = 0
- Test program:
00 : 0213
01 : 0a04
02 : 0212
03 : 0111
04 : 0304
- Izvršavanje programa:
Sa lokacije 13 smo učitali vrednost 0000 i upisali je u AC. JZERO
proverava ovu vrednost i nakon što utvrdi da je jednaka nuli, skače na
adresu 04.
- Test program:
00 : 0211
01 : 0a04
02 : 0212
03 : 0111
04 : 0304
- Izvršavanje programa:
ADDI:
- Test program:
00 : 0210
01 : 0b11
02 : 0302
- Izvršavanje programa:
Prvo učitamo vrednost sa lokacije 10 u AC (527) a zatim na tu
vrednost (viših 8 bita) dodamo vrednost iz MAR (u našem slučaju 11) i
dobijamo konačno vrednost adresno proširenu - 1627.
3.4
Rešenje:
SHL:
- Test program:
00 : 0210
01 : 0c05
02 : 0302
- Izvršavanje programa:
SHR:
- Test program:
00 : 0210
01 : 0d03
02 : 0302
- Izvršavanje programa:
Prvo učitamo vrednost sa lokacije 10 u AC (527) a zatim tu vrednost
šiftujemo u desno za 3 mesta (vrednost iz MAR).
3.5
Pokrenite µP1 računar koristeći FLEX 10K20 čip na UP 1 ploči ili 10K70
na UP 1X. Koristite taster za takt i taster za reset. Sedmosegmentnim
dekoderom, prikažite vrednost registra PC u heksadecimalnom obliku
na sedmosegmentni displej FLEX-a. Pokrenite test program na ploči i
potvrdite valjanost vrednosti u registru PC prolaskom kroz program
koristeći takt taster.
Rešenje:
Rešenje:
6 17
12 7 23 18
13 24
11 8 21 19
9 14 20 25
3.11
Rešenje:
Rešenje:
3.13
Rešenje:
Rešenje:
3.15
Rešenje:
4. DODACI
LIBRARY IEEE;
USE IEEE.STD_LOGIC_1164.ALL;
USE IEEE.STD_LOGIC_ARITH.ALL;
USE IEEE.STD_LOGIC_UNSIGNED.ALL;
LIBRARY LPM;
USE LPM.LPM_COMPONENTS.ALL;
BEGIN
-- memorija
memory:LPM_RAM_DQ
GENERIC MAP (
LPM_WIDTHAD => 8,
LPM_OUTDATA => "UNREGISTERED",
LPM_INDATA => "REGISTERED",
LPM_ADDRESS_CONTROL => "UNREGISTERED",
LPM_FILE => "Program.mif",
LPM_WIDTH => 16
)
PORT MAP (
data => register_AC,
address => memory_address_register,
we => memory_write,
inclock => clock,
q => memory_data_register
);
PROCESS(clock, reset)
BEGIN
IF reset = '1' THEN
state <= reset_pc;
ELSIF clock'EVENT AND clock = '1' THEN
CASE state IS
-- resetovanje ***************************************************
WHEN reset_pc =>
program_counter <= "00000000";
memory_address_register <= "00000000";
register_AC <= "0000000000000000";
memory_write <= '0';
state <= fetch;
-- dobavljanje instrukcije*******************************************
WHEN fetch =>
instruction_register <= memory_data_register;
program_counter <= program_counter + 1;
memory_write <= '0';
state <= decode;
END CASE;
END IF;
END PROCESS;
END mP1_architecture;
WIDTH = 16;
DEPTH = 256;
ADDRESS_RADIX = HEX;
DATA_RADIX = HEX;
CONTENT BEGIN
[00..FF] : 0000;
00 : 0210;
01 : 0011;
02 : 0112;
03 : 0212;
04 : 0304;
10 : 5555;
11 : AAAA;
12 : 0000;
END;
5. Skraćenice
6 LITERATURA