Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (46.52 KB, 2 trang )
[CHIA SẺ] MÔN KTMT - CHƯƠNG IV - PIPELINED ^^
Đối với phần Pipelined trong KTMT, có 2 chú ý với kỹ thuật cho phép gửi vượt trước : Forwarding và ko
cho gửi Non - forwarding như sau
- Non - forwarding:
Khi có 2 lệnh ở các chu kỳ kế tiếp nhau sử dụng chung thanh ghi (1 lệnh đọc và 1 lệnh ghi) thì: Chỉ khi
lệnh trước nó tới công đoạn WB (nửa đầu WB đã dc ghi) thì lệnh tiếp theo dc phép thực thi ở công đoạn
ID (giải mã lệnh ở nửa sau ID)
=> Kết luận: chỉ cần chú ý đặt NOP sao cho WB của lệnh trước thẳng hàng với ID của lệnh kế tiếp (tham
khảo thêm hình)
- Forwarding: với các lệnh thuộc kiểu R-Format (add, sub...) thì EX của lệnh trước cần thẳng hàng với ID
của lệnh sau (đảm bảo EX sau khi cho KQ được truyền thẳng tới ALU lệnh sau nó), lệnh LW thì MEM của
lệnh trước thẳng hàng với ID của lệnh sau (đảm bảo sau khi đọc/ ghi DL ở công đoạn MEM xong mới dc
truyền xuống ALU của lệnh kế tiếp)
Chia sẻ trên bỏ qua các lệnh ss nhảy như beq (vì vướng điều kiện tiên đoán) ^^
Bạn nào có kinh nghiệm làm bài ở dạng này có thể cmt chia sẻ với mọi người nhé ^^
p/s: lệnh SW ít xảy ra do theo trình tự code: lw để load DL từ ô nhớ ra thanh ghi, thực thi bằng lệnh add,
sub... và cuối cùng lưu lại giá trị của thanh ghi này xuống bộ nhớ => sw đã là lệnh cuối và ko lệnh nào
thực thi sau nó nữa ^^
TÓM LẠI NHỚ NHƯ VẦY: Giải quyết xung đột:
-
Non – Forwarding: thêm 2 nop ở giữa 2 lệnh
(thêm 2 nop, vẽ hình là WB lệnh trước tự thẳng hàng ID lệnh sau thôi )
Chu kì
Lệnh 1
Nop
Nop
Lệnh 2
-