ĐỀ THI CUỐI KỲ
TRƯỜNG ĐẠI HỌC CNTT
KHOA KỸ THUẬT MÁY TÍNH
MÔN: KIẾN TRÚC MÁY TÍNH
Thời gian: 90 phút
Ghi chú: Được sử dụng tài liệu
Câu 1 (2 điểm)
a) Chuyển đổi mã assembly MIPS sang dạng mã máy MIPS: (1 điểm)
lw $s5, -28 ($s1)
sltiu $t1, $t2, 19
b) Chuyển dòng lệnh C dưới đây sang mã assembly của MIPS. Với các biến nguyên i, j được gán
lần lượt vào thanh ghi $s0, $s1; và địa chỉ nền của mảng số nguyên A được lưu trong thanh ghi
$s3. (1 điểm)
if (ielse A[i] = j;
Câu 2 (1 điểm)
Cho 2 số nguyên A và B trong hệ 10: A = 7, B = 3
Tính thương số và phần dư của A chia B theo cấu trúc phần cứng như trong hình 1, giả sử phép chia
làm việc trong phạm vi số không dấu 3 bits (chú ý: sinh viên phải trình bày rõ ràng nội dung của từng
thanh ghi qua từng bước)
Hình 1. (Dùng cho câu 2)
Câu 3 (2 điểm)
Cho 2 số thực dấu chấm động (floating-point) A và B trong hệ 10:
A = −0.0356125 x 102, B = 1125 x 10-2
a) Biểu diễn A và B theo chuẩn IEEE-754 độ chính xác đơn (1 điểm)
b) Giả sử A và B đang được biểu diễn theo IEEE-754 độ chính xác đơn, tính kết quả của A x B (chú
ý: trình bày rõ ràng từng bước tính toán và kết quả cuối cùng cũng phải được biểu diễn dưới dạng
IEEE-754 độ chính xác đơn) (1 điểm)
Câu 4 (2 điểm)
Cho đoạn chương trình sau được thực thi trong kiến trúc pipeline 5 tầng:
lw $s1, 4($s2)
add $s4, $s3, $s1
and $s5, $s4, $s1
Sử dụng lệnh nop để giải quyết nếu có xung đột dữ liệu (data hazard) trong hai trường hợp sau:
1
a. Không dùng kỹ thuật “forwarding” (1 điểm)
b. Dùng kỹ thuật “forwarding” (1 điểm)
Chú ý: Vẽ rõ ràng hình ảnh các chu kỳ pipeline khi đoạn lệnh trên thực thi
Câu 5 (3 điểm)
Cho một kiến trúc máy tính MIPS với datapath và tín hiệu điều khiển như hình 2
Đối với lệnh:
addi Rt, Rs, Imm (ý nghĩa Rt = Rs + Imm)
a) Những block nào sẽ cần sử dụng cho lệnh trên, block nào không cần sử dụng?
b) Cho biết giá trị của các tín hiệu điều khiển?
c) Những block nào có cho dữ liệu output nhưng dữ liệu này không sử dụng? Những block nào
không cho output?
d) Cho thời gian trễ như sau: I-Mem=400ps, Add=100ps, Mux=30ps, ALU=120ps, Regs=200ps, DMem=400ps, Control=100ps. Tính thời gian trễ lớn nhất cho lệnh trên
e) Nếu đổi lệnh trên thành “addi Rt, Rs, Rx, Imm” thì phải thay đổi hay thêm vào hình trên những
block nào?
Hình 2 (Dùng cho câu 4)
Xác nhận trưởng bộ môn
Giảng viên ra đề
2
Câu 1 (1,5 điểm)
Sinh viên muốn thực hiện lệnh if, phải biết tận dụng các lệnh rẽ nhánh được học (hoặc beq hoặc bne)
slt $t0, $s0, $s1
sll $t1, $s0, 2
add $t1, $t1, $s3
beq $t0, $zero, Else
sw $s0, 0($t1)
j Exit
Else: sw $s1, 0($t1)
Exit:
// if (i
//now $t1 holds the address of A[i] in D-mem
// A[i] = i
//A[i] = j
Câu 2 (1,5 điểm)
7(10) = 111(2)
3(10) = 11(2)
Step
Action
Quotient
Divisor
Remainder
0
Initial Vals
000
011 000
000 111
1
Rem = Rem – Div
000
011 000
101 111
Rem < 0, R= R + D, Q<<
000
011 000
000 111
Rshift Div
000
001 100
000 111
Rem = Rem – Div
000
001 100
111 011
Rem < 0, R=R + D, Q<<
000
001 100
000 111
Rshift Div
000
000 110
000 111
Rem = Rem – Div
000
000 110
000 001
Rem > 0, Q<<, Q0 = 1
001
000 110
000 001
Rshift Div
001
000 011
000 001
Rem = Rem – Div
001
000 010
111 110
Rem < 0, R=R + D, Q<<
010
000 010
000 001
Rshift Div
010
000 001
000 001
2
3
4
Kết quả: Thương số = 010(2) = 2(10); phần dư = 1
Câu 4 (2 điểm)
a. Không “forwarding” (1 điểm)
lw $s1, 4($s2)
nop
nop
add $s4, $s3, $s1
nop
nop
and $s5, $s4, $s1
Hình ảnh các chu kỳ pipeline khi đoạn lệnh trên thực thi:
lw $s1, 4($s2)
IF
ID
EX
MEM
WB
IF
ID
nop
nop
add $s4, $s3, $s1
EX
MEM
WB
IF
ID
nop
nop
and $s5, $s4, $s1
b. Có “forwarding” (1 điểm)
lw $s1, 4($s2)
nop
add $s4, $s3, $s1
and $s5, $s4, $s1
Hình ảnh các chu kỳ pipeline khi đoạn lệnh trên thực thi:
lw $s1, 4($s2)
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
WB
IF
ID
EX
MEM
nop
add $s4, $s3, $s1
and $s5, $s4, $s1
WB
EX
MEM
WB
Câu 5 (3 điểm)
addi Rt, Rs, Imm (ý nghĩa Rt = Rs + Imm)
a) Tất cả các block đều được sử dụng ngoài trừ Data memory (0,5đ)
b) Giá trị của các tín hiệu điều khiển? (0,5đ)
RegDst
0
Branch
0
MemRead
0
MemtoReg
0
ALUOp
MemWrite
0
ALUSrc
1
RegWrite
1
ALU cần thực hiện thao tác cộng.
Giá trị mà ALUOp nên nhận ở đây phụ thuộc vào thiết kế
của khối ALU Control (sao cho đảm bảo kết quả của ALU
Control ra tương ứng với thao tác cộng)
Nếu theo thiết kế trong sách tham khảo chính thì ALUOp
có thể nhận 2 giá trị 00 giống như lw hoăc sw cho lệnh addi
này.
c) (0,5đ)
- Những block có cho dữ liệu output nhưng dữ liệu này không sử dụng: Bộ cộng thứ 2 (bộ cộng
mà có một input qua khối shift_left_2 trước khi vào bộ cộng)
- Những block không cho output: Data memory
d) (0,5đ)
Thời gian trễ lớn nhất cho lệnh trên = I-Mem + Mux + Regs + Mux + ALU + Mux + Regs
= 400 + 30 + 200 + 30 + 120 + 30 + 200 = 1010 ps
Như mình đã thống nhất là ở đây có thêm Regs. Nhưng sẽ có một số sinh viên không chú ý
sẽ không thêm ở đây.
Vì đây là lần đầu, lỗi cũng do mình thống nhất trễ cho sinh viên, nên nếu sinh viên nào
không cộng ở đây mình cũng cho điểm full luôn được không mọi người?
e) “addi Rt, Rs, Rx, Imm” (ý nghĩa Rt = Rs + Rx + Imm) (1đ)
-
Việc cộng thưc hiện trên 3 toán hạng nên: hoặc sử dụng thêm 1 ALU hoặc chỉnh sửa lại ALU
đang có bằng cách đưa thêm một input thứ 3 vào (0.5 điểm)
Trường opcode (6 bits), 3 thanh ghi (mỗi thanh ghi 5 bits) số bits trống còn lại trong format
lệnh trên là 11 bits.
Vậy trường Imm có thể sử dụng bao nhiêu bits tùy vào thiết kế, nhưng không quá 11 bits này. Gọi
n là số bits cho trường Imm Khối Sign-extend hiện tại là mở rộng có dấu từ số tức thời 16 bits
thành 32 bits; vì vậy hoặc sử dụng thêm một khối Sign-extend với input là n bits hoặc chỉnh sửa
khối Sign-extend sao cho có thể nhận cả input 16 bits và n bits