# When & Which

### **When & Which?**

#### **Comparison**

| Feature | `for` Loop | `while` Loop | `for-generate` Statement |
| :--- | :--- | :--- | :--- |
| **Execution** | **Sequential** | **Sequential** | **Concurrent** |
| **Usage Location** | Inside a `process` | Inside a `process` | **Outside** a `process` |
| **Iteration** | Fixed number of times | Repeats while a condition is `true` | Creates N physical copies |
| **Purpose** | Algorithmic tasks | Searching or Polling | Hardware Replication |

---
#### **Quick Guide**

- Use a **`for` loop** when...
    - You need to repeat an action a **specific number of times**.
    - *Iterating through all the bits of a vector, initializing every address in a memory.*

- Use a **`while` loop** when...
    - You need to repeat an action **until a condition changes**, and you don't know how long that will take.
    - *Searching for the first occurrence of a value, waiting for a status flag to be set in a testbench.*

- Use a **`for-generate` statement** when...
    - You need to create **multiple, regular instances of hardware components** or concurrent statements.
    - *Building an N-bit register from N flip-flops, creating a chain of adders, connecting several identical modules to a bus.*

Remember, all loops have the same syntax rules, so you just need to remember the structure. Good luck! :+1: