Professional Documents
Culture Documents
13-07-2014 SDY62 ExamPaper QA
13-07-2014 SDY62 ExamPaper QA
ΘΕΜΑΤΑ ΕΞΕΤΑΣΕΩΝ
ΘΕΜΑ Α:
1) Να γραφεί κώδικας σε συµβολική γλώσσα του ARM που να υπολογίζει το άθροισµα sum =
1+2+…+n.
(2 μονάδες)
2) ∆ίνεται ο παρακάτω κώδικας σε συµβολική γλώσσα του ARM. Να εξηγήσετε την διεργασία που
εκτελείται σε κάθε γραµµή του κώδικα και να βρείτε τη λειτουργία που εκτελεί, µε δεδοµένο ότι στον
καταχωρητή r1 αποθηκεύεται η µεταβλητή εισόδου, έστω x και στον καταχωρητή r0 αποθηκεύεται το
αποτέλεσµα.
(1 μονάδα)
ΛΥΣΗ
1) Έστω ότι στον r0 δίνεται η είσοδος της μεταβλητής n τότε ο κώδικας που περιγράφει τη
συνάρτηση είναι:
; r0 = input variable n
; r1 = output variable sum
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 ; έξοδος
ΘΕΜΑ Β:
Έστω ο κώδικας σε συµβολική γλώσσα του 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)
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 όπως φαίνεται
παρακάτω.
Για τη περίπτωση που θέλουµε να βρούµε το περιεχόµενο της άµεσα απεικονιζόµενης κρυφής µνήµης
µε οκτώ γραµµές (τις 000, 001, 010, 011, 100, 101, 110, 111) δεν έχουµε παρά να κάνουµε διαιρέσεις
των διευθύνσεων της κύριας µνήµης µε το οκτώ και ανάλογα µε το υπόλοιπο, να τοποθετούµε το
περιεχόµενο (δεδοµένο) της αντίστοιχης θέσης της κύριας µνήµης στο κατάλληλο µπλοκ της κρυφής
µνήµης. ∆ηλαδή αν βρούµε υπόλοιπο 0 θα τοποθετήσουµε στη γραµµή 000 το αντίστοιχο δεδοµένο
της κύριας µνήµης, αν βρούµε 1 θα τοποθετήσουµε στη γραµµή 001 το αντίστοιχο δεδοµένο της
κύριας µνήµης κ.ο.κ. Άρα τα περιεχόµενα της κρυφής µνήµης διαµορφώνονται όπως παρακάτω.
ΘΕΜΑ Γ:
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
BEGIN
Σελίδα 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
BEGIN
END adder4bit_rtl;
Σελίδα 6 από 6