Open main menu
Home
Random
Recent changes
Special pages
Community portal
Preferences
About Wikipedia
Disclaimers
Incubator escapee wiki
Search
User menu
Talk
Dark mode
Contributions
Create account
Log in
Editing
Hazard (computer architecture)
(section)
Warning:
You are not logged in. Your IP address will be publicly visible if you make any edits. If you
log in
or
create an account
, your edits will be attributed to your username, along with other benefits.
Anti-spam check. Do
not
fill this in!
====Examples==== : ''In the following examples, computed values are in '''bold''', while Register numbers are not.'' For example, to write the value 3 to register 1, (which already contains a 6), and then add 7 to register 1 and store the result in register 2, i.e.: i0: R1 = '''6''' i1: R1 = '''3''' i2: R2 = R1 + '''7''' = '''10''' Following execution, register 2 should contain the value '''10'''. However, if i1 (write '''3''' to register 1) does not fully exit the pipeline before i2 starts executing, it means that R1 does not contain the value '''3''' when i2 performs its addition. In such an event, i2 adds '''7''' to the old value of register 1 ('''6'''), and so register 2 contains '''13''' instead, i.e.: i0: R1 = '''6''' i2: R2 = R1 + '''7''' = '''13''' i1: R1 = '''3''' This error occurs because i2 reads Register 1 before i1 has committed/stored the result of its write operation to Register 1. So when i2 is reading the contents of Register 1, register 1 still contains '''6''', ''not'' '''3'''. Forwarding (described below) helps correct such errors by depending on the fact that the output of i1 (which is '''3''') can be used by subsequent instructions ''before'' the value '''3''' is committed to/stored in Register 1. Forwarding applied to the example means that ''there is no wait to commit/store the output of i1 in Register 1 (in this example, the output is '''3''') before making that output available to the subsequent instruction (in this case, i2).'' The effect is that i2 uses the correct (the more recent) value of Register 1: the commit/store was made immediately and not pipelined. With forwarding enabled, the ''Instruction Decode/Execution'' (ID/EX) stage of the pipeline now has two inputs: the value read from the register specified (in this example, the value '''6''' from Register 1), and the new value of Register 1 (in this example, this value is '''3''') which is sent from the next stage ''Instruction Execute/Memory Access'' (EX/MEM). Added control logic is used to determine which input to use.
Edit summary
(Briefly describe your changes)
By publishing changes, you agree to the
Terms of Use
, and you irrevocably agree to release your contribution under the
CC BY-SA 4.0 License
and the
GFDL
. You agree that a hyperlink or URL is sufficient attribution under the Creative Commons license.
Cancel
Editing help
(opens in new window)