- 1 1. āļāļāļāļģ
- 2 2. āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļĨāļ°āļŦāļĨāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļāļ wait
- 3 3. āļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļāđāđāļāđāđāļĨāļ°āđāļāđāđāļĄāđāđāļāđāļāļāļ wait
- 4 4. āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĩāđāļāļāļāđāļāļĒ
- 4.1 4.1 āļĢāļāļāļāļāļŠāļąāļāļāļēāļ (Clock edge) āļŦāļĢāļ·āļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļāļŠāļąāļāļāļēāļ
- 4.2 4.2 āļĢāļāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļāļāļĢāđāļāļĄāļāļąāļ
- 4.3 4.3 āļĢāļāļāļēāļĢāđāļāļīāļāđāļŦāļāļļāļāļēāļĢāļāđ (Event)
- 4.4 4.4 āļĢāļāļāļĢāļ§āļāļŠāļāļāļŠāļāļēāļāļ°āļŦāļĢāļ·āļ flag
- 4.5 4.5 āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ
- 5 5. āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđ wait āđāļ Testbench
- 5.1 5.1 āļĢāļāļāļāļāļ§āđāļēāļāļ°āļāļĨāļ reset
- 5.2 5.2 āļĢāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļāļŠāļąāļāļāļēāļ
- 5.3 5.3 āđāļāđāđāļāđāļāļĢāđāļāļāļāļĨāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢ
- 5.4 5.4 āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļāđāļāļāļēāļĢāđāļāđ wait āđāļ testbench
- 6 6. āļāđāļāļāļīāļāļāļĨāļēāļāđāļĨāļ°āļāļēāļĢāđāļāđāđāļāļāļĩāđāļāļāļāđāļāļĒ
- 7 7. āđāļāļāļāļīāļāļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļģāļĨāļāļ
- 8 8. āļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļ SystemVerilog āđāļĨāļ°āļ āļēāļĐāļēāļāļ·āđāļ
- 9 9. āļāļēāļĢāļāļģāļāļ§āļēāļĄāđāļāđāļēāđāļ wait āļāđāļ§āļĒāđāļāļāļ āļēāļāđāļĨāļ° waveform
- 10 10. āļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒ (FAQ)
- 11 11. āļŠāļĢāļļāļāđāļĨāļ°āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ
1. āļāļāļāļģ
Verilog āđāļāđāļāļ āļēāļĐāļēāļāļĢāļĢāļĒāļēāļĒāļŪāļēāļĢāđāļāđāļ§āļĢāđ (Hardware Description Language) āļāļĩāđāļāļđāļāđāļāđāļāļēāļāļāļĒāđāļēāļāļāļ§āđāļēāļāļāļ§āļēāļāđāļāļāļēāļĢāļāļāļāđāļāļāļ§āļāļāļĢāļāļīāļāļīāļāļąāļĨāđāļĨāļ°āļāļēāļĢāļāļąāļāļāļē FPGA āđāļāļĒāļāļģāļŠāļąāđāļ wait āļāļ·āļāđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĩāđāļŠāļģāļāļąāļ āļāļķāđāļāđāļāđāđāļāļāļēāļĢāļŦāļĒāļļāļāļāļēāļĢāļāļģāļāļēāļāļāļąāđāļ§āļāļĢāļēāļ§āļāļāļāļ§āđāļēāļāļ°āļĄāļĩāđāļāļ·āđāļāļāđāļāļāļēāļāļāļĒāđāļēāļāđāļāđāļāļāļĢāļīāļ āļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļāļēāļĢāļāļģāļĨāļāļ (simulation control) āđāļĨāļ°āļāļēāļĢāđāļāļĩāļĒāļ testbench āļāļĒāđāļēāļāļĒāļ·āļāļŦāļĒāļļāđāļ
āļāļģāļŠāļąāđāļ wait āđāļ Verilog āđāļĄāđāļāļ°āļĄāļĩāļĢāļđāļāđāļāļāļāļēāļĢāđāļāļĩāļĒāļāļāļĩāđāđāļĢāļĩāļĒāļāļāđāļēāļĒ āđāļāđāļāđāļĄāļĩāļāļĨāļąāļāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļŠāļđāļ āđāļāļĒāļĄāļąāļāđāļāđāđāļāļāļĢāļāļĩāļāļĩāđāļāđāļāļāļĢāļāļŠāļąāļāļāļēāļāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļŦāļĢāļ·āļāđāļāļīāļāđāļŦāļāļļāļāļēāļĢāļāđāđāļāļāļēāļ° āļāļĒāđāļēāļāđāļĢāļāđāļāļēāļĄ āļŦāļēāļāđāļāđāđāļĄāđāļāļđāļāļāđāļāļāļāđāļāļēāļāļāļģāđāļŦāđāđāļāļīāļāļāļēāļĢāļāļģāļāļēāļāļāļīāļāļāļĨāļēāļāđāļāđ āļāļąāļāļāļąāđāļ āļāļēāļĢāđāļāđāļēāđāļāđāļĨāļ°āđāļāđāļāļēāļ wait āļāļĒāđāļēāļāļāļđāļāļ§āļīāļāļĩāļāļķāļāļĄāļĩāļāļ§āļēāļĄāļŠāļģāļāļąāļāļāđāļāļāļļāļāļ āļēāļāļāļāļāļāļēāļĢāļāļāļāđāļāļāđāļĨāļ°āļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ (verification)
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāļāļīāļāļēāļĒāļāļģāļŠāļąāđāļ wait āđāļ Verilog āļāļąāđāļāđāļāđāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļ āļ§āļīāļāļĩāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļ testbench āļĢāļ§āļĄāļāļķāļāđāļāļ§āļāļēāļāļāđāļāļāļāļąāļāļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒ āļāļāļīāļāļēāļĒāļāļĒāđāļēāļāļĨāļ°āđāļāļĩāļĒāļāđāļāļ·āđāļāđāļŦāđāļāļąāđāļāļāļđāđāđāļĢāļīāđāļĄāļāđāļāđāļĨāļ°āļ§āļīāļĻāļ§āļāļĢāļāļĩāđāļāļģāļāļēāļāļāļąāļāļāļēāļĢāļāļāļāđāļāļāđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāđāļāđāļēāđāļāđāļāđāļāđāļēāļĒāđāļĨāļ°āļāļģāđāļāđāļāđāđāļāđāļāļĢāļīāļ
āļāļēāļĢāđāļāđāļāļģāļŠāļąāđāļ wait āļāļĒāđāļēāļāļāļĨāđāļāļāđāļāļĨāđāļ§ āļāļ°āļāđāļ§āļĒāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļģāļĨāļāļāļ§āļāļāļĢāđāļāđāļāļĒāđāļēāļāļĄāļēāļ āļāđāļēāļāļāļāļāļ§āļēāļĄāļāļĩāđ āļāļļāļāļāļ°āđāļāđāđāļāđāļēāđāļāđāļāđāļāđāļāđāđāļĨāļ°āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāļāļāļ wait āļāļĒāđāļēāļāđāļāđāļāļĢāļīāļ
2. āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāđāļĨāļ°āļŦāļĨāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļāļ wait
āđāļ Verilog āļāļģāļŠāļąāđāļ wait āļāļđāļāđāļāđāđāļĄāļ·āđāļāđāļĢāļēāļāđāļāļāļāļēāļĢ “āļŦāļĒāļļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāļ§āđāļēāđāļāļ·āđāļāļāđāļāļāļ°āđāļāđāļāļāļĢāļīāļ” āļāļķāđāļāđāļāđāļāļŦāļāļķāđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ§āļāļāļļāļĄ (control statement) āļāļĩāđāļŠāļģāļāļąāļ āļĢāļđāļāđāļāļāļāļ·āđāļāļāļēāļāļāļ·āļāļāļąāļāļāļĩāđ:
wait (āđāļāļ·āđāļāļāđāļ);
āđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĩāđ āđāļāđāļāļŦāļĨāļąāļ wait āļāļ°āļĒāļąāļāđāļĄāđāļāļģāļāļēāļāļāļāļāļ§āđāļē āđāļāļ·āđāļāļāđāļ āļāļ°āđāļāđāļāļāļĢāļīāļ (true) āđāļĄāļ·āđāļāđāļāļ·āđāļāļāđāļāļŠāļģāđāļĢāđāļ āđāļāļĢāđāļāļĢāļĄāļāļķāļāļāļ°āļāļģāļāļēāļāļāđāļāđāļ
2.1 āļ§āļīāļāļĩāđāļāđāļāļēāļāļāļ·āđāļāļāļēāļ
āļāļģāļŠāļąāđāļ wait āļĄāļąāļāļāļđāļāđāļāđāļ āļēāļĒāđāļ always block āļŦāļĢāļ·āļ initial block āļĒāļāļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ āļŦāļēāļāļāđāļāļāļāļēāļĢāļŦāļĒāļļāļāļāļāļāļ§āđāļē signal ready
āļāļ°āļĄāļĩāļāđāļēāđāļāđāļēāļāļąāļ 1 āļŠāļēāļĄāļēāļĢāļāđāļāļĩāļĒāļāđāļāđāļāļąāļāļāļĩāđ:
wait (ready == 1'b1);
āđāļāļāļĢāļāļĩāļāļĩāđ āļāļēāļĢāļāļģāļāļēāļāļāļ°āļŦāļĒāļļāļāļāļĩāđ wait āļāļāļāļ§āđāļē ready
āļāļ°āļĄāļĩāļāđāļēāđāļāđāļ 1 āļāļēāļāļāļąāđāļāļāļķāļāļāļģāđāļāļīāļāļāļēāļĢāļāđāļāđāļ āđāļāļ·āđāļāļāđāļāļŠāļēāļĄāļēāļĢāļāđāļāđāļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢāļāļēāļāļāļĢāļĢāļāļ°āđāļĨāļ°āļāļēāļĢāļĢāļ§āļĄāļŠāļąāļāļāļēāļāļŦāļĨāļēāļĒāļāļąāļ§āđāļāđ
2.2 āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļēāļāļāļģāļŠāļąāđāļāļāļ§āļāļāļļāļĄāļāļ·āđāļ
āđāļ Verilog āļĄāļĩāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ§āļāļāļļāļĄāļŦāļĨāļēāļĒāļāļāļīāļ āđāļāđāļ if, while āđāļĨāļ° forever āđāļāđ wait āļĄāļĩāļāļĪāļāļīāļāļĢāļĢāļĄāđāļāļāļēāļ°:
- if āļāļ°āļāļĢāļ§āļāļŠāļāļāđāļāļ·āđāļāļāđāļāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§āđāļĨāļ°āļāļģāļāļēāļāđāļāļāļēāļ°āđāļĄāļ·āđāļāđāļāļ·āđāļāļāđāļāđāļāđāļāļāļĢāļīāļ
- while āļāļ°āļāļģāļāļēāļāļāđāļģāļāļĢāļēāļāđāļāļāļĩāđāđāļāļ·āđāļāļāđāļāļĒāļąāļāđāļāđāļāļāļĢāļīāļ
- wait āļāļ° āļĢāļāļāļāļāļ§āđāļēāđāļāļ·āđāļāļāđāļāļāļ°āđāļāđāļāļāļĢāļīāļ āđāļĨāļ°āđāļĄāļ·āđāļāļŠāļģāđāļĢāđāļ āļāļ°āļāļģāļāļēāļāļāđāļāļāļąāļāļāļĩāđāļāļĩāļĒāļāļāļĢāļąāđāļāđāļāļĩāļĒāļ§
2.3 āļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāļĄāļąāļāđāļāđ
āļāļģāļŠāļąāđāļ wait āļāļđāļāđāļāđāđāļĄāļ·āđāļ āļāđāļāļāļĢāļāļŠāļāļēāļāļ°āļŠāļąāļāļāļēāļāļŦāļĢāļ·āļāđāļŦāļāļļāļāļēāļĢāļāđāđāļāļāļēāļ° āđāļāđāļ āļĢāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļ input signal āļĢāļāļāļēāļĢ reset āđāļŠāļĢāđāļāļŠāļīāđāļ āļŦāļĢāļ·āļāļĢāļāđāļāļ·āđāļāļāđāļāđāļ testbench āđāļāļ·āđāļāļāļ§āļāļāļļāļĄāđāļ§āļĨāļēāđāļāļāļēāļĢāļāļģāļĨāļāļ
3. āļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļāđāđāļāđāđāļĨāļ°āđāļāđāđāļĄāđāđāļāđāļāļāļ wait
āđāļĄāđāļ§āđāļē wait āļāļ°āđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļĩāđāļŠāļ°āļāļ§āļāđāļĨāļ°āļāļĢāļāļāļĨāļąāļāđāļ Verilog āđāļāđāđāļĄāđāđāļāđāļŠāļēāļĄāļēāļĢāļāđāļāđāđāļāđāļāļļāļāļāļĩāđ āļĄāļĩāļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāđāļĨāļ°āļāļēāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāļāļ§āļĢāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ
3.1 āļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļŦāļĄāļēāļ°āļŠāļĄāļāļąāļāļāļēāļĢāđāļāđ wait
āļāļģāļŠāļąāđāļ wait āļĄāļąāļāļāļđāļāđāļāđāđāļ āļāļĨāđāļāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāļĨāļāļāļŦāļĢāļ·āļāļāļēāļĢāđāļĢāļīāđāļĄāļāđāļ āļāļąāļ§āļāļĒāđāļēāļāđāļāđāļ:
- initial block
- āđāļāđāļĢāļāđāļāļ·āđāļāļāđāļāđāļāļāđāļ§āļāđāļĢāļīāđāļĄāļāļēāļĢāļāļģāļĨāļāļ āđāļāđāļ āļāļēāļĢāļĢāļāđāļŦāļāļļāļāļēāļĢāļāđāļŦāļāļķāđāļāļāđāļāļāļāļ°āļāļģāļāļēāļĢāđāļĢāļīāđāļĄāļāđāļ
- always block
- āđāļāđāđāļāļ·āđāļāļĢāļāļŠāļąāļāļāļēāļāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāđāļĨāļ°āļāļ§āļāļāļļāļĄāļāļēāļĢāļāļģāļāļēāļāđāļāļāļĨāļģāļāļąāļāļāļąāđāļ
āļāļąāļ§āļāļĒāđāļēāļ:
initial begin
wait (reset_n == 1'b1); // āļĢāļāļāļ reset āļāļđāļāļāļĨāļ
// āđāļāđāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļĢāļīāđāļĄāļāđāļ
end
always begin
wait (data_valid); // āļĢāļāļāļāļāļ§āđāļēāļŠāļąāļāļāļēāļ data_valid āļĄāļĩāļāđāļēāđāļāđāļāļāļĢāļīāļ
// āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ
end
3.2 āļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāđāļĄāđāļāļ§āļĢāđāļāđ wait
āļĄāļĩāļāļēāļāļāļĢāļāļĩāļāļĩāđāđāļĄāđāļŠāļēāļĄāļēāļĢāļāđāļāđāļŦāļĢāļ·āļāļāļ§āļĢāļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļ:
- āļāļāļāļāļĢāļ°āļāļ§āļāļāļēāļĢ (procedural block) āđāļāđāļ āđāļāđāļāļĢāļāđāļ module āļŦāļĢāļ·āļ assign statement â āđāļĄāđāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđ
- āļāļēāļĢāļāļāļāđāļāļāļāļĩāđāļāđāļāļāļāļēāļĢāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđāđāļāđāļāļŪāļēāļĢāđāļāđāļ§āļĢāđ (RTL synthesis)
āļāļģāļŠāļąāđāļ wait āđāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļģāļĨāļāļ (simulation) āđāļāđāļēāļāļąāđāļ āđāļāļĒāļāļąāđāļ§āđāļāđāļĄāđāļĢāļāļāļĢāļąāļāđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđ FPGA/ASIC
3.3 āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļąāļ VHDL
VHDL āļāđāļĄāļĩāļāļģāļŠāļąāđāļ wait āđāļāđāļāļāļąāļ āđāļāđāļĄāļĩāļāļ§āļēāļĄāļĒāļ·āļāļŦāļĒāļļāđāļāļĄāļēāļāļāļ§āđāļē āđāļāđāļ wait until
āļŦāļĢāļ·āļ wait for
āļāļķāđāļāļŠāļēāļĄāļēāļĢāļāļāļ§āļāļāļļāļĄāļāļąāđāļāđāļ§āļĨāļēāđāļĨāļ°āđāļāļ·āđāļāļāđāļāđāļāđ āđāļāļāļāļ°āļāļĩāđ Verilog āļāļģāļāļąāļāđāļāļĩāļĒāļ wait (āđāļāļ·āđāļāļāđāļ)
āļŠāļģāļŦāļĢāļąāļāļāļĢāļ§āļāļŠāļāļāļŠāļāļēāļāļ°āļŠāļąāļāļāļēāļ
4. āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĩāđāļāļāļāđāļāļĒ
āļāļģāļŠāļąāđāļ wait āļāļđāļāļāļģāđāļāđāļāđāđāļāļŦāļĨāļēāļĒāļŠāļāļēāļāļāļēāļĢāļāđāđāļāļ·āđāļāļāļ§āļāļāļļāļĄāļāļēāļĢāļāļģāļĨāļāļ āļāļĩāđāļāļĩāđāļāļ°āđāļŠāļāļāļĢāļđāļāđāļāļāļāļąāđāļ§āđāļāđāļĨāļ°āđāļāđāļāļāļąāļ§āļāļĒāđāļēāļ
4.1 āļĢāļāļāļāļāļŠāļąāļāļāļēāļ (Clock edge) āļŦāļĢāļ·āļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļāļŠāļąāļāļāļēāļ
āđāļāđāļ āļĢāļāļāļ reset āļāļđāļāļāļĨāļ āļŦāļĢāļ·āļāļĢāļāļāļāļŠāļąāļāļāļēāļ valid āđāļāđāļāļāļĢāļīāļ
initial begin
// āļĢāļāļāļ reset āļāļđāļāļāļĨāļ
wait (reset_n == 1'b1);
// āđāļāđāļāļŠāļģāļŦāļĢāļąāļāđāļĢāļīāđāļĄāļāđāļ
end
always begin
// āļĢāļāļāļāļāļ§āđāļēāļŠāļąāļāļāļēāļ data_valid āđāļāđāļāļāļĢāļīāļ
wait (data_valid == 1'b1);
// āļāļēāļĢāļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ
end
4.2 āļĢāļāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļāļāļĢāđāļāļĄāļāļąāļ
āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢāļāļēāļāļāļĢāļĢāļāļ° āđāļāđāļ AND/OR āđāļāļ·āđāļāļĢāļ§āļĄāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļ
wait ((ready == 1'b1) && (start == 1'b1));
āļĢāļđāļāđāļāļāļāļĩāđāļāđāļ§āļĒāđāļŦāđāļāļ§āļāļāļļāļĄāđāļ§āļĨāļēāđāļāđāļāļąāļāļāđāļāļāļĄāļēāļāļāļķāđāļ
4.3 āļĢāļāļāļēāļĢāđāļāļīāļāđāļŦāļāļļāļāļēāļĢāļāđ (Event)
āđāļāđāļ āļāđāļāļāļāļēāļĢāđāļŦāđāļāļēāļĢāļāļģāļāļēāļāđāļāļīāļāļāļķāđāļāđāļĄāļ·āđāļāļŠāļąāļāļāļēāļāļāļēāļāļāļąāļ§āđāļāļĨāļĩāđāļĒāļāļāđāļē āļāļĒāđāļēāļāđāļĢāļāđāļāļēāļĄ āļāļēāļĢāļāļĢāļ§āļāļāļąāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļĄāļąāļāđāļāđāļĢāđāļ§āļĄāļāļąāļ @ āļŦāļĢāļ·āļ always
wait (enable == 1'b1);
4.4 āļĢāļāļāļĢāļ§āļāļŠāļāļāļŠāļāļēāļāļ°āļŦāļĢāļ·āļ flag
āđāļ testbench āļĄāļąāļāđāļāđāļĢāļāļŠāļāļēāļāļ°āļāļāļāđāļĄāļāļđāļĨāļŦāļĢāļ·āļ flag āļ§āđāļēāļāļēāļĢāļāļģāļāļēāļāđāļŠāļĢāđāļāļŠāļīāđāļāļŦāļĢāļ·āļāđāļĄāđ
wait (send_done == 1'b1);
4.5 āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ
- āļĢāļāļāļģāļāļ§āļāļĢāļāļāļāļēāļŽāļīāļāļēāļāļĩāđāļāļģāļŦāļāļ â āļŠāļēāļĄāļēāļĢāļāđāļāđ counter āļĢāđāļ§āļĄāļāļąāļ event control
integer i;
for (i = 0; i < 10; i = i + 1) begin
@(posedge clk); // āļĢāļāļāļāļāļāļēāļāļķāđāļāļāļāļ clock 10 āļāļĢāļąāđāļ
end
*āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđāđāļāđāļĢāđāļ§āļĄāļāļąāļ event control āđāļĄāđāđāļāđ wait āđāļāļĩāļĒāļāļāļĒāđāļēāļāđāļāļĩāļĒāļ§
5. āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđ wait āđāļ Testbench
āđāļāļāļēāļĢāļŠāļĢāđāļēāļ testbench āļāđāļ§āļĒ Verilog āļāļģāļŠāļąāđāļ wait āđāļāđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļāļĩāđāļāļĢāļāļāļĨāļąāļāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļĨāļģāļāļąāļāļāļēāļĢāļāļģāļāļēāļ āđāļāļĢāļēāļ°āļāļļāļāļāļĢāļāđāļĄāļąāļāļāđāļāļāļĢāļāļāļēāļĢāļāđāļāļāļāđāļāļĄāļđāļĨāļŦāļĢāļ·āļāđāļŦāļāļļāļāļēāļĢāļāđāļāļēāļāļāļĒāđāļēāļ āļāļąāļāļāļąāđāļ wait āļāļķāļāļĄāļĩāļāļāļāļēāļāļŠāļģāļāļąāļ
5.1 āļĢāļāļāļāļāļ§āđāļēāļāļ°āļāļĨāļ reset
āđāļāļĒāļāļąāđāļ§āđāļ testbench āļāļ°āđāļĢāļīāđāļĄāļāļēāļāļāļēāļĢ reset āđāļĨāļ°āļāđāļāļāļĢāļāļāļ reset āļāļđāļāļāļĨāļāļāđāļāļāđāļĢāļīāđāļĄāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ
initial begin
// āļĢāļāļāļ reset āļāļđāļāļāļĨāļ
wait (reset_n == 1'b1);
// āđāļĢāļīāđāļĄāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļŦāļĨāļąāļ reset
end
5.2 āļĢāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļāļŠāļąāļāļāļēāļ
testbench āļĄāļąāļāļĢāļāļāļāļāļ§āđāļēāļŠāļąāļāļāļēāļ flag āļŦāļĢāļ·āļ data_valid āļĄāļĩāļāđāļēāđāļāđāļāļāļĢāļīāļ āđāļāļ·āđāļāđāļŦāđāļāļēāļĢāļāđāļāļāļāđāļāļĄāļđāļĨāđāļāļīāļāļāļķāđāļāļāļĢāļāļāļąāļāļŦāļ§āļ°
wait (data_valid == 1'b1);
// āļāļĢāļ§āļāļŠāļāļ output data
wait (busy == 1'b0);
5.3 āđāļāđāđāļāđāļāļĢāđāļāļāļāļĨāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢ
āđāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāđāļāļ serial āļŦāļĢāļ·āļ handshake signal āļāļģāļŠāļąāđāļ wait āļāļģāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļĢāļāđāļŦāļāļļāļāļēāļĢāļāđāļāđāļāđāļāļ·āđāļāļāđāļāđāļāļĒāđāļēāļāļāđāļēāļĒ āđāļāđāļ āļāļēāļĢāļĢāļāļāļ tx_done āļĄāļĩāļāđāļēāđāļāđāļāļāļĢāļīāļ
wait (tx_done == 1'b1);
5.4 āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļāđāļāļāļēāļĢāđāļāđ wait āđāļ testbench
āļāđāļāļāļĢāļ°āļ§āļąāļ āļāļĢāļāļĩāļāļĩāđāđāļāļ·āđāļāļāđāļāđāļĄāđāđāļāđāļāļāļĢāļīāļāļāļĨāļāļāđāļ āđāļāļĢāļēāļ°āļāļ°āļāļģāđāļŦāđāļāļēāļĢāļāļģāļĨāļāļāļŦāļĒāļļāļāļāļĒāļđāđāļāļĢāļāļāļąāđāļ āļ§āļīāļāļĩāļāđāļāļāļāļąāļāļāļ·āļāđāļāđ timeout āļŦāļĢāļ·āļāđāļŠāļāļāļāđāļāļāļ§āļēāļĄāđāļāđāļāđāļāļ·āļāļ
initial begin
integer timeout;
timeout = 0;
while (reset_n != 1'b1 && timeout < 1000) begin
#1; // āļĢāļāđāļ§āļĨāļē 1 āļŦāļāđāļ§āļĒ
timeout = timeout + 1;
end
if (timeout == 1000)
$display("Error: reset_n āđāļĄāđāļāļđāļāļāļĨāļ");
end
6. āļāđāļāļāļīāļāļāļĨāļēāļāđāļĨāļ°āļāļēāļĢāđāļāđāđāļāļāļĩāđāļāļāļāđāļāļĒ
āđāļĄāđ wait āļāļ°āļŠāļ°āļāļ§āļ āđāļāđāļāđāļēāđāļāđāđāļĄāđāļāļđāļāļāđāļāļāļāļēāļāļāļģāđāļŦāđāđāļāļīāļāļāļąāļāļŦāļēāđāļāđ āļāđāļāđāļāļāļĩāđāļāļ·āļāļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒāđāļĨāļ°āđāļāļ§āļāļēāļāđāļāđāđāļ
6.1 āļāļēāļĢāļĢāļāđāļāļāđāļĄāđāļŠāļīāđāļāļŠāļļāļ
āļāļąāļāļŦāļēāļāļĩāđāļāļāļāđāļāļĒāļāļ·āļ āđāļāļ·āđāļāļāđāļāđāļĄāđāđāļāļĒāđāļāđāļāļāļĢāļīāļ āļāļģāđāļŦāđāļāļēāļĢāļāļģāļĨāļāļāļŦāļĒāļļāļāļāļĒāļđāđāļāļĨāļāļ āļŠāļēāđāļŦāļāļļāļāļēāļāđāļāđāļāđāļāļĢāļēāļ° initial āđāļĄāđāļāļĢāļāļāđāļ§āļāļŦāļĢāļ·āļāļŠāļąāļāļāļēāļāđāļĄāđāđāļāļĨāļĩāđāļĒāļ
āđāļāļ§āļāļēāļāđāļāđ:
- āļāļĢāļ§āļāļŠāļāļāļ§āđāļēāļŠāļąāļāļāļēāļāļāļĩāđāļĢāļāļĄāļĩāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļĢāļīāļ
- āļāļģāļŦāļāļāļāđāļēāđāļĢāļīāđāļĄāļāđāļāđāļĨāļ°āļĢāļđāļāđāļāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļāļāļāļŠāļąāļāļāļēāļāļāļąāļāđāļāļ
- āđāļāļīāđāļĄ timeout āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļēāļĢāļŦāļĒāļļāļāļāļēāļ§āļĢ
integer timeout;
timeout = 0;
while (flag != 1'b1 && timeout < 1000) begin
#1;
timeout = timeout + 1;
end
if (timeout == 1000)
$display("Error: flag āđāļĄāđāđāļāļĨāļĩāđāļĒāļāđāļāđāļ 1");
6.2 āļāļēāļĢāđāļāļĩāļĒāļāđāļāļ·āđāļāļāđāļāļāļīāļāļāļĨāļēāļ
āļŦāļēāļāđāļāļĩāļĒāļ expression āļāļīāļ āđāļāđāļ āļ§āļāđāļĨāđāļāļŦāļĢāļ·āļāđāļāļĢāļ·āđāļāļāļŦāļĄāļēāļĒāļāļĢāļĢāļāļ°āđāļĄāđāļāļđāļ āļāļ°āļāļģāđāļŦāđāļāļĨāļĨāļąāļāļāđāđāļĄāđāļāļĢāļāļāļēāļĄāļāļĩāđāļāļēāļ
āđāļāļ§āļāļēāļāđāļāđ:
- āļāļĢāļ§āļāļŠāļāļāļ§āļāđāļĨāđāļāđāļĨāļ°āļāļąāļ§āļāļģāđāļāļīāļāļāļēāļĢāļāļēāļāļāļĢāļĢāļāļ°
- āđāļāđ $display āđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļāļāļāļąāļ§āđāļāļĢ
6.3 āļāļąāļāļŦāļē race condition
āđāļĄāļ·āđāļ wait āļāļđāļāđāļāđāļĢāđāļ§āļĄāļāļąāļ event control (@) āļŦāļĢāļ·āļ always āļāļēāļāļāļģāđāļŦāđāļĨāļģāļāļąāļāļāļēāļĢāļāļģāļāļēāļāđāļĄāđāļāļĢāļāļāļĩāđāļāļąāđāļāđāļ āđāļāļ·āđāļāļāļāļēāļāđāļ§āļĨāļēāļāļāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļāļŠāļąāļāļāļēāļ
āđāļāļ§āļāļēāļāđāļāđ:
- āļāļāļāđāļāļāđāļŦāđāļāļąāļāđāļāļāļ§āđāļēāļĢāļāļŠāļąāļāļāļēāļāđāļ (posedge / negedge)
- āļāļīāļāļēāļĢāļāļēāđāļāđ @ āļŦāļĢāļ·āļ #delay āļĢāđāļ§āļĄāļāļąāļ
6.4 āđāļāļĨāđāļāļĨāļąāļāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĩāļāļąāļ
- āđāļāđ $display
āđāļŠāļāļāļāđāļēāđāļĨāļ°āđāļ§āļĨāļē āļāđāļāļāđāļĨāļ°āļŦāļĨāļąāļ wait āđāļāļ·āđāļāļāļĢāļ§āļāļŠāļāļāļ§āđāļēāđāļāđāļāļŦāļĒāļļāļāļāļĢāļāđāļŦāļ - āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļāļāļāļēāļ wait
āđāļŠāļāļ log āđāļĄāļ·āđāļ wait āļŠāļģāđāļĢāđāļ - āđāļĢāļīāđāļĄāļāļēāļāļāļĢāļāļĩāļāđāļēāļĒ
āļāļāļŠāļāļāļāđāļ§āļĒāļŠāļąāļāļāļēāļāļāđāļēāļĒ āđ āļāđāļāļāļāļĩāđāļāļ°āđāļāđāđāļāļ·āđāļāļāđāļāļāļąāļāļāđāļāļ
āļāļēāļĢāļĢāļđāđāļ§āļīāļāļĩāļāļĩāļāļąāļāļāđāļ§āļĒāđāļŦāđāļāļēāļĢāļāļģāļĨāļāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāđāļĨāļ°āļĨāļāđāļ§āļĨāļēāļāļĩāđāđāļŠāļĩāļĒāđāļāļāļąāļāļāļēāļĢāļŦāļēāļŠāļēāđāļŦāļāļļ
7. āđāļāļāļāļīāļāļāļēāļĢāđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļģāļĨāļāļ
āđāļāļāļēāļĢāļāļģāļĨāļāļāļāđāļ§āļĒ Verilog āļāļēāļĢāđāļāđ wait āļāļĒāđāļēāļāļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļĢāđāļ§āļĄāļāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ§āļāļāļļāļĄāļāļ·āđāļāļāđāļ§āļĒāđāļŦāđāļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļĢāļ§āļāđāļĢāđāļ§āđāļĨāļ°āđāļĄāđāļāļĒāļģāļĒāļīāđāļāļāļķāđāļ
7.1 āļāļēāļĢāđāļĨāļ·āļāļāđāļāđ wait āđāļĨāļ° #delay
āļāļąāđāļ wait āđāļĨāļ° #delay
āđāļāđāđāļāļ·āđāļ âāļĢāļâ āđāļāđāļĄāļĩāļāļ§āļēāļĄāđāļāļāļāđāļēāļ:
- wait: āļĢāļāļāļāļāļ§āđāļēāđāļāļ·āđāļāļāđāļāđāļāđāļāļāļĢāļīāļ āđāļāđāļ
wait (ready == 1'b1);
- #delay: āļĢāļāđāļ§āļĨāļēāļāļĩāđāļāļģāļŦāļāļ āđāļāđāļ
#10; // āļĢāļāđāļ§āļĨāļē 10 āļŦāļāđāļ§āļĒ
āđāļāļĨāđāļāļĨāļąāļ: āđāļāđ wait āđāļĄāļ·āđāļāļĢāļ event āļŦāļĢāļ·āļāļŠāļąāļāļāļēāļ āđāļĨāļ°āđāļāđ #delay āđāļĄāļ·āđāļāļĢāļāđāļ§āļĨāļēāđāļāļāļāļēāļĒāļāļąāļ§ āļāļ°āļāđāļ§āļĒāļĨāļāļāļēāļĢāļāļģāļāļ§āļāļāļĩāđāđāļĄāđāļāļģāđāļāđāļāđāļĨāļ°āļāļģāđāļŦāđāļāļēāļĢāļāļģāļĨāļāļāđāļĢāđāļ§āļāļķāđāļ

7.2 āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāļīāđāļĄāļāļ§āļēāļĄāđāļĢāđāļ§
- āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļĨāļđāļāļāļĩāđāđāļĄāđāļāļģāđāļāđāļ āđāļāđāļ āļĨāļđāļāļāļĩāđāļĢāļāđāļāļ·āđāļāļāđāļāļāļĩāđāđāļĄāđāļĄāļĩāļ§āļąāļāđāļāđāļāļāļĢāļīāļ
- āđāļāđ flag āļŠāļāļēāļāļ° āđāļāļ·āđāļāļāļ§āļāļāļļāļĄāļāļēāļĢāļāļģāļāļēāļāđāļāļāļāļēāļĢāļĢāļāļāđāļģāļāđāļāļ
wait (done_flag == 1'b1);
7.3 āđāļāđ finish_flag āđāļĨāļ° timeout
āđāļāļ·āđāļāļāđāļāļāļāļąāļāļāļēāļĢāļŦāļĒāļļāļāļāļĩāđāđāļĄāđāļĄāļĩāļāļĩāđāļŠāļīāđāļāļŠāļļāļ āļŠāļēāļĄāļēāļĢāļāļāļģāļŦāļāļ flag āļŦāļĢāļ·āļ timeout āđāļāđ
wait (finish_flag == 1'b1);
$finish;
7.4 āļāļēāļĢāđāļāđ event-driven āļĢāđāļ§āļĄāļāļąāļ
wait āļŠāļēāļĄāļēāļĢāļāđāļāđāļĢāđāļ§āļĄāļāļąāļ @
āļŦāļĢāļ·āļ fork/join
āđāļāļ·āđāļāļŠāļĢāđāļēāļāļŠāļāļēāļāļāļēāļĢāļāđāļāļĩāđāļāļąāļāļāđāļāļ
fork
wait (signal_a == 1'b1);
wait (signal_b == 1'b1);
join
āļāđāļ§āļĒāļ§āļīāļāļĩāļāļĩāđāļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļāļāļĢāđāļāļĄāļāļąāļāđāļĨāļ°āļĨāļāļāđāļāļāļīāļāļāļĨāļēāļāļāļēāļāļāļēāļĢāļāļĨāļēāļāđāļŦāļāļļāļāļēāļĢāļāđ
8. āļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļ SystemVerilog āđāļĨāļ°āļ āļēāļĐāļēāļāļ·āđāļ
āđāļĄāđāļ§āđāļē wait āđāļ Verilog āļāļ°āđāļĢāļĩāļĒāļāļāđāļēāļĒ āđāļāđāđāļ SystemVerilog āđāļĨāļ° VHDL āļĄāļĩāļāļ§āļēāļĄāļŠāļēāļĄāļēāļĢāļāļāļĩāđāļāļĒāļēāļĒāđāļāļīāđāļĄāđāļāļīāļĄ
8.1 āļāļēāļĢāļāļĒāļēāļĒāđāļ SystemVerilog
- wait fork/join: āļĢāļāļāļāļāļ§āđāļē process āđāļāļāļāļāļēāļāļāļąāđāļāļŦāļĄāļāļāļ°āđāļŠāļĢāđāļāļŠāļīāđāļ
- wait order: āļĢāļāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļāļāļēāļĄāļĨāļģāļāļąāļāļāļĩāđāļāļģāļŦāļāļ (āļāļķāđāļāļāļĒāļđāđāļāļąāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļĢāļāļāļĢāļąāļ)
- āļāļēāļĢāđāļāđ event āđāļĨāļ° semaphore: āļĢāļāļāļēāļĢāļāļīāļāđāļāļĢāđāļāļāđāļĢāļ°āļŦāļ§āđāļēāļ process āđāļāđāļĒāļ·āļāļŦāļĒāļļāđāļāļĒāļīāđāļāļāļķāđāļ
8.2 āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ Verilog āđāļĨāļ° VHDL
- VHDL: āļĄāļĩāļĢāļđāļāđāļāļ wait āļŦāļĨāļēāļĒāđāļāļ āđāļāđāļ
wait until
,wait for
āļāļąāļ§āļāļĒāđāļēāļ:wait until clk = '1'; wait for 100 ns;
- Verilog: āļĄāļĩāđāļāļĩāļĒāļ
wait (āđāļāļ·āđāļāļāđāļ);
āļŠāļģāļŦāļĢāļąāļāļĢāļāļŠāļąāļāļāļēāļ āļŠāđāļ§āļāļāļēāļĢāļĢāļāđāļ§āļĨāļēāđāļāđ#delay
āļŦāļĢāļ·āļ@(posedge clk)
āļŠāļĢāļļāļ: VHDL āļĄāļĩ wait āļāļĩāđāļŦāļĨāļēāļāļŦāļĨāļēāļĒ āđāļāđ Verilog āđāļāđāļāļēāļĢāļāļŠāļĄāļāļŠāļēāļāļĢāļ°āļŦāļ§āđāļēāļ wait, delay āđāļĨāļ° event control
8.3 āļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļāđāļāļĢāļāļŠāļĢāđāļēāļāļāļ§āļāļāļļāļĄāļāļ·āđāļ
āđāļ Verilog āļĄāļĩ if, while, forever, āđāļĨāļ° event control (@) āļĢāđāļ§āļĄāļāđāļ§āļĒ
wait āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļ âāļĢāļāļāļāđāļāļ·āđāļāļāđāļāđāļāđāļāļāļĢāļīāļâ āļŠāđāļ§āļ if/while/forever āđāļāđāļāļ§āļāļāļļāļĄāļĨāļđāļāđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāđāļāļĢāļđāļāđāļāļāļāļ·āđāļ
9. āļāļēāļĢāļāļģāļāļ§āļēāļĄāđāļāđāļēāđāļ wait āļāđāļ§āļĒāđāļāļāļ āļēāļāđāļĨāļ° waveform
āļāļēāļĢāđāļāđāļēāđāļāļāļēāļĢāļāļģāļāļēāļāļāļāļ wait āļāļ°āļāđāļēāļĒāļāļķāđāļāđāļĄāļ·āđāļāļāļāļīāļāļēāļĒāļāđāļ§āļĒ timing chart āļŦāļĢāļ·āļ waveform āļāļąāļ§āļāļĒāđāļēāļ
9.1 āļ āļēāļāļĢāļ§āļĄāļāļēāļĢāļāļģāļāļēāļāļāļ·āđāļāļāļēāļāļāļāļ wait
āļāļąāļ§āļāļĒāđāļēāļ: āļĢāļāļāļāļŠāļąāļāļāļēāļ reset_n
āļĄāļĩāļāđāļē 1
initial begin
wait (reset_n == 1'b1);
// āļāļģāļāļēāļāļāđāļāļŦāļĨāļąāļāļāļēāļ reset āļāļđāļāļāļĨāļ
end
Timing Chart (āļāļąāļ§āļāļĒāđāļēāļ)
Time | 0 | 10 | 20 | 30 | 40 | ...
reset_n 0 0 1 1 1
<---wait---> |--â āļāļģāļāļēāļāļāđāļ
9.2 āļāļēāļĢāļāļĢāļ§āļāļāļąāļāļŠāļąāļāļāļēāļāđāļāļĨāļĩāđāļĒāļāđāļāļĨāļ
āđāļāđāļ āļĢāļāļāļ data_valid
āđāļāđāļāļāļĢāļīāļ
always begin
wait (data_valid == 1'b1);
// āļāļĢāļ°āļĄāļ§āļĨāļāļĨāļāđāļāļĄāļđāļĨ
end
Waveform
Time | 0 | 10 | 20 | 30 | 40 | ...
data_valid 0 0 0 1 0
<---wait---> | āļāļģāļāļēāļāļāđāļ
9.3 āļāļēāļĢāļĢāļāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļ
wait ((ready == 1'b1) && (start == 1'b1));
Timing
Time | ... | 40 | 50 | 60 | ...
ready 0 1 1 1
start 0 0 1 1
<---wait---> | āđāļĢāļīāđāļĄāļāļģāļāļēāļ (āđāļĄāļ·āđāļāļāļąāđāļāļāļđāđ = 1)
9.4 āļāļēāļĢāļāļ§āļāļāļļāļĄāļŠāļāļēāļāļ°āđāļ testbench
āļāļēāļĢāļĢāļ§āļĄāļŦāļĨāļēāļĒ event āđāļĨāļ° state transition āļŠāļēāļĄāļēāļĢāļāđāļāđ wait āđāļāļ·āđāļāļāļ§āļāļāļļāļĄāļĨāļģāļāļąāļ āļāļģāđāļŦāđāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ waveform āļāđāļēāļĒāđāļĨāļ°āļāļąāļāđāļāļāļāļķāđāļ
10. āļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒ (FAQ)
Q1. wait āļāđāļēāļāļāļēāļ #delay āļāļĒāđāļēāļāđāļĢ?
A. wait āļāļ°āļĢāļāļāļāđāļāļ·āđāļāļāđāļāđāļāđāļāļāļĢāļīāļ āļŠāđāļ§āļ #delay āļāļ°āļĢāļāđāļ§āļĨāļēāļāļĩāđāļāļģāļŦāļāļ
Q2. āđāļāđ wait āđāļ always block āđāļāđāđāļŦāļĄ?
A. āđāļāđ āļŠāļēāļĄāļēāļĢāļāđāļāđāļĢāļāđāļāļ·āđāļāļāđāļāđāļ always block āđāļāđ āđāļāđāļāđāļāļāļāļģāđāļ§āđāļ§āđāļēāļĄāļĩāđāļ§āđāđāļāļ·āđāļ simulation āđāļĄāđāđāļāđ synthesis
Q3. wait āļŠāļēāļĄāļēāļĢāļāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđāđāļāđāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāđāļāđāļŦāļĢāļ·āļāđāļĄāđ?
A. āđāļĄāđāđāļāđ āđāļāļĒāļāļąāđāļ§āđāļāđāļāļĢāļ·āđāļāļāļĄāļ·āļāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđāđāļĄāđāļĢāļāļāļĢāļąāļ wait
Q4. āļāđāļē wait āđāļĄāđāļāļģāļāļēāļāļŦāļĢāļ·āļāđāļĄāđāļŦāļĨāļļāļāļāļāļāļĄāļē āđāļāļīāļāļāļēāļāļāļ°āđāļĢ?
A. āļŠāđāļ§āļāđāļŦāļāđāđāļāļīāļāļāļēāļāļŠāļąāļāļāļēāļāđāļĄāđāđāļāļĨāļĩāđāļĒāļāļāļēāļĄāļāļĩāđāļāļąāđāļāđāļ§āđ āļāļ§āļĢāļāļĢāļ§āļāļŠāļāļ waveform āđāļĨāļ°āđāļāļīāđāļĄ timeout
Q5. wait āđāļ VHDL āļāđāļēāļāļāļēāļ Verilog āļāļĒāđāļēāļāđāļĢ?
A. VHDL āļĄāļĩāļŦāļĨāļēāļĒāļĢāļđāļāđāļāļ āđāļāđāļ wait until
, wait for
āđāļāđ Verilog āļĄāļĩāđāļāļĩāļĒāļ wait (āđāļāļ·āđāļāļāđāļ)
Q6. āļāđāļēāļāļāļēāļ event control (@) āļāļĒāđāļēāļāđāļĢ?
A. @(posedge clk)
āļāļ°āļāļāļāļŠāļāļāļāđāļĄāļ·āđāļāđāļāļīāļāļāļāļāļŠāļąāļāļāļēāļ āļŠāđāļ§āļ wait(clk == 1)
āļāļ°āļĢāļāļāļāļāđāļēāđāļāđāļāļāļĢāļīāļ
Q7. āļāđāļēāļāļēāļĢāļāļģāļĨāļāļāļŦāļĒāļļāļāđāļāļāđāļĄāđāļŠāļīāđāļāļŠāļļāļ?
A. āļĄāļąāļāđāļāļīāļāļāļēāļāđāļāļ·āđāļāļāđāļāđāļĄāđāđāļāļĒāđāļāđāļāļāļĢāļīāļ āļāđāļāļāļāļĢāļ§āļāļŠāļāļāļāđāļēāđāļĢāļīāđāļĄāļāđāļāļāļāļāļŠāļąāļāļāļēāļ āļŦāļĢāļ·āļāđāļāļīāđāļĄ timeout
Q8. āđāļāđāļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļāđāļ wait āđāļāđāđāļŦāļĄ?
A. āđāļāđ āđāļāđ && (AND) āļŦāļĢāļ·āļ || (OR) āđāļāļ·āđāļāļĢāļ§āļĄāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļ āđāļāđāļ
wait((ready == 1'b1) && (start == 1'b1));
11. āļŠāļĢāļļāļāđāļĨāļ°āļāļāļāļ§āļēāļĄāļāļĩāđāđāļāļĩāđāļĒāļ§āļāđāļāļ
āđāļāļāļāļāļ§āļēāļĄāļāļĩāđāđāļĢāļēāđāļāđāļāļāļīāļāļēāļĒāļāļģāļŠāļąāđāļ wait āļāļāļ Verilog āļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļāļāļāļāļķāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāļāļēāļāļāļĢāļīāļ āļĄāļēāļāļāļāļ§āļāļāļĢāļ°āđāļāđāļāļŠāļģāļāļąāļāļāļĩāļāļāļĢāļąāđāļ
11.1 āļŠāļĢāļļāļāļāļĢāļ°āđāļāđāļāļŠāļģāļāļąāļ
- wait āđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļŠāļģāļāļąāļāļāļāļ Verilog
āđāļāđāđāļāļ·āđāļāļŦāļĒāļļāļāļāļēāļĢāļāļģāļāļēāļāļāļāļāļ§āđāļēāđāļāļ·āđāļāļāđāļāļāļ°āđāļāđāļāļāļĢāļīāļ āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļ testbench āđāļĨāļ°āļāļēāļĢāļāļ§āļāļāļļāļĄ simulation - āđāļāļĢāļāļŠāļĢāđāļēāļāļāļ·āđāļāļāļēāļāļāļ·āļ
wait (āđāļāļ·āđāļāļāđāļ);
āļŠāļēāļĄāļēāļĢāļāđāļāđ expression āđāļĨāļ°āļĢāļ§āļĄāļŦāļĨāļēāļĒāđāļāļ·āđāļāļāđāļāđāļāđ - āļāļēāļĢāđāļāđāļāļēāļāļŦāļĨāļąāļ: āļāļēāļĢāļĢāļ reset āļāļđāļāļāļĨāļ, āļāļēāļĢāļĢāļāļŠāļąāļāļāļēāļāđāļāļĨāļĩāđāļĒāļ, āļāļēāļĢāļĢāļāļāļēāļĢāļŠāļ·āđāļāļŠāļēāļĢāļŦāļĢāļ·āļāļāļēāļĢāđāļāļāļāđāļēāļĒāļāđāļāļĄāļđāļĨāđāļŠāļĢāđāļ
- wait āđāļāđāļāđāļāļĢāļāļŠāļĢāđāļēāļāļŠāļģāļŦāļĢāļąāļ simulation āđāļāđāļēāļāļąāđāļ
āđāļĄāđāļāļ§āļĢāđāļāđāđāļāđāļāđāļāļāļĩāđāļāđāļāļāļāļēāļĢāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđāđāļāđāļ FPGA/ASIC - āļāļ§āļĢāļĢāļ°āļ§āļąāļāļāļąāļāļŦāļē infinite wait
āđāļāļīāđāļĄ timeout āđāļĨāļ°āđāļāđāđāļāļāļāļīāļ debug āđāļāđāļ $display āđāļāļ·āđāļāļŦāļēāļŠāļēāđāļŦāļāļļ - āļĢāļđāđāļāļąāļāļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļāļ āļēāļĐāļēāļāļ·āđāļ āđāļāđāļ SystemVerilog āđāļĨāļ° VHDL āđāļāļ·āđāļāđāļĨāļ·āļāļāđāļāđāđāļāđāđāļŦāļĄāļēāļ°āļāļąāļāļāļēāļ
āļāļēāļĢāđāļāđāļēāđāļāđāļĨāļ°āđāļāđ wait āļāļĒāđāļēāļāļāļđāļāļāđāļāļāļāļ°āļāđāļ§āļĒāđāļāļīāđāļĄāļāļļāļāļ āļēāļāļāļāļāļāļēāļĢāļāļāļāđāļāļāđāļĨāļ°āļāļģāđāļŦāđāļāļēāļĢāļāļĢāļ§āļāļŠāļāļ (verification) āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļĄāļēāļāļāļķāđāļ
āļāļāļāļāļāļ§āļēāļĄ âāļāļēāļĢāļāļāļīāļāļēāļĒ Verilog wait āļāļĒāđāļēāļāļĨāļ°āđāļāļĩāļĒāļâ
āļŦāļ§āļąāļāļ§āđāļēāļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāđāļ§āļĒāđāļŦāđāļāļļāļāļāļģāđāļāđāļāđāļāļĢāļīāļāđāļāđ āđāļĨāļ°āđāļāđāļāļāđāļēāļ§āļāđāļāđāļāđāļāļāļēāļĢāļāļąāļāļāļēāļāļąāļāļĐāļ°āļāđāļēāļāļāļēāļĢāļāļāļāđāļāļāđāļĨāļ°āļāļēāļĢāļāļĢāļ§āļāļŠāļāļāļ§āļāļāļĢāļāļīāļāļīāļāļąāļĨ