āļāļēāļĢāđƒāļŠāđ‰āļ„āļģāļŠāļąāđˆāļ‡ wait āđƒāļ™ Verilog: āļ„āļđāđˆāļĄāļ·āļ­āļžāļ·āđ‰āļ™āļāļēāļ™āļ–āļķāļ‡āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāļ§āļ‡āļˆāļĢāđāļĨāļ° FPGA

į›ŪæŽĄ

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 āļ­āļĒāđˆāļēāļ‡āļĨāļ°āđ€āļ­āļĩāļĒāļ””
āļŦāļ§āļąāļ‡āļ§āđˆāļēāļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ„āļļāļ“āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļˆāļĢāļīāļ‡āđ„āļ”āđ‰ āđāļĨāļ°āđ€āļ›āđ‡āļ™āļāđ‰āļēāļ§āļ•āđˆāļ­āđ„āļ›āđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāļ—āļąāļāļĐāļ°āļ”āđ‰āļēāļ™āļāļēāļĢāļ­āļ­āļāđāļšāļšāđāļĨāļ°āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ§āļ‡āļˆāļĢāļ”āļīāļˆāļīāļ—āļąāļĨ