You are on page 1of 6

ΕΛΛΗΝΙΚΟ ΑΝΟΙΚΤΟ ΠΑΝΕΠΙΣΤΗΜΙΟ

ΣΧΟΛΗ ΘΕΤΙΚΩΝ ΕΠΙΣΤΗΜΩΝ ΚΑΙ ΤΕΧΝΟΛΟΓΙΑΣ


ΠΡΟΓΡΑΜΜΑ ΜΕΤΑΠΤΥΧΙΑΚΩΝ ΣΠΟΥΔΩΝ «ΤΕΧΝΟΛΟΓΙΑ ΥΛΙΚΟΥ ΚΑΙ ΛΟΓΙΣΜΙΚΟΥ:
ΣΧΕΔΙΑΣΗ ΚΑΙ ΑΝΑΠΤΥΞΗ ΔΙΑΧΥΤΩΝ ΣΥΣΤΗΜΑΤΩΝ ΥΠΟΛΟΓΙΣΜΟΥ (ΣΔΥ)»
Θεματική Ενότητα ΣΔΥ 62 – ΕΝΣΩΜΑΤΩΜΕΝΑ ΣΥΣΤΗΜΑΤΑ
Ακαδημαϊκό Έτος 2013 – 2014
Ημερομηνία Εξέτασης Κυριακή 13.7.2014
Ώρα Έναρξης Εξέτασης 13:30
Ώρα Λήξης Εξέτασης 16:30
Διάρκεια Εξέτασης 3 Ώρες

ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ

Ονομ/μο – ΑΜ Φοιτητή: .....................................................................................................................................................

ΘΕΜΑ Α:
1) Να γραφεί κώδικας σε συµβολική γλώσσα του ARM που να υπολογίζει το άθροισµα sum =
1+2+…+n.
(2 μονάδες)
2) ∆ίνεται ο παρακάτω κώδικας σε συµβολική γλώσσα του ARM. Να εξηγήσετε την διεργασία που
εκτελείται σε κάθε γραµµή του κώδικα και να βρείτε τη λειτουργία που εκτελεί, µε δεδοµένο ότι στον
καταχωρητή r1 αποθηκεύεται η µεταβλητή εισόδου, έστω x και στον καταχωρητή r0 αποθηκεύεται το
αποτέλεσµα.

start MUL r0, r1, r1


MOV r2, #4
MUL r0, r2, r0
MOV r2, #3
MUL r2, r1, r2
ADD r0, r0, r2
stop B stop

(1 μονάδα)

ΛΥΣΗ
1) Έστω ότι στον r0 δίνεται η είσοδος της μεταβλητής n τότε ο κώδικας που περιγράφει τη
συνάρτηση είναι:

; r0 = input variable n
; r1 = output variable sum

MOV r1,#0 ; Θέσε sum = 0


sum_loop
ADD r1,r1,r0 ; Θέσε sum = sum+n
SUB r0,r0,#1 ; Θέσε n = n-1
BNE sum_loop
sum_rtn
MOV r0,r1 ; Όρισε την έξοδο με το αποτέλεσμα
END

2)
Σελίδα 1 από 6
start MUL r0, r1, r1 ; αποτέλεσµα  x * x
MOV r2, #4 ; r24 (έστω ο r2 αποθηκεύει προσωρινά, tmp, tmp  4)
MUL r0, r2, r0 ; αποτέλεσµα  4 * x * x
MOV r2, #3 ; r23 (έστω ο r2 αποθηκεύει προσωρινά, tmp, tmp  3)
MUL r2, r1, r2 ; r2 x * tmp (ή tmp  x * tmp)
ADD r0, r0, r2 ; αποτέλεσµα  αποτέλεσµα + tmp
stop B stop ; έξοδος

Η λειτουργία που εκτελείται ο κώδικας είναι ο υπολογισμός του πολυωνύμου 4x2+3x.

ΘΕΜΑ Β:
Έστω ο κώδικας σε συµβολική γλώσσα του ARM που υλοποιεί ένα φίλτρο FIR.

MOV r0,#0
ADR r2,N
LDR r1,[r2]
MOV r2,#0
ADR r3,c
ADR r5,x

loop
LDR r4,[r3], #4
LDR r6,[r5], #4
MLA r2, r4, r6, r2
ADD r0,r0,#1
CMP r0,r1
BLT loop

1) Να εξηγήσετε την διεργασία που εκτελείται σε κάθε γραµµή του κώδικα.


(1,5 μονάδες)
2) Έστω ότι κάθε εντολή του κώδικα εκτελείται ακριβώς µια φορά. Να δώσετε τα περιεχόµενα της
κρυφής µνήµης εντολών για τον τρόπο διευθετήσεων τύπου Άµεσης Απεικονιζόµενης Κρυφής
Μνήµης µε οκτώ γραµµές, υποθέτοντας ότι κάθε γραµµή κρατά µια εντολή ARM.
(2,5 μονάδες)

ΛΥΣΗ
1)
MOV r0,#0 ; Θέσε τιµή 0 στον r0
ADR r2,N ; Φόρτωσε στον r2 τη διεύθυνση που βρίσκεται το Ν
LDR r1,[r2] ; Φόρτωσε στον r1 την τιµή του Ν
MOV r2,#0 ; Θέσε τιµή 0 στον r2
ADR r3,c ; Πάρε διεύθυνση για το c
ADR r5,x ; Πάρε διεύθυνση για το x

loop
LDR r4,[r3], #4 ; Φόρτωσε στον r4 το περιεχόµενο της διεύθυνσης του c αυξηµένη κατά 4
LDR r6,[r5], #4 ; Φόρτωσε στον r5 το περιεχόµενο της διεύθυνσης του x αυξηµένη κατά 4
MLA r2, r4, r6, r2 ; Υπολόγισε το c[i] * x [i] + r2
ADD r0,r0,#1 ; Αύξησε κατά 1 τη τιµή του r0
CMP r0,r1 ; Σύγκρινε τον r0 µε το Ν
BLT loop ; Αν r0 < N συνέχισε

Σελίδα 2 από 6
2) Το πρόγραµµα έχει αποθηκευτεί στη κύρια µνήµη ξεκινώντας από τη διεύθυνση 0 όπως φαίνεται
παρακάτω.

Διεύθυνση στο δεκαδικό Διεύθυνση στο δυαδικό Πρόγραμμα


0 0000 MOV r0,#0
1 0001 ADR r2,N
2 0010 LDR r1,[r2]
3 0011 MOV r2,#0
4 0100 ADR r3,c
5 0101 ADR r5,x
6 0110 LDR r4,[r3], #4
7 0111 LDR r6,[r5], #4
8 1000 MLA r2, r4, r6, r2
9 1001 ADD r0,r0,#1
10 1010 CMP r0,r1
11 1011 BLT loop

Για τη περίπτωση που θέλουµε να βρούµε το περιεχόµενο της άµεσα απεικονιζόµενης κρυφής µνήµης
µε οκτώ γραµµές (τις 000, 001, 010, 011, 100, 101, 110, 111) δεν έχουµε παρά να κάνουµε διαιρέσεις
των διευθύνσεων της κύριας µνήµης µε το οκτώ και ανάλογα µε το υπόλοιπο, να τοποθετούµε το
περιεχόµενο (δεδοµένο) της αντίστοιχης θέσης της κύριας µνήµης στο κατάλληλο µπλοκ της κρυφής
µνήµης. ∆ηλαδή αν βρούµε υπόλοιπο 0 θα τοποθετήσουµε στη γραµµή 000 το αντίστοιχο δεδοµένο
της κύριας µνήµης, αν βρούµε 1 θα τοποθετήσουµε στη γραµµή 001 το αντίστοιχο δεδοµένο της
κύριας µνήµης κ.ο.κ. Άρα τα περιεχόµενα της κρυφής µνήµης διαµορφώνονται όπως παρακάτω.

Ετικέτα Μπλοκ Δεδομένα


0 000 MOV r0,#0
0 001 ADR r2,N
0 010 LDR r1,[r2]
0 011 MOV r2,#0
0 100 ADR r3,c
0 101 ADR r5,x
0 110 LDR r4,[r3], #4
0 111 LDR r6,[r5], #4
1 000 MLA r2, r4, r6, r2
1 001 ADD r0,r0,#1
1 010 CMP r0,r1
1 011 BLT loop

ΘΕΜΑ Γ:
1) Να γράψετε τον κώδικα VHDL του πλήρη αθροιστή του παρακάτω σχήματος.

Σελίδα 3 από 6
(1 μονάδα)
2) Να γράψετε τον κώδικα VHDL του αθροιστή παράκαµψης κρατουµένου το κύκλωµά του οποίου
φαίνεται στο παρακάτω σχήµα.

(2 μονάδες)

ΛΥΣΗ

1) Με δεδοµένο τα εσωτερικά σήµατα του παρακάτω σχήµατος ο κώδικας VHDL του αθροιστή του
1-bit είναι:

----------------------------------------------
LIBRARY ieee;
USE ieee.std_logic_1164.all;

ENTITY adder1bit IS
PORT (A, B: IN STD_LOGIC;
Ci: IN STD_LOGIC;
S: OUT STD_LOGIC;
Cout: OUT STD_LOGIC);
END adder1bit;
------------------------------------------------
ARCHITECTURE adder1bit_rtl OF adder1bit IS

SIGNAL xor1_out, and1_out, and2_out, and3_out : STD_LOGIC;

BEGIN

xor1_out <= Β XOR Ci;


and1_out <= B AND Ci;
and2_out <= A AND B;
and3_out <= A AND Ci;

S <= xor1_out XOR A;

Σελίδα 4 από 6
Cout <= and1_out OR and2_out OR and3_out;

END adder1bit_rtl;
2) Για τον αθροιστή παράκαµψης κρατουµένου απαιτείται ένας πολυπλέκτης 2 σε 1 του 1-bit που ο
κώδικάς του είναι ο παρακάτω:

----------------------------------------------
LIBRARY Ieee;
USE Ieee.std_logic_1164.all;

ENTITY mux is
PORT(in1, in2 : In std_logic;
sel : In std_logic;
output : Out std_logic);
END mux;
----------------------------------------------
ARCHITECTURE behavioral OF mux IS
BEGIN

PROCESS(sel,in1,in2)
BEGIN

Case sel is
when '0' =>
output<=in1;
when others =>
output<=in2;
End case;

END process;
END behavioral;

Επίσης, µε δεδοµένο τα εσωτερικά σήµατα του παρακάτω σχήµατος ο κώδικας VHDL του αθροιστή
παράκαµψης κρατουµένου των 4-bit είναι:

LIBRARY Ieee;
USE ieee.std_logic_1164.all;

Σελίδα 5 από 6
ENTITY adder4bit IS
PORT (A, B: IN STD_LOGIC_VECTOR(3 downto 0);
Cin: IN STD_LOGIC;
S: OUT STD_LOGIC_VECTOR(3 downto 0);
Cout: OUT STD_LOGIC);
END adder4bit;
------------------------------------------------
ARCHITECTURE adder4bit_rtl OF adder4bit IS

COMPONENT adder1bit -- Χρήση του πλήρη αθροιστή του 1-bit


PORT (A, B: IN STD_LOGIC;
Ci: IN STD_LOGIC;
S: OUT STD_LOGIC;
Cout: OUT STD_LOGIC);
END COMPONENT;

COMPONENT mux -- Χρήση του πολυπλέκτη 2 σε 1


PORT(in1, in2 : In std_logic;
sel : In std_logic;
output : Out std_logic);
END COMPONENT;

SIGNAL xor1_out, xor2_out, xor3_out, xor4_out,


and_out, c1, c2, c3, c4: STD_LOGIC; -- δήλωση των εσωτερικών σηµάτων

BEGIN

xor1_out <= A(3) XOR B(3);


xor2_out <= A(2) XOR B(2);
xor3_out <= A(1) XOR B(1);
xor4_out <= A(0) XOR B(0);
and_out <= xor1_out AND xor2_out AND xor3_out AND xor4_out;

Block0: adder1bit port map (A=>A(0),B=>B(0),Ci=>Cin,S=>S(0),Cout=>c1); --∆ήλωση του


δεξιότερου αθροιστή του 1-bit
Block1: adder1bit port map (A=>A(1),B=>B(1),Ci=>c1,S=>S(1), Cout =>c2);
Block2: adder1bit port map (A=>A(2),B=>B(2),Ci=>c2,S=>S(2), Cout =>c3);
Block3: adder1bit port map (A=>A(3),B=>B(3),Ci=>c3,S=>S(3), Cout =>c4); --∆ήλωση του
αριστερότερου αθροιστή του 1-bit

Block4: mux port map (in1=>c4, in2=>Cin, sel=>and_out, output=>Cout);

END adder4bit_rtl;

Σελίδα 6 από 6

You might also like