SLIDE1

Saturday, January 9, 2016

cách XĐ tín hiệu điều khiển từ khối "Control" - Datapath (KTMT)


** Tổng quan các lệnh cần xem xét:
(8 lệnh trong 3 nhóm chính của tập lệnh MIPS)

 § Nhóm lệnh tham khảo bộ nhớ (lw và sw):
Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Truy xuất bộ nhớ để đọc/ghi dữ liệu
 § Nhóm lệnh liên quan đến logic và số học (add, sub, AND, OR, và slt):
Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Ghi dữ liệu vào thanh ghi
 § Nhóm lệnh nhảy (Lệnh nhảy với điều kiện bằng beq):

Nạp lệnh > Đọc một/hai thanh ghi > Sử dụng ALU > Chuyển đến địa chỉ lệnh tiếp theo dựa trên kết quả so sánh

Giá trị các tính hiệu điều khiển từ khối “Control” sẽ như thế nào?
Khối control có các đường tín hiệu điều khiển: regdst,branch, memread, memwrite,memtoreg,ALUop, ALU src, regwrite
xét lệnh lw rt=rs+sign extend
+vì không có rd nên regdst =0
+lw sẽ load dữ liệu từ bộ nhớ và ghi dữ liệu đó và thanh ghi nên memread=1 và memwrite =1.
+ dữ liệu phải được ghi lại vào thanh ghi nên regwrite =1 và dữ liệu lấy từ D-mem nên memtoreg=1.
+ lw không phải là lệnh rẽ nhánh hay lệnh nhảy gì hết nên branch đương nhiên là =0
+ ALUsrc =1 vì dữ liệu thứ 2 được đưa vào ALU là sign-extend, dễ thấy, đường dữ liệu thứ nhất đưa vào ALU là thanh ghi đó, read data 1 đó
+ ALUop = add


nhìn hình minh họa cho đường dữ liệu ta cũng dễ thấy giá trị của các khối control đi ra, các giá trị điệu khiển hầu hết được đưa đến bộ MUX để cho phép đường này đi qua hay đường kia đi qua, tại hình ảnh có ghi rõ giá trị đầu nào của mux là 1, đầu nào là 0 nên cũng dễ dàng xá định được giá trị của control khi ta biết được đường đi datapath của lệnh. 

sau đây là hình ảnh của lệnh add rd=rs+rt
lệnh add sử dụng để rs,,rt,rd và không có signextend, nó chỉ cộng và ghi lên thanh ghi, không ddoogj chạm gì đến D-mem( truy xuất bộ nhớ) như lệnh lw cả và cũng không rẽ nhánh luôn, nên giá trị điều khiển của memread, memwrite, branch, ALUsrc đều =0
Tương tự đối lênh sw, sw không ghi lên thanh ghi mà nó chỉ lưu vào bộ nhớ thôi nhé, nên regwrite=0, còn lại tương tự như lw, quan sát hình mô tả đường đi datapath và so sánh với lệnh lw nhé.
và loại lệnh cần nhắc đến là lệnh bed rs,rt,branch address (rẻ nhánh có đk)
*chi tiết các loại lệnh, sử dụng rs,rt,rd hay signextend gì đó thì trong bảng MIPS có nêu rõ, nên khong cần bận tâm chổ này.
ở laoji lệnh này, ALU sẽ nạp dữ liệu từ 2 thanh ghi chứ không lấy từ sign extend, vì signextend lúc này là địa chỉ cần nhảy đến nếu điều đúng, ALU sẽ so sánh và đưa kết quả lên cổng AND với giá trị điều khiển 1 của control - branch, chỉ khi ALU trả về giá trị 1 thì mới đưa tín hiệu điều khiển =1 đến cho bộ mux của bộ Cộng lệnh nhảy và nhảy đến địa chỉ được nạp vào từ signextend. từ đó, khối D-mem tất nhiên không làm gì thì memread hay memwrite hay memtoreg, regwrite cũng vậy không liên liên quan đến lệnh này, do đó =0 tất., các giá trị còn lại, xác định qua hình rất dễ dàng