Tài liệu sử dụng http://www.cs.cornell.edu/courses/cs3410/2011sp/faq/faq_pa1.html
tôi sẽ viết lại EX và tình trạng nguy hiểm MEM (giảm = 0 phần vì đơn giản!), Trước khi chúng ta sẽ mất trong tài khoản "dữ liệu tăng gấp đôi nguy hiểm" (quy tắc ban đầu):
EX Hazard
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd == ID/EX.RegisterRs) # =EX_h_Rs
) ForwardA = 10
if (EX/MEM.RegWrite and (EX/MEM.RegisterRd == ID/EX.RegisterRt) # =EX_h_Rt
) ForwardB = 10
tôi sẽ gọi điều kiện EX_h_Rs và EX_h_Rt để giữ công thức ngắn hơn
MEM Hazard (điều kiện ban đầu)
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd == ID/EX.RegisterRs)) ForwardA = 01
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd == ID/EX.RegisterRt)) ForwardB = 01
====
Và ví dụ của chúng tôi với hai loại rủi ro cùng một lúc, giữa (1 và 3) & (thứ 2 và thứ 3) cùng lúc:
add $1, $1, $2
add $1, $1, $3
add $1, $1, $4
hoặc (chu kỳ promlem được đánh dấu bằng **
trên và dưới)
**
add C+A -> A ... A
v ?
add B+A -> A
v
add C+ A -> A
**
Theo liên kết của tôi, sau khi tính đến đôi EX + MEM nguy hiểm: (! Không = 0 và sắp xếp lại các điều khoản boolean), quy tắc cập nhật của MEM Hazard:
Hãy rà soát lại các điều kiện chuyển tiếp cho MEM nguy hiểm để chăm sóc 'đúp' dữ liệu mối nguy hiểm
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd = ID/EX.RegisterRs) and
not (EX/MEM.RegWrite and (EX/MEM.RegisterRd == ID/EX.RegisterRs))
)
ForwardA = 01
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd = ID/EX.RegisterRt) and
not (EX/MEM.RegWrite and (EX/MEM.RegisterRd == ID/EX.RegisterRt))
)
ForwardB = 01
Hoặc cùng sử dụng kỷ lục ngắn EX_h_ *
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd = ID/EX.RegisterRs) and
not (EX_h_Rs)
)
ForwardA = 01
if (MEM/WB.RegWrite and (MEM/WB.RegisterRd = ID/EX.RegisterRt) and
not (EX_h_Rt)
)
ForwardB = 01
có nghĩa là:
Hãy thử chuyển tiếp từ MEM/WB sang EX; nếu không có chuyển tiếp vào cùng một toán hạng đầu vào từ thanh ghi đường dẫn EX/MEM.
Hoặc cùng một số
Đừng cố chuyển tiếp từ MEM/WB sang EX; nếu đã có chuyển tiếp kết quả gần đây hơn từ EX/MEM.
Tôi sẽ cố gắng để minh họa:
add C+A -> A A'
v? (forwarding to 3rd instruction)
A -> A''
v?
add C+A -> A
vậy, để được hướng dẫn thứ ba quy tắc ban đầu sẽ nói rằng Cả A'
từ lệnh đầu tiên và A''
từ hướng dẫn thứ hai nên được chuyển tiếp (nhưng MUX không thể được cho ăn từ hai nguồn tại một thời điểm duy nhất). Và sửa đổi điều kiện nguy hiểm MEM nói rằng không nên cố gắng chuyển tiếp A'
nếu có chuyển tiếp hoạt động A''
gần đây hơn.
Vì vậy; bản vẽ của bạn là đúng,sẽ có 2 nguy cơ EX chuyển tiếp; Nhưng không nên thử chuyển tiếp nguy hiểm MEM nếu đã có chuyển tiếp EX Hazard đang hoạt động.
PS, liên kết cuối cùng của tôi, http://www.cs.cornell.edu/courses/cs3410/2011sp/faq/faq_pa1.html nói điều gì đó về lỗi chính tả trong sách: "* Lưu ý rằng điều kiện chuyển tiếp cho MEM nguy hiểm trong sách giáo khoa trên trang 369 là WRONG! * "và tôi nghĩ nó có thể là về hình ảnh của bạn. – osgx
Đây rõ ràng là một lỗi trong cuốn sách (dấu ngoặc đơn không cân bằng, cho một). Thật kỳ lạ ấn bản gần đây nhất của cuốn sách (ấn bản lần thứ 4 được sửa đổi) cho biết thêm một kết thúc bị thiếu ' – Ilya