Verilog $display: āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ āļžāļ·āđ‰āļ™āļāļēāļ™ āđ€āļ—āļ„āļ™āļīāļ„ āđāļĨāļ°āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļˆāļĢāļīāļ‡

į›ŪæŽĄ

1. āļšāļ—āļ™āļģ: āļ„āļ§āļēāļĄāļŠāļģāļ„āļąāļāđāļĨāļ°āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒāļ‚āļ­āļ‡ “display” āđƒāļ™ Verilog

“display” āđƒāļ™ Verilog āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

$display āđƒāļ™ Verilog āđ€āļ›āđ‡āļ™āļŦāļ™āļķāđˆāļ‡āđƒāļ™ system task āļ—āļĩāđˆāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš “āđāļŠāļ”āļ‡āļœāļĨ” āļŠāļ–āļēāļ™āļ°āļ āļēāļĒāđƒāļ™āļ‚āļ­āļ‡āđ‚āļ›āļĢāđāļāļĢāļĄāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡ āļ„āļĨāđ‰āļēāļĒāļāļąāļš printf āļ‚āļ­āļ‡āļ āļēāļĐāļē C āđ‚āļ”āļĒāļŠāļēāļĄāļēāļĢāļ–āđāļŠāļ”āļ‡āļ„āđˆāļēāļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“ āļ•āļąāļ§āđāļ›āļĢ āļŦāļĢāļ·āļ­āļŠāļ•āļĢāļīāļ‡āđ„āļ›āļĒāļąāļ‡āđ€āļ—āļ­āļĢāđŒāļĄāļīāļ™āļąāļĨāļŦāļĢāļ·āļ­āļ„āļ­āļ™āđ‚āļ‹āļĨāđ„āļ”āđ‰ āļ–āļ·āļ­āđ€āļ›āđ‡āļ™āļŸāļąāļ‡āļāđŒāļŠāļąāļ™āļ—āļĩāđˆāļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļ­āļĒāđˆāļēāļ‡āļĒāļīāđˆāļ‡āđƒāļ™āļāļēāļĢāļ”āļĩāļšāļąāļāđāļĨāļ°āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™

āļ—āļģāđ„āļĄ $display āļˆāļķāļ‡āļˆāļģāđ€āļ›āđ‡āļ™āđƒāļ™āļ‡āļēāļ™āļžāļąāļ’āļ™āļē Verilog

  • āđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ”āļĩāļšāļąāļ: āđƒāļ™āļ§āļ‡āļˆāļĢāļ—āļĩāđˆāļ‹āļąāļšāļ‹āđ‰āļ­āļ™ āļāļēāļĢāļĄāļ­āļ‡āđ€āļŦāđ‡āļ™āļŠāļąāļāļāļēāļ“āļ āļēāļĒāđƒāļ™āđ€āļ›āđ‡āļ™āļŠāļīāđˆāļ‡āļŠāļģāļ„āļąāļ $display āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āđˆāļēāđ„āļ”āđ‰āļ—āļąāļ™āļ—āļĩāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡
  • āļ—āļģāđƒāļŦāđ‰āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ€āļ‚āđ‰āļēāđƒāļˆāļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™: āļāļēāļĢāļ”āļđāđ€āļ‰āļžāļēāļ° waveform āļ­āļēāļˆāđ„āļĄāđˆāđ€āļžāļĩāļĒāļ‡āļžāļ­ āļāļēāļĢāļšāļąāļ™āļ—āļķāļ log āļ”āđ‰āļ§āļĒāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļ‚āđ‰āļēāđƒāļˆāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļ„āđˆāļēāđ„āļ”āđ‰āļŠāļąāļ”āđ€āļˆāļ™āļ‚āļķāđ‰āļ™
  • āļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļ•āđˆāļ­āļāļēāļĢāđ€āļ‚āļĩāļĒāļ™āđ€āļ­āļāļŠāļēāļĢ: āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđˆāļ„āļģāļ­āļ˜āļīāļšāļēāļĒāļŦāļĢāļ·āļ­ hint āļĨāļ‡āđƒāļ™ log āđ€āļžāļ·āđˆāļ­āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļœāļđāđ‰āļ­āļ·āđˆāļ™āđ€āļ‚āđ‰āļēāđƒāļˆāđ‚āļ„āđ‰āļ”āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™

āļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒāđāļĨāļ°āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ‚āļ­āļ‡āļšāļ—āļ„āļ§āļēāļĄ

āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āļ­āļ˜āļīāļšāļēāļĒāļ•āļēāļĄāļĨāļģāļ”āļąāļšāļ”āļąāļ‡āļ™āļĩāđ‰:

  1. āļĢāļđāļ›āđāļšāļšāđāļĨāļ°āļ§āļīāļ˜āļĩāđƒāļŠāđ‰āļžāļ·āđ‰āļ™āļāļēāļ™: āļ­āļ˜āļīāļšāļēāļĒ syntax āđāļĨāļ°āļ§āļīāļ˜āļĩāđƒāļŠāđ‰ $display
  2. āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļšāļāļąāļš system task āļ­āļ·āđˆāļ™ āđ†: āđ€āļŠāđˆāļ™ $write, $strobe, $monitor
  3. āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒāđāļĨāļ°āđ€āļ—āļ„āļ™āļīāļ„: āđ€āļŠāđˆāļ™ %d, %b, %h, %s
  4. āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡: āļžāļĢāđ‰āļ­āļĄāđ‚āļ„āđ‰āļ”āđƒāļ™ testbench
  5. āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄ display: āđ€āļŠāđˆāļ™ LCD āļŦāļĢāļ·āļ­ monitor

āļ”āđ‰āļ§āļĒāđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļ™āļĩāđ‰ āļœāļđāđ‰āļ­āđˆāļēāļ™āļ•āļąāđ‰āļ‡āđāļ•āđˆāļĢāļ°āļ”āļąāļšāđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™āļ–āļķāļ‡āļĢāļ°āļ”āļąāļšāļāļĨāļēāļ‡āļˆāļ°āļŠāļēāļĄāļēāļĢāļ–āđ€āļ‚āđ‰āļēāđƒāļˆāđāļĨāļ°āđƒāļŠāđ‰ $display āđƒāļ™ Verilog āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡āđāļĨāļ°āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

2. āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡ $display: āļ§āļīāļ˜āļĩāđ€āļ‚āļĩāļĒāļ™ āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™ āđāļĨāļ°āļ‚āđ‰āļ­āļ„āļ§āļĢāļĢāļ°āļ§āļąāļ‡

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡ $display

āđ‚āļ„āļĢāļ‡āļŠāļĢāđ‰āļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāđƒāļŠāđ‰ $display āđƒāļ™ Verilog āļĄāļĩāļ”āļąāļ‡āļ™āļĩāđ‰:

$display("āļŠāļ•āļĢāļīāļ‡āļŦāļĢāļ·āļ­āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒ", āļŠāļąāļāļāļēāļ“1, āļŠāļąāļāļāļēāļ“2, ...);
  • āļŠāđˆāļ§āļ™āļ‚āļ­āļ‡āļŠāļ•āļĢāļīāļ‡: āđƒāļŠāđˆāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŦāļĢāļ·āļ­āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒ (āđ€āļŠāđˆāļ™ %d, %b, %h)
  • āļ­āļēāļĢāđŒāļāļīāļ§āđ€āļĄāļ™āļ•āđŒ: āđƒāļŠāđˆāļŠāļ·āđˆāļ­āļŠāļąāļāļāļēāļ“āļŦāļĢāļ·āļ­āļ•āļąāļ§āđāļ›āļĢāļ—āļĩāđˆāļˆāļ°āļ–āļđāļāđāļŠāļ”āļ‡āļœāļĨāļ•āļēāļĄāļĢāļđāļ›āđāļšāļš

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡: āđāļŠāļ”āļ‡āļ„āđˆāļē clock counter āđāļĨāļ°āļŠāļąāļāļāļēāļ“

$display("Time=%0t : clk=%b, reset=%b", $time, clk, reset);

āļœāļĨāļĨāļąāļžāļ˜āđŒ: āđ€āļ§āļĨāļēāđƒāļ™āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āļžāļĢāđ‰āļ­āļĄāļ„āđˆāļēāļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“ clock āđāļĨāļ° reset āļˆāļ°āļ–āļđāļāđāļŠāļ”āļ‡

āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļ‚āļ­āļ‡ $display

  1. āļ•āļīāļ”āļ•āļēāļĄāļ„āļ§āļēāļĄāļ„āļ·āļšāļŦāļ™āđ‰āļēāļ‚āļ­āļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡
    āđƒāļŠāđˆ $display āđƒāļ™āļ•āļģāđāļŦāļ™āđˆāļ‡āđ€āļ‰āļžāļēāļ°āđ€āļžāļ·āđˆāļ­āļ”āļđāļ§āđˆāļēāđ‚āļ„āđ‰āļ”āļ—āļģāļ‡āļēāļ™āļ–āļķāļ‡āļˆāļļāļ”āđƒāļ”āđāļĨāđ‰āļ§
  2. āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āđˆāļēāļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“
    āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āđ€āļ‚āđ‰āļēāđƒāļˆāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļŦāļĢāļ·āļ­āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāļ–āļēāļ™āļ°āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™āđ€āļĄāļ·āđˆāļ­āđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āđ‡āļ™āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ
  3. āđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļ•āļēāļĄāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚
    āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļš if āđ€āļŠāđˆāļ™ if (reset) $display("Reset asserted at %0t", $time);

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ $display āđāļĨāļ° $write

$display āļˆāļ°āđ€āļžāļīāđˆāļĄāļāļēāļĢāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āđāļ•āđˆ $write āļˆāļ°āđ„āļĄāđˆāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆ

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡:

$display("Hello");
$display("World");

āļœāļĨāļĨāļąāļžāļ˜āđŒ:

Hello
World
$write("Hello");
$write("World");

āļœāļĨāļĨāļąāļžāļ˜āđŒ:

HelloWorld

āļ”āļąāļ‡āļ™āļąāđ‰āļ™ āļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢ log āļ—āļĩāđˆāļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒāđƒāļŦāđ‰āđƒāļŠāđ‰ $display āđāļ•āđˆāļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ•āđˆāļ­āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§āđƒāļŠāđ‰ $write

āļ‚āđ‰āļ­āļ„āļ§āļĢāļĢāļ°āļ§āļąāļ‡

  1. āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĄāļēāļāđ€āļāļīāļ™āđ„āļ›
    āļāļēāļĢāđƒāļŠāđ‰ $display āļ—āļļāļ clock āļˆāļ°āļ—āļģāđƒāļŦāđ‰ log āļĄāļĩāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđāļĨāļ°āļ­āđˆāļēāļ™āļĒāļēāļ
    → āļ„āļ§āļĢāđƒāļŠāđ‰āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚
  2. āđƒāļŠāđ‰āļāļēāļĢāđāļŠāļ”āļ‡āđ€āļ§āļĨāļē
    āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ $time āļŦāļĢāļ·āļ­ $realtime āđ€āļžāļ·āđˆāļ­āļ”āļđāđ€āļ§āļĨāļēāđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āđāļĄāđˆāļ™āļĒāļģ
  3. āđ€āļ›āđ‡āļ™ task āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
    $display āđƒāļŠāđ‰āđ„āļĄāđˆāđ„āļ”āđ‰āđƒāļ™āļāļēāļĢāļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒ (FPGA/ASIC) āļ•āđ‰āļ­āļ‡āđ€āļ‚āđ‰āļēāđƒāļˆāļ§āđˆāļēāđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļŠāļģāļŦāļĢāļąāļš debug āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™

3. āļāļēāļĢāđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļš System Task āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ: $display · $write · $strobe · $monitor

āļ™āļ­āļāļˆāļēāļ $display āđāļĨāđ‰āļ§ Verilog āļĒāļąāļ‡āļĄāļĩ system task āļ­āļ·āđˆāļ™ āđ† āļ—āļĩāđˆāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļ­āļĒāļđāđˆāļ—āļĩāđˆāļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒāđāļĨāļ°āđ€āļ§āļĨāļēāļ—āļĩāđˆāļ‚āđ‰āļ­āļĄāļđāļĨāļ–āļđāļāđāļŠāļ”āļ‡ āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆāđāļĨāļ°āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āđƒāļŦāđ‰āļ–āļđāļāļ•āđ‰āļ­āļ‡āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļ”āļĩāļšāļąāļāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļĄāļēāļāļ‚āļķāđ‰āļ™

$display: āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĄāļēāļ•āļĢāļāļēāļ™

  • āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī
    āđ€āļžāļīāđˆāļĄāļāļēāļĢāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī āļ—āļģāđƒāļŦāđ‰ log āļ–āļđāļāļˆāļąāļ”āđ€āļĢāļĩāļĒāļ‡āļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒ
  • āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™
    āđƒāļŠāđ‰āļšāđˆāļ­āļĒāļ—āļĩāđˆāļŠāļļāļ”āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢ debug āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡āļœāļĨāļ•āļēāļĄāđ€āļ§āļĨāļēāļ—āļĩāđˆāļāļģāļŦāļ™āļ”

$write: āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđ‚āļ”āļĒāđ„āļĄāđˆāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆ

  • āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī
    āđ„āļĄāđˆāđ€āļžāļīāđˆāļĄāļāļēāļĢāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆ āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļˆāļ°āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āļāļąāļ™
  • āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™
    āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāđāļŠāļ”āļ‡āļœāļĨāļŦāļĨāļēāļĒāļ„āđˆāļēāļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡āđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§
  • āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ $write("A=%d, ", a); $write("B=%dn", b); → āļœāļĨāļĨāļąāļžāļ˜āđŒ A=5, B=10 āđāļŠāļ”āļ‡āđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§

$strobe: āđāļŠāļ”āļ‡āļ„āđˆāļēāļŦāļĨāļąāļ‡āļˆāļēāļāļŠāļīāđ‰āļ™āļŠāļļāļ”āļĢāļ­āļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡

  • āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī
    āļˆāļ°āđāļŠāļ”āļ‡āļ„āđˆāļēāļŦāļĨāļąāļ‡āļˆāļēāļāļ—āļĩāđˆāļŠāļąāļāļāļēāļ“āļ—āļąāđ‰āļ‡āļŦāļĄāļ”āļ–āļđāļāļ›āļĢāļ°āđ€āļĄāļīāļ™āđ€āļŠāļĢāđ‡āļˆāđāļĨāđ‰āļ§āđƒāļ™āļĢāļ­āļšāļ›āļąāļˆāļˆāļļāļšāļąāļ™
  • āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™
    āļŠāđˆāļ§āļĒāļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡ race condition āđ€āļĄāļ·āđˆāļ­āļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļ“āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™
  • āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ $strobe("Time=%0t, signal=%b", $time, sig); → āđāļŠāļ”āļ‡āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢāđāļĨāđ‰āļ§

$monitor: āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļ„āđˆāļēāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļī

  • āļ„āļļāļ“āļŠāļĄāļšāļąāļ•āļī
    āļˆāļ°āđāļŠāļ”āļ‡āļœāļĨāļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡
  • āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™
    āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļ•āļīāļ”āļ•āļēāļĄāļŠāļąāļāļāļēāļ“āļ•āļĨāļ­āļ”āđ€āļ§āļĨāļē
  • āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡ $monitor("At %0t: a=%b, b=%b", $time, a, b); → āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆ a āļŦāļĢāļ·āļ­ b āđ€āļ›āļĨāļĩāđˆāļĒāļ™ āļˆāļ°āļĄāļĩ log āđāļŠāļ”āļ‡āļœāļĨ

āļ•āļēāļĢāļēāļ‡āđ€āļ›āļĢāļĩāļĒāļšāđ€āļ—āļĩāļĒāļš

Taskāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆāđ€āļ§āļĨāļēāļ—āļĩāđˆāđāļŠāļ”āļ‡āļœāļĨāļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļŦāļĨāļąāļ
$displayāļĄāļĩāļ—āļąāļ™āļ—āļĩāļ—āļĩāđˆāļ–āļđāļāđ€āļĢāļĩāļĒāļāļāļēāļĢāđāļŠāļ”āļ‡ log āļžāļ·āđ‰āļ™āļāļēāļ™
$writeāđ„āļĄāđˆāļĄāļĩāļ—āļąāļ™āļ—āļĩāļ—āļĩāđˆāļ–āļđāļāđ€āļĢāļĩāļĒāļāļāļēāļĢāđāļŠāļ”āļ‡āļŦāļĨāļēāļĒāļ„āđˆāļēāđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§
$strobeāļĄāļĩāļŦāļĨāļąāļ‡āļˆāļšāļĢāļ­āļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡āļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢ
$monitorāļĄāļĩāđ€āļĄāļ·āđˆāļ­āļŠāļąāļāļāļēāļ“āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļāļēāļĢāļ•āļīāļ”āļ•āļēāļĄāļŠāļąāļāļāļēāļ“āļ­āļĒāđˆāļēāļ‡āļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡

āđ€āļ„āļĨāđ‡āļ”āļĨāļąāļšāļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰

  • āđƒāļŠāđ‰ $display āđ€āļ›āđ‡āļ™āļŦāļĨāļąāļ: āļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒ āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™
  • āđƒāļŠāđ‰ $write āđ€āļĄāļ·āđˆāļ­āļ­āļĒāļēāļāļĢāļ§āļĄāļ‚āđ‰āļ­āļĄāļđāļĨāļŦāļĨāļēāļĒāļ„āđˆāļēāđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§
  • āđƒāļŠāđ‰ $strobe āđ€āļĄāļ·āđˆāļ­āļ­āļĒāļēāļāđ„āļ”āđ‰āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢāļŦāļĨāļąāļ‡āļˆāļēāļāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™āļ—āļąāđ‰āļ‡āļŦāļĄāļ”
  • āđƒāļŠāđ‰ $monitor āļŠāļģāļŦāļĢāļąāļšāļ•āļīāļ”āļ•āļēāļĄāļŠāļąāļāļāļēāļ“āđāļšāļšāđ€āļĢāļĩāļĒāļĨāđ„āļ—āļĄāđŒ

4. āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒāđāļĨāļ°āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļžāļīāđ€āļĻāļĐ

āđƒāļ™āļāļēāļĢāđƒāļŠāđ‰ $display āļŦāļĢāļ·āļ­ $write āđ€āļĢāļēāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđˆ “āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒâ€ āļĨāļ‡āđƒāļ™āļŠāļ•āļĢāļīāļ‡āđ€āļžāļ·āđˆāļ­āļ„āļ§āļšāļ„āļļāļĄāļ§āļīāļ˜āļĩāđāļŠāļ”āļ‡āļœāļĨāļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“āļŦāļĢāļ·āļ­āļ•āļąāļ§āđāļ›āļĢ āļ„āļĨāđ‰āļēāļĒāļāļąāļšāļāļēāļĢāđƒāļŠāđ‰ printf āļ‚āļ­āļ‡āļ āļēāļĐāļē C āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāļŠāđˆāļ§āļĒāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļāļēāļĢāļ”āļĩāļšāļąāļāđ„āļ”āđ‰āļĄāļēāļ

āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒāļžāļ·āđ‰āļ™āļāļēāļ™

āļŠāļąāļāļĨāļąāļāļĐāļ“āđŒāļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļœāļĨāļĨāļąāļžāļ˜āđŒ
%bāđ€āļĨāļ‚āļāļēāļ™āļŠāļ­āļ‡ (binary)1010
%dāđ€āļĨāļ‚āļāļēāļ™āļŠāļīāļš (decimal)10
%hāđ€āļĨāļ‚āļāļēāļ™āļŠāļīāļšāļŦāļ (hexadecimal)A
%oāđ€āļĨāļ‚āļāļēāļ™āđāļ›āļ” (octal)12
%cāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āđ‡āļ™āļ­āļąāļāļ‚āļĢāļ° ASCIIA
%sāđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āđ‡āļ™āļŠāļ•āļĢāļīāļ‡Hello
%tāđāļŠāļ”āļ‡āđ€āļ§āļĨāļēāļˆāļģāļĨāļ­āļ‡ (simulation time)#100
%māđāļŠāļ”āļ‡āļŠāļ·āđˆāļ­āđ‚āļĄāļ”āļđāļĨāđƒāļ™āļĨāļģāļ”āļąāļšāļŠāļąāđ‰āļ™top.u1.u2

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

  1. āđāļŠāļ”āļ‡āļŠāļąāļāļāļēāļ“āđƒāļ™āļŦāļĨāļēāļĒāļĢāļđāļ›āđāļšāļš
    reg [7:0] data = 8'b10101010; $display("data = %b (bin), %d (dec), %h (hex)", data, data, data);
    → āļœāļĨāļĨāļąāļžāļ˜āđŒ: data = 10101010 (bin), 170 (dec), AA (hex)
  2. āļ•āļĢāļ§āļˆāļŠāļ­āļšāđ‚āļĄāļ”āļđāļĨāđƒāļ™āļĨāļģāļ”āļąāļšāļŠāļąāđ‰āļ™
    $display("āđ‚āļĄāļ”āļđāļĨāļ›āļąāļˆāļˆāļļāļšāļąāļ™āļ„āļ·āļ­ %m");
    → āļœāļĨāļĨāļąāļžāļ˜āđŒ: āđ‚āļĄāļ”āļđāļĨāļ›āļąāļˆāļˆāļļāļšāļąāļ™āļ„āļ·āļ­ top.u1.counter
  3. āđāļŠāļ”āļ‡āđ€āļ§āļĨāļēāļˆāļģāļĨāļ­āļ‡
    $display("Time=%0t: clk=%b", $time, clk);
    → āļœāļĨāļĨāļąāļžāļ˜āđŒ: Time=100: clk=1

āđ€āļ—āļ„āļ™āļīāļ„āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļžāļīāđ€āļĻāļĐ

  • āļāļēāļĢāđ€āļ•āļīāļĄāļĻāļđāļ™āļĒāđŒāđāļĨāļ°āļāļģāļŦāļ™āļ”āļŦāļĨāļąāļ
    āđƒāļŠāđ‰ %0d āđ€āļŠāđˆāļ™ $display("Count=%04d", count);
    → āļœāļĨāļĨāļąāļžāļ˜āđŒ: Count=0012
  • āļĢāļ°āļšāļļāļ„āđˆāļē signed/unsigned
    %d āļ„āļ·āļ­ signed āļŠāđˆāļ§āļ™ %u āļ„āļ·āļ­ unsigned āļŦāļēāļāļ„āđˆāļēāļ•āļīāļ”āļĨāļšāđāļŠāļ”āļ‡āđ„āļĄāđˆāļ–āļđāļāļ•āđ‰āļ­āļ‡āđƒāļŦāđ‰āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒ
  • āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļŦāļĨāļēāļĒāļšāļĢāļĢāļ—āļąāļ”
    āđƒāļŠāđ‰ \n āđ€āļžāļ·āđˆāļ­āļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆ āđ€āļŠāđˆāļ™
    $display("Start of test\nSignal A=%b\nSignal B=%b", A, B);

āļ‚āđ‰āļ­āļ„āļ§āļĢāļĢāļ°āļ§āļąāļ‡

  • āļĢāļ°āļ§āļąāļ‡āđ€āļĢāļ·āđˆāļ­āļ‡āļ„āļ§āļēāļĄāļāļ§āđ‰āļēāļ‡āļšāļīāļ•: āļŦāļēāļāđƒāļŠāđ‰ %d āļāļąāļšāļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāļĄāļĩāļšāļīāļ•āļāļ§āđ‰āļēāļ‡ āļ­āļēāļˆāđ€āļāļīāļ”āļāļēāļĢāļ•āļąāļ”āļšāļīāļ•āļŦāļĢāļ·āļ­ sign extension
  • āļ„āđˆāļēāļ—āļĩāđˆāđ„āļĄāđˆāļāļģāļŦāļ™āļ” (X, Z): āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļšāļīāļ• X āļŦāļĢāļ·āļ­ Z āļ„āđˆāļēāđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰āļˆāļ°āđāļŠāļ”āļ‡āļ•āļĢāļ‡ āđ† āđƒāļ™ %b

5. āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡: āļāļēāļĢāđƒāļŠāđ‰ $display āđƒāļ™ Testbench āđāļĨāļ°āļ āļēāļĒāđƒāļ™āđ‚āļĄāļ”āļđāļĨ

āđƒāļ™āļŠāđˆāļ§āļ™āļ™āļĩāđ‰ āđ€āļĢāļēāļˆāļ°āļ™āļģāđ€āļŠāļ™āļ­āļ§āļīāļ˜āļĩāļāļēāļĢāđƒāļŠāđ‰ $display āļœāđˆāļēāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āđ‚āļ„āđ‰āļ”āļˆāļĢāļīāļ‡āđƒāļ™ Verilog āļ•āļąāđ‰āļ‡āđāļ•āđˆ testbench āļžāļ·āđ‰āļ™āļāļēāļ™āđ„āļ›āļˆāļ™āļ–āļķāļ‡āļāļēāļĢāļ”āļĩāļšāļąāļāļ•āļēāļĄāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™: āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđƒāļ™ Testbench

āļāļēāļĢāđƒāļŠāđˆ $display āđƒāļ™ testbench āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ‚āļ­āļ‡āļ§āļ‡āļˆāļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ„āļ”āđ‰āļ‡āđˆāļēāļĒāļ‚āļķāđ‰āļ™

module tb_counter;
  reg clk;
  reg reset;
  wire [3:0] count;

  // DUT (Device Under Test)
  counter uut (
    .clk(clk),
    .reset(reset),
    .count(count)
  );

  // āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“ clock
  initial begin
    clk = 0;
    forever #5 clk = ~clk;  // āļŠāļĨāļąāļšāļ—āļļāļ 5 āļŦāļ™āđˆāļ§āļĒāđ€āļ§āļĨāļē
  end

  // āļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāļ—āļ”āļŠāļ­āļš
  initial begin
    reset = 1;
    #10 reset = 0;

    #50 $finish;
  end

  // āđāļŠāļ”āļ‡āļŠāļ–āļēāļ™āļ°
  always @(posedge clk) begin
    $display("Time=%0t | reset=%b | count=%d", $time, reset, count);
  end
endmodule

āđƒāļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ™āļĩāđ‰ āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļ‚āļ­āļš rising edge āļ‚āļ­āļ‡ clock āļĄāļēāļ–āļķāļ‡ āļ„āđˆāļē reset āđāļĨāļ° count āļˆāļ°āļ–āļđāļāļžāļīāļĄāļžāđŒāļ­āļ­āļāļĄāļē āļ—āļģāđƒāļŦāđ‰āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ„āļ”āđ‰āļ—āļąāđ‰āļ‡āļˆāļēāļ waveform āđāļĨāļ°āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ log

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļ•āļēāļĄāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚

āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ if āđ€āļžāļ·āđˆāļ­āļ•āļĢāļ§āļˆāļŠāļ­āļšāđāļĨāļ°āļžāļīāļĄāļžāđŒ log āđ€āļ‰āļžāļēāļ°āđ€āļĄāļ·āđˆāļ­āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđ€āļ›āđ‡āļ™āļˆāļĢāļīāļ‡

always @(posedge clk) begin
  if (count == 4'd10) begin
    $display("āļ™āļąāļšāļ–āļķāļ‡ 10 āđāļĨāđ‰āļ§ (Time=%0t)", $time);
  end
end

→ āļŠāđˆāļ§āļĒāļĨāļ”āļ›āļĢāļīāļĄāļēāļ“ log āđ‚āļ”āļĒāđāļŠāļ”āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļŠāļģāļ„āļąāļ

āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļĩāļšāļąāļ

āđƒāļ™āļāļēāļĢāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ‚āđ‰āļ­āļœāļīāļ”āļžāļĨāļēāļ” āđ€āļĢāļēāļ­āļēāļˆāļžāļīāļĄāļžāđŒāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđ€āļ•āļ·āļ­āļ™āđ€āļĄāļ·āđˆāļ­āļ„āđˆāļēāđ„āļĄāđˆāđ€āļ›āđ‡āļ™āđ„āļ›āļ•āļēāļĄāļ—āļĩāđˆāļ„āļēāļ”āļŦāļ§āļąāļ‡

always @(posedge clk) begin
  if (count > 4'd12) begin
    $display("WARNING: āļ•āļĢāļ§āļˆāļžāļšāļāļēāļĢāļĨāđ‰āļ™āļ‚āļ­āļ‡ count! Time=%0t, value=%d", $time, count);
  end
end

→ āļ—āļģāđƒāļŦāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļžāļš bug āļŦāļĢāļ·āļ­āļžāļĪāļ•āļīāļāļĢāļĢāļĄāļ—āļĩāđˆāđ„āļĄāđˆāļ„āļēāļ”āļ„āļīāļ”āđ„āļ”āđ‰āđ€āļĢāđ‡āļ§āļ‚āļķāđ‰āļ™

āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļ“āļžāļĢāđ‰āļ­āļĄāļāļąāļ™

āđ€āļĄāļ·āđˆāļ­āļĄāļĩāļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļ“ āļ„āļ§āļĢāļĢāļ§āļĄāđ„āļ§āđ‰āđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰ log āļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒ

$display("Time=%0t | clk=%b | reset=%b | A=%h | B=%h | SUM=%h",
         $time, clk, reset, A, B, SUM);

āļŠāļĢāļļāļ›āļˆāļļāļ”āļŠāļģāļ„āļąāļāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

  • āđƒāļŠāđ‰āđƒāļ™ testbench āđ€āļžāļ·āđˆāļ­āļ”āļđāļ„āļ§āļēāļĄāļ„āļ·āļšāļŦāļ™āđ‰āļē
  • āļāļĢāļ­āļ‡ log āļ”āđ‰āļ§āļĒāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđ€āļžāļ·āđˆāļ­āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļ‚āđ‰āļ­āļĄāļđāļĨāđ€āļāļīāļ™āļˆāļģāđ€āļ›āđ‡āļ™
  • āđƒāļŠāđˆāļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđ€āļ•āļ·āļ­āļ™āđ€āļĄāļ·āđˆāļ­āļžāļšāđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļœāļīāļ”āļ›āļāļ•āļī
  • āļĢāļ§āļĄāļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļ“āđƒāļŦāđ‰āļ­āļĒāļđāđˆāđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§āđ€āļžāļ·āđˆāļ­āļ„āļ§āļēāļĄāļŠāļąāļ”āđ€āļˆāļ™

6. āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄ Display (āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļžāļīāļāđ€āļ‹āļĨ / āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ / āļ āļēāļž)

āļ—āļĩāđˆāļœāđˆāļēāļ™āļĄāļēāļŸāļąāļ‡āļāđŒāļŠāļąāļ™ $display āļ–āļđāļāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ log āđāļĨāļ°āļāļēāļĢāļ”āļĩāļšāļąāļāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡
āļ­āļĒāđˆāļēāļ‡āđ„āļĢāļāđ‡āļ•āļēāļĄ Verilog āļĒāļąāļ‡āļ–āļđāļāļ™āļģāļĄāļēāđƒāļŠāđ‰āļāļąāļšāļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­āđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡ āđ€āļŠāđˆāļ™ LCD, VGA āļŦāļĢāļ·āļ­ HDMI āļ­āļĩāļāļ”āđ‰āļ§āļĒ āđƒāļ™āļŠāđˆāļ§āļ™āļ™āļĩāđ‰āļˆāļ°āļ­āļ˜āļīāļšāļēāļĒāđāļ™āļ§āļ„āļīāļ”āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļšāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒ

āđāļ™āļ§āļ„āļīāļ”āļžāļ·āđ‰āļ™āļāļēāļ™āļ‚āļ­āļ‡āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄ Display

āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŦāļĢāļ·āļ­āļ āļēāļžāļšāļ™āļˆāļ­ āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ $display āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡ āđāļ•āđˆāļ•āđ‰āļ­āļ‡ āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­ āļ‚āļķāđ‰āļ™āļĄāļē āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāđƒāļŠāđ‰ āđ„āļ”āđ‰āđāļāđˆ:

  • HSYNC (Horizontal Sync): āļŠāļąāļāļāļēāļ“āļšāļ­āļāļāļēāļĢāļŠāļīāđ‰āļ™āļŠāļļāļ”āļŦāļ™āļķāđˆāļ‡āļšāļĢāļĢāļ—āļąāļ”
  • VSYNC (Vertical Sync): āļŠāļąāļāļāļēāļ“āļšāļ­āļāļāļēāļĢāļŠāļīāđ‰āļ™āļŠāļļāļ”āļŦāļ™āļķāđˆāļ‡āđ€āļŸāļĢāļĄ
  • RGB Data: āļ‚āđ‰āļ­āļĄāļđāļĨāļŠāļĩāļ‚āļ­āļ‡āļžāļīāļāđ€āļ‹āļĨ (āđ€āļŠāđˆāļ™ 24-bit color: 8-bit × 3)

āđƒāļ™ Verilog āļˆāļ°āđƒāļŠāđ‰ counter āđāļĨāļ° state machine āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āđ€āļŦāļĨāđˆāļēāļ™āļĩāđ‰ āđāļĨāļ°āļŠāđˆāļ‡āļ­āļ­āļāļ•āļēāļĄāđ€āļ§āļĨāļēāļ—āļĩāđˆāđ€āļŦāļĄāļēāļ°āļŠāļĄāđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āđ€āļāļīāļ”āļ āļēāļžāļšāļ™āļˆāļ­

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆ 1: āļāļēāļĢāđāļŠāļ”āļ‡āđāļ–āļšāļŠāļĩ (Color Bar)

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāļŠāļļāļ”āļ„āļ·āļ­āļāļēāļĢāđāļŠāļ”āļ‡āđāļ–āļšāļŠāļĩāļšāļ™āļˆāļ­

always @(posedge clk) begin
  if (h_counter < 100)       rgb <= 24'hFF0000; // āđāļ”āļ‡
  else if (h_counter < 200)  rgb <= 24'h00FF00; // āđ€āļ‚āļĩāļĒāļ§
  else if (h_counter < 300)  rgb <= 24'h0000FF; // āļ™āđ‰āļģāđ€āļ‡āļīāļ™
  else                       rgb <= 24'h000000; // āļ”āļģ
end

→ āļœāļĨāļĨāļąāļžāļ˜āđŒāļ„āļ·āļ­āļˆāļ°āđāļŠāļ”āļ‡āđāļ–āļšāļŠāļĩāđāļ”āļ‡ āđ€āļ‚āļĩāļĒāļ§ āļ™āđ‰āļģāđ€āļ‡āļīāļ™ āđ€āļĢāļĩāļĒāļ‡āļāļąāļ™āđƒāļ™āđāļ™āļ§āļ™āļ­āļ™

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆ 2: āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ

āļŠāļģāļŦāļĢāļąāļšāļ‚āđ‰āļ­āļ„āļ§āļēāļĄ āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰ Font ROM āļ‹āļķāđˆāļ‡āđ€āļāđ‡āļšāļĨāļ§āļ”āļĨāļēāļĒ dot āļ‚āļ­āļ‡āļ•āļąāļ§āļ­āļąāļāļĐāļĢ āļˆāļēāļāļ™āļąāđ‰āļ™āļ™āļģāļĄāļēāđāļ›āļĨāļ‡āđ€āļ›āđ‡āļ™āļžāļīāļāđ€āļ‹āļĨ

// āđāļŠāļ”āļ‡āļ•āļąāļ§āļ­āļąāļāļĐāļĢ 'A' āđ‚āļ”āļĒāļ­āđ‰āļēāļ‡āļ­āļīāļ‡āļˆāļēāļ Font ROM
if (font_rom[char_code][y][x] == 1'b1)
    rgb <= 24'hFFFFFF;  // āļŠāļĩāļ‚āļēāļ§
else
    rgb <= 24'h000000;  // āļžāļ·āđ‰āļ™āļŦāļĨāļąāļ‡āļŠāļĩāļ”āļģ

→ āļ—āļģāđƒāļŦāđ‰āļ•āļąāļ§āļ­āļąāļāļĐāļĢ â€œA” āļ–āļđāļāļ§āļēāļ”āļĨāļ‡āļšāļ™āļŦāļ™āđ‰āļēāļˆāļ­

āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļ—āļĩāđˆ 3: āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļž

āļāļēāļĢāđāļŠāļ”āļ‡āļ āļēāļžāļ—āļģāđ‚āļ”āļĒāđ‚āļŦāļĨāļ”āļ‚āđ‰āļ­āļĄāļđāļĨāļšāļīāļ•āđāļĄāļ› (bitmap) āļˆāļēāļ ROM āļŦāļĢāļ·āļ­āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģāļ āļēāļĒāļ™āļ­āļ āđāļĨāđ‰āļ§āļ™āļģāđ„āļ›āđāļŠāļ”āļ‡āļœāļĨāđ€āļ›āđ‡āļ™āļžāļīāļāđ€āļ‹āļĨ

rgb <= image_rom[addr];  // āļ­āđˆāļēāļ™āļ„āđˆāļēāļŠāļĩāļˆāļēāļ ROM

āđƒāļ™āļĢāļ°āļšāļš embedded āļ—āļĩāđˆāđƒāļŠāđ‰ FPGA āļ§āļīāļ˜āļĩāļ™āļĩāđ‰āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāļĄāļēāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāđ„āļ­āļ„āļ­āļ™āļŦāļĢāļ·āļ­āđ‚āļĨāđ‚āļāđ‰āļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļāđ„āļ”āđ‰

āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļšāļāļēāļĢāđƒāļŠāđ‰ $display āļŠāļģāļŦāļĢāļąāļš debug

  • $display = āļāļēāļĢāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ (āđƒāļŠāđ‰āđ€āļ‰āļžāļēāļ°āļāļēāļĢāļˆāļģāļĨāļ­āļ‡)
  • āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­āļˆāļĢāļīāļ‡ = āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­ (āļŠāļēāļĄāļēāļĢāļ–āļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒāđ„āļ”āđ‰)

āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āļĄāļĩāļ§āļąāļ•āļ–āļļāļ›āļĢāļ°āļŠāļ‡āļ„āđŒāļ•āđˆāļēāļ‡āļāļąāļ™ āđāļ•āđˆāļœāļđāđ‰āđ€āļĢāļĩāļĒāļ™ Verilog āļĄāļąāļāļŠāļąāļšāļŠāļ™āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ:

  • “āļ­āļĒāļēāļāļ”āļđāļ„āđˆāļēāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡â€ → āđƒāļŠāđ‰ $display
  • “āļ­āļĒāļēāļāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āļšāļ™āļˆāļ­â€ → āļ•āđ‰āļ­āļ‡āđ€āļ‚āļĩāļĒāļ™āļ§āļ‡āļˆāļĢāļ„āļ§āļšāļ„āļļāļĄāļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­

āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ

  • āļšāļ­āļĢāđŒāļ” FPGA āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļĻāļķāļāļĐāļē āļĄāļąāļāđƒāļŠāđ‰ 7-segment LED āļŦāļĢāļ·āļ­ LCD āļ‚āļ™āļēāļ”āđ€āļĨāđ‡āļ āļŠāļģāļŦāļĢāļąāļšāđāļŠāļ”āļ‡āļœāļĨ
  • āļŦāļēāļāļžāļąāļ’āļ™āļēāđ€āļžāļīāđˆāļĄāđ€āļ•āļīāļĄ āļ­āļēāļˆāļ—āļģ VGA/HDMI output āļŠāļģāļŦāļĢāļąāļšāđ€āļāļĄāļŦāļĢāļ·āļ­ GUI āđ„āļ”āđ‰
  • āđ€āļĄāļ·āđˆāļ­āļĢāļ§āļĄāļ„āļ§āļēāļĄāļĢāļđāđ‰āļāļēāļĢāđƒāļŠāđ‰ $display (āļŠāļģāļŦāļĢāļąāļšāļˆāļģāļĨāļ­āļ‡) āļāļąāļšāļ„āļ§āļēāļĄāļĢāļđāđ‰āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­ (āļŠāļģāļŦāļĢāļąāļšāļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒ) āļˆāļ°āļ—āļģāđƒāļŦāđ‰āļ„āļ§āļšāļ„āļļāļĄāļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđ„āļ”āđ‰āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡āđ‚āļĨāļ

7. āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āđāļĨāļ°āđ€āļ„āļĨāđ‡āļ”āļĨāļąāļšāļ•āļēāļĄāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒ

āđƒāļ™ Verilog āļ„āļģāļ§āđˆāļē “āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨ” āļĄāļĩ 2 āļ„āļ§āļēāļĄāļŦāļĄāļēāļĒāļŦāļĨāļąāļ āđ„āļ”āđ‰āđāļāđˆ āļāļēāļĢāđƒāļŠāđ‰ task āļ•āļĢāļ°āļāļđāļĨ $display āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡ āđāļĨāļ° āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­āđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āđƒāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒ āļāļēāļĢāđ€āļ‚āđ‰āļēāđƒāļˆāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āđāļĨāļ°āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļ­āļĒāđˆāļēāļ‡āđ€āļŦāļĄāļēāļ°āļŠāļĄāļˆāļ°āļŠāđˆāļ§āļĒāđ€āļžāļīāđˆāļĄāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāđƒāļ™āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļĨāļ°āļ”āļĩāļšāļąāļ

āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡ (Simulation)

  1. āļāļēāļĢāđƒāļŠāđ‰ $display āđ€āļ›āđ‡āļ™ debug log
    • āđāļŠāļ”āļ‡āļ„āđˆāļēāļ‚āļ­āļ‡āļ•āļąāļ§āđāļ›āļĢāļŦāļĢāļ·āļ­āļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāļŠāļģāļ„āļąāļāđ€āļžāļ·āđˆāļ­āļĒāļ·āļ™āļĒāļąāļ™āļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ–āļđāļāļ•āđ‰āļ­āļ‡
    • āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļ•āļĢāļ§āļˆāļŠāļ­āļšāļ„āđˆāļēāļ•āļēāļĄāđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚ āđ€āļŠāđˆāļ™ counter āļŦāļĢāļ·āļ­ flag
  2. āļŦāļĨāļĩāļāđ€āļĨāļĩāđˆāļĒāļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļĄāļēāļāđ€āļāļīāļ™āđ„āļ›
    • āļŦāļēāļāđāļŠāļ”āļ‡āļœāļĨāļ—āļļāļ clock āļˆāļ°āļ—āļģāđƒāļŦāđ‰ log āļĄāļĩāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāđ€āļāļīāļ™āđ„āļ›
    • āļ„āļ§āļĢāļāļĢāļ­āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļ—āļĩāđˆāļŠāļģāļ„āļąāļ āđ€āļŠāđˆāļ™ if (state == ERROR) $display("āđ€āļāļīāļ” ERROR āļ—āļĩāđˆ %0t", $time);
  3. āļāļēāļĢāđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰ task āļ­āļ·āđˆāļ™ āđ† āļĢāđˆāļ§āļĄāļāļąāļ™
    • $monitor → āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ•āļīāļ”āļ•āļēāļĄāļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢāļ”āļđāļ•āļĨāļ­āļ”āđ€āļ§āļĨāļē
    • $strobe → āđƒāļŠāđ‰āđ€āļĄāļ·āđˆāļ­āļ­āļĒāļēāļāđ„āļ”āđ‰āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢāļŦāļĨāļąāļ‡āļˆāļšāļĢāļ­āļšāļāļēāļĢāļ›āļĢāļ°āđ€āļĄāļīāļ™
    • $write → āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļąāļ”āļĢāļđāļ›āđāļšāļš log āđāļšāļšāļŦāļĨāļēāļĒāļ„āđˆāļēāđƒāļ™āļšāļĢāļĢāļ—āļąāļ”āđ€āļ”āļĩāļĒāļ§

āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļāļąāļšāļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļˆāļĢāļīāļ‡ (Display Control)

  1. āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļ”āđ‰āļ§āļĒ 7-segment
    • āđ€āļ›āđ‡āļ™āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļžāļ·āđ‰āļ™āļāļēāļ™āļ—āļĩāđˆāļ™āļīāļĒāļĄāđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļœāļđāđ‰āđ€āļĢāļīāđˆāļĄāļ•āđ‰āļ™ FPGA
    • āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰āļ„āļ§āļšāļ„āļđāđˆāļāļąāļš $display āđƒāļ™ simulation āđ€āļžāļ·āđˆāļ­āļĒāļ·āļ™āļĒāļąāļ™āļœāļĨāļĨāļąāļžāļ˜āđŒ
  2. āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄ LCD/VGA
    • āđƒāļŠāđ‰ font ROM āļŦāļĢāļ·āļ­ image ROM āđ€āļžāļ·āđˆāļ­āļŠāļĢāđ‰āļēāļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāđāļĨāļ°āļ āļēāļžāļšāļ™āļˆāļ­
    • āļŠāļēāļĄāļēāļĢāļ–āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ‚āļ”āļĒāđƒāļŠāđ‰ $display āļĢāļ°āļŦāļ§āđˆāļēāļ‡ simulation āđ€āļžāļ·āđˆāļ­āļ”āļđāļ§āđˆāļēāļ„āđˆāļēāļŠāļąāļāļāļēāļ“āļ–āļđāļāļŠāļĢāđ‰āļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡
  3. Overlay āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļĩāļšāļąāļ
    • āļŠāļēāļĄāļēāļĢāļ–āļ‹āđ‰āļ­āļ™āļ‚āđ‰āļ­āļĄāļđāļĨ debug āđ€āļŠāđˆāļ™ āļ„āđˆāļē counter āļŦāļĢāļ·āļ­āļžāļīāļāļąāļ”āļĨāļ‡āļšāļ™āļ āļēāļžāļˆāļĢāļīāļ‡
    • āļ§āļīāļ˜āļĩāļ™āļĩāđ‰āļŠāđˆāļ§āļĒāđƒāļŦāđ‰ “āļŦāļ™āđ‰āļēāļˆāļ­â€ āļāļĨāļēāļĒāđ€āļ›āđ‡āļ™āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­ debug āđ„āļ”āđ‰āđ‚āļ”āļĒāļ•āļĢāļ‡

āđ€āļ„āļĨāđ‡āļ”āļĨāļąāļšāđƒāļ™āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡

  • āļ—āļģāļ‡āļēāļ™āđ€āļ›āđ‡āļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™: āļˆāļēāļ Simulation → āđ„āļ›āļĒāļąāļ‡ Hardware
    āļ•āļĢāļ§āļˆāļŠāļ­āļšāļāļēāļĢāļ—āļģāļ‡āļēāļ™āļ”āđ‰āļ§āļĒ $display āļāđˆāļ­āļ™ āđāļĨāđ‰āļ§āļˆāļķāļ‡āđ€āļ‚āļĩāļĒāļ™āļ§āļ‡āļˆāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­āļˆāļĢāļīāļ‡
  • āđƒāļŠāđ‰āļ—āļąāđ‰āļ‡ Log āđāļĨāļ° Waveform āļĢāđˆāļ§āļĄāļāļąāļ™
    āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļˆāļēāļ $display āļŠāđˆāļ§āļĒāļ”āļđāđ€āļ§āļĨāļēāđāļĨāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒ āļ‚āļ“āļ°āļ—āļĩāđˆ waveform āđāļŠāļ”āļ‡āļĢāļēāļĒāļĨāļ°āđ€āļ­āļĩāļĒāļ”āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡ â†’ āđ€āļĄāļ·āđˆāļ­āđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļ™āļˆāļ°āļŠāđˆāļ§āļĒāļ”āļĩāļšāļąāļāđ„āļ”āđ‰āđāļĄāđˆāļ™āļĒāļģāļ‚āļķāđ‰āļ™
  • āļŠāļĢāđ‰āļēāļ‡āļĄāļēāļ•āļĢāļāļēāļ™ Log āļŠāļģāļŦāļĢāļąāļšāļ—āļĩāļĄ
    āļŦāļēāļāļ—āļģāļ‡āļēāļ™āđ€āļ›āđ‡āļ™āļ—āļĩāļĄ āļ„āļ§āļĢāļāļģāļŦāļ™āļ”āļĢāļđāļ›āđāļšāļšāļ‚āđ‰āļ­āļ„āļ§āļēāļĄ $display āđƒāļŦāđ‰āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™ (āđ€āļŠāđˆāļ™ āļĄāļĩ prefix āļŦāļĢāļ·āļ­āđāļŠāļ”āļ‡āđ€āļ§āļĨāļēāđ€āļŠāļĄāļ­) āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ­āđˆāļēāļ™ log āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ

āļŠāļĢāļļāļ›

  • $display āđāļĨāļ° task āļ—āļĩāđˆāđ€āļāļĩāđˆāļĒāļ§āļ‚āđ‰āļ­āļ‡ = āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡
  • āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­ = āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­āđƒāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļˆāļĢāļīāļ‡
  • āđ€āļĄāļ·āđˆāļ­āđ€āļĨāļ·āļ­āļāđƒāļŠāđ‰āļ­āļĒāđˆāļēāļ‡āļ–āļđāļāļ•āđ‰āļ­āļ‡ āđāļĨāļ°āļœāļŠāļĄāļœāļŠāļēāļ™āļ—āļąāđ‰āļ‡āļŠāļ­āļ‡ āļˆāļ°āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļāļēāļĢāļžāļąāļ’āļ™āļēāđāļĨāļ°āļ”āļĩāļšāļąāļāļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļžāļŠāļđāļ‡āļŠāļļāļ”

8. FAQ (āļ„āļģāļ–āļēāļĄāļ—āļĩāđˆāļžāļšāļšāđˆāļ­āļĒāđāļĨāļ°āļ„āļģāļ•āļ­āļš)

Q1. āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ $display āđāļĨāļ° $monitor āļ„āļ·āļ­āļ­āļ°āđ„āļĢ?

A. $display āļˆāļ°āļžāļīāļĄāļžāđŒāļœāļĨ āđ€āļžāļĩāļĒāļ‡āļ„āļĢāļąāđ‰āļ‡āđ€āļ”āļĩāļĒāļ§āđ€āļĄāļ·āđˆāļ­āļ–āļđāļāđ€āļĢāļĩāļĒāļ āļ‚āļ“āļ°āļ—āļĩāđˆ $monitor āļˆāļ°āļžāļīāļĄāļžāđŒāļœāļĨ āļ—āļļāļāļ„āļĢāļąāđ‰āļ‡āļ—āļĩāđˆāļŠāļąāļāļāļēāļ“āļ—āļĩāđˆāļāļģāļŦāļ™āļ”āļĄāļĩāļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡

  • āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļš debug āđāļšāļšāļ„āļĢāļąāđ‰āļ‡āđ€āļ”āļĩāļĒāļ§ â†’ $display
  • āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļ•āļīāļ”āļ•āļēāļĄāļ•āđˆāļ­āđ€āļ™āļ·āđˆāļ­āļ‡ â†’ $monitor

Q2. āļĄāļĩāļŠāļ–āļēāļ™āļāļēāļĢāļ“āđŒāđƒāļ”āļšāđ‰āļēāļ‡āļ—āļĩāđˆāļ„āļ§āļĢāđƒāļŠāđ‰ $strobe?

A. $strobe āļˆāļ°āļžāļīāļĄāļžāđŒāļ„āđˆāļēāļŦāļĨāļąāļ‡āļˆāļēāļāļŠāļīāđ‰āļ™āļŠāļļāļ”āļĢāļ­āļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡ āļ—āļģāđƒāļŦāđ‰āđ„āļ”āđ‰āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢ
āđ€āļŠāđˆāļ™ āđ€āļĄāļ·āđˆāļ­āļŠāļąāļāļāļēāļ“āļŦāļĨāļēāļĒāļ•āļąāļ§āđ€āļ›āļĨāļĩāđˆāļĒāļ™āļžāļĢāđ‰āļ­āļĄāļāļąāļ™ $display āļ­āļēāļˆāđāļŠāļ”āļ‡āļ„āđˆāļēāļŠāļąāđˆāļ§āļ„āļĢāļēāļ§ āđāļ•āđˆ $strobe āļˆāļ°āđāļŠāļ”āļ‡āļ„āđˆāļēāļ—āļĩāđˆāļ–āļđāļāļ›āļĢāļ°āđ€āļĄāļīāļ™āđ€āļŠāļĢāđ‡āļˆāđāļĨāđ‰āļ§

Q3. āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒ %m āđƒāļŠāđ‰āļ—āļģāļ­āļ°āđ„āļĢ?

A. %m āđƒāļŠāđ‰āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡ āļŠāļ·āđˆāļ­āđ‚āļĄāļ”āļđāļĨāļ•āļēāļĄāļĨāļģāļ”āļąāļšāļŠāļąāđ‰āļ™ āđ€āļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ­āļ­āļāđāļšāļšāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆ āđ€āļžāļĢāļēāļ°āļŠāđˆāļ§āļĒāļĢāļ°āļšāļļāļ§āđˆāļē log āļĄāļēāļˆāļēāļāđ‚āļĄāļ”āļđāļĨāđƒāļ”

$display("āđ‚āļĄāļ”āļđāļĨāļ›āļąāļˆāļˆāļļāļšāļąāļ™: %m");

āļœāļĨāļĨāļąāļžāļ˜āđŒ:

āđ‚āļĄāļ”āļđāļĨāļ›āļąāļˆāļˆāļļāļšāļąāļ™: top.u1.counter

Q4. āļ–āđ‰āļēāđƒāļŠāđ‰ $display āļˆāļģāļ™āļ§āļ™āļĄāļēāļ log āļˆāļ°āļĄāļĩāļ‚āļ™āļēāļ”āđƒāļŦāļāđˆāļĄāļēāļ āļ„āļ§āļĢāļ—āļģāļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

A. āļĄāļĩāļ§āļīāļ˜āļĩāđāļāđ‰āļ”āļąāļ‡āļ™āļĩāđ‰:

  • āđƒāļŠāđ‰ if āđ€āļžāļ·āđˆāļ­āļāļĢāļ­āļ‡āđ€āļ‰āļžāļēāļ°āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āļ—āļĩāđˆāļ•āđ‰āļ­āļ‡āļāļēāļĢ
  • āļžāļīāļĄāļžāđŒāđ€āļ‰āļžāļēāļ°āđ€āļŦāļ•āļļāļāļēāļĢāļ“āđŒāļŠāļģāļ„āļąāļāļŦāļĢāļ·āļ­ error
  • āđƒāļŠāđ‰ $monitor āđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļēāļĄāļŠāļąāļāļāļēāļ“āļŠāļģāļ„āļąāļāđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
  • āļŠāđˆāļ‡āļ­āļ­āļāđ„āļ›āļĒāļąāļ‡āđ„āļŸāļĨāđŒ log āđāļĨāđ‰āļ§āđƒāļŠāđ‰āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļ āļēāļĒāļ™āļ­āļāļāļĢāļ­āļ‡āļ‚āđ‰āļ­āļĄāļđāļĨ

Q5. āļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ $display āđƒāļ™āļāļēāļĢāļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒ (FPGA/ASIC) āđ„āļ”āđ‰āļŦāļĢāļ·āļ­āđ„āļĄāđˆ?

A. āđ„āļĄāđˆāđ„āļ”āđ‰ $display āđ€āļ›āđ‡āļ™ task āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āđāļĨāļ°āļˆāļ°āļ–āļđāļāļĨāļ°āđ€āļ§āđ‰āļ™āđƒāļ™āļ‚āļąāđ‰āļ™āļ•āļ­āļ™āļāļēāļĢāļŠāļąāļ‡āđ€āļ„āļĢāļēāļ°āļŦāđŒ āļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡ āļ•āđ‰āļ­āļ‡āđƒāļŠāđ‰āļ§āļ‡āļˆāļĢāđ€āļŠāđˆāļ™ 7-segment LED, LCD āļŦāļĢāļ·āļ­ VGA controller

Q6. āļ–āđ‰āļēāļ­āļĒāļēāļāđāļŠāļ”āļ‡āļ‚āđ‰āļ­āļ„āļ§āļēāļĄāļŦāļĢāļ·āļ­āļ āļēāļžāļšāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļˆāļĢāļīāļ‡āļ„āļ§āļĢāļ—āļģāļ­āļĒāđˆāļēāļ‡āđ„āļĢ?

A. āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“āļ§āļīāļ”āļĩāđ‚āļ­ āđ„āļĄāđˆāļŠāļēāļĄāļēāļĢāļ–āđƒāļŠāđ‰ $display āđ„āļ”āđ‰

  • 7-segment → āđāļŠāļ”āļ‡āļ•āļąāļ§āđ€āļĨāļ‚āļ­āļĒāđˆāļēāļ‡āļ‡āđˆāļēāļĒ
  • VGA/LCD → āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“ HSYNC, VSYNC, RGB
  • āļ‚āđ‰āļ­āļ„āļ§āļēāļĄ â†’ āđƒāļŠāđ‰ font ROM āļŠāļģāļŦāļĢāļąāļšāļ•āļąāļ§āļ­āļąāļāļĐāļĢ
  • āļ āļēāļž â†’ āđ‚āļŦāļĨāļ” bitmap āļˆāļēāļ ROM āļŦāļĢāļ·āļ­āļŦāļ™āđˆāļ§āļĒāļ„āļ§āļēāļĄāļˆāļģ

9. āļŠāļĢāļļāļ›āđāļĨāļ°āļāđ‰āļēāļ§āļ•āđˆāļ­āđ„āļ›

āļŠāļĢāļļāļ›āđ€āļ™āļ·āđ‰āļ­āļŦāļēāļšāļ—āļ„āļ§āļēāļĄ

āļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āđ„āļ”āđ‰āļ­āļ˜āļīāļšāļēāļĒāđ€āļāļĩāđˆāļĒāļ§āļāļąāļš â€œdisplay” āđƒāļ™ Verilog āļ•āļąāđ‰āļ‡āđāļ•āđˆāļžāļ·āđ‰āļ™āļāļēāļ™āđ„āļ›āļˆāļ™āļ–āļķāļ‡āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰āļ‡āļēāļ™ āđ‚āļ”āļĒāļŠāļĢāļļāļ›āļ›āļĢāļ°āđ€āļ”āđ‡āļ™āļŠāļģāļ„āļąāļāđ„āļ”āđ‰āļ”āļąāļ‡āļ™āļĩāđ‰:

  1. $display āļžāļ·āđ‰āļ™āļāļēāļ™
    • āđƒāļŠāđ‰āđāļŠāļ”āļ‡āļ„āđˆāļēāļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“āļŦāļĢāļ·āļ­āļ•āļąāļ§āđāļ›āļĢāļĢāļ°āļŦāļ§āđˆāļēāļ‡āļāļēāļĢāļˆāļģāļĨāļ­āļ‡ āļ„āļĨāđ‰āļēāļĒāļāļąāļš printf āđƒāļ™āļ āļēāļĐāļē C
  2. āļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļāļąāļš task āļ­āļ·āđˆāļ™ āđ†
    • $write → āđāļŠāļ”āļ‡āļœāļĨāđ‚āļ”āļĒāđ„āļĄāđˆāļ‚āļķāđ‰āļ™āļšāļĢāļĢāļ—āļąāļ”āđƒāļŦāļĄāđˆ
    • $strobe → āđāļŠāļ”āļ‡āļ„āđˆāļēāļ—āļĩāđˆāđ€āļŠāļ–āļĩāļĒāļĢāļŦāļĨāļąāļ‡āļŠāļīāđ‰āļ™āļŠāļļāļ”āļĢāļ­āļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡
    • $monitor → āđāļŠāļ”āļ‡āļœāļĨāļ­āļąāļ•āđ‚āļ™āļĄāļąāļ•āļīāđ€āļĄāļ·āđˆāļ­āļŠāļąāļāļāļēāļ“āđ€āļ›āļĨāļĩāđˆāļĒāļ™
  3. āļāļēāļĢāđƒāļŠāđ‰āļŸāļ­āļĢāđŒāđāļĄāļ•āļŠāđ€āļ›āļ„āļīāđ„āļŸāđ€āļ­āļ­āļĢāđŒ
    • āđ€āļŠāđˆāļ™ %b, %d, %h, %m, %t āđ€āļžāļ·āđˆāļ­āļ—āļģāđƒāļŦāđ‰ log āļ­āđˆāļēāļ™āļ‡āđˆāļēāļĒāđāļĨāļ°āļĄāļĩāļ›āļĢāļ°āđ‚āļĒāļŠāļ™āđŒāļĄāļēāļāļ‚āļķāđ‰āļ™
  4. āļ•āļąāļ§āļ­āļĒāđˆāļēāļ‡āļāļēāļĢāđƒāļŠāđ‰āļ‡āļēāļ™āļˆāļĢāļīāļ‡
    • āđāļ—āļĢāļ $display āđƒāļ™ testbench āđ€āļžāļ·āđˆāļ­āļ•āļīāļ”āļ•āļēāļĄāļ„āļ§āļēāļĄāļ„āļ·āļšāļŦāļ™āđ‰āļē
    • āđƒāļŠāđ‰āđ€āļ‡āļ·āđˆāļ­āļ™āđ„āļ‚āđ€āļžāļ·āđˆāļ­āđāļŠāļ”āļ‡ log āđ€āļ‰āļžāļēāļ°āđ€āļĄāļ·āđˆāļ­āļˆāļģāđ€āļ›āđ‡āļ™ āļ—āļģāđƒāļŦāđ‰ debug āļĄāļĩāļ›āļĢāļ°āļŠāļīāļ—āļ˜āļīāļ āļēāļž
  5. āļāļēāļĢāļ›āļĢāļ°āļĒāļļāļāļ•āđŒāđƒāļŠāđ‰āđƒāļ™āļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­
    • $display āđƒāļŠāđ‰āļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļˆāļģāļĨāļ­āļ‡āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™
    • āļŦāļēāļāļ•āđ‰āļ­āļ‡āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļˆāļĢāļīāļ‡āļšāļ™ FPGA āļ•āđ‰āļ­āļ‡āļŠāļĢāđ‰āļēāļ‡āļŠāļąāļāļāļēāļ“ HSYNC, VSYNC, RGB
    • āđ€āļĢāļīāđˆāļĄāļ•āļąāđ‰āļ‡āđāļ•āđˆ 7-segment āđ„āļ›āļˆāļ™āļ–āļķāļ‡ VGA/HDMI āđ„āļ”āđ‰

āļāđ‰āļēāļ§āļ•āđˆāļ­āđ„āļ›

  • āļĻāļķāļāļĐāļēāļ•āđˆāļ­āļĒāļ­āļ”āđ„āļ›āļ—āļĩāđˆ SystemVerilog
    → āļ āļēāļ„āļ•āđˆāļ­āļ‚āļ­āļ‡ Verilog āļ—āļĩāđˆāļĄāļĩāļŸāļĩāđ€āļˆāļ­āļĢāđŒ debug āļ‚āļąāđ‰āļ™āļŠāļđāļ‡ āđ€āļŠāđˆāļ™ assertion āđāļĨāļ° $display āļ—āļĩāđˆāļ–āļđāļāļ›āļĢāļąāļšāļ›āļĢāļļāļ‡
  • āđƒāļŠāđ‰āļĢāđˆāļ§āļĄāļāļąāļš waveform viewer
    → āļœāļŠāļēāļ™ log āļˆāļēāļ $display āđ€āļ‚āđ‰āļēāļāļąāļš waveform āđ€āļžāļ·āđˆāļ­āļ”āļđāļ—āļąāđ‰āļ‡āļ„āđˆāļēāđ€āļŠāļīāļ‡āļ•āļąāļ§āđ€āļĨāļ‚āđāļĨāļ°āļāļēāļĢāđ€āļ›āļĨāļĩāđˆāļĒāļ™āđāļ›āļĨāļ‡āļ‚āļ­āļ‡āļŠāļąāļāļāļēāļ“
  • āđ€āļĢāļĩāļĒāļ™āļĢāļđāđ‰āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāļšāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļˆāļĢāļīāļ‡
    → āļ—āļ”āļĨāļ­āļ‡āđ‚āļ„āļĢāļ‡āļāļēāļĢāđ€āļĨāđ‡āļ āđ† āđ€āļŠāđˆāļ™ 7-segment āļŦāļĢāļ·āļ­ LCD āđ€āļžāļ·āđˆāļ­āđ€āļ‚āđ‰āļēāđƒāļˆāļ„āļ§āļēāļĄāđāļ•āļāļ•āđˆāļēāļ‡āļĢāļ°āļŦāļ§āđˆāļēāļ‡ simulation āđāļĨāļ° hardware
  • āļāļēāļĢāļ—āļģāļ‡āļēāļ™āđ€āļ›āđ‡āļ™āļ—āļĩāļĄ
    → āļ„āļ§āļĢāļāļģāļŦāļ™āļ”āļĄāļēāļ•āļĢāļāļēāļ™āļĢāļđāļ›āđāļšāļšāļ‚āđ‰āļ­āļ„āļ§āļēāļĄ $display āđƒāļŦāđ‰āđ€āļŦāļĄāļ·āļ­āļ™āļāļąāļ™ āđ€āļžāļ·āđˆāļ­āđƒāļŦāđ‰āļ—āļĩāļĄāļ­āđˆāļēāļ™ log āđ„āļ”āđ‰āļ‡āđˆāļēāļĒ

āļšāļ—āļŠāđˆāļ‡āļ—āđ‰āļēāļĒ

$display āđ„āļĄāđˆāđ„āļ”āđ‰āđ€āļ›āđ‡āļ™āđ€āļžāļĩāļĒāļ‡āđāļ„āđˆ “āļāļēāļĢāļžāļīāļĄāļžāđŒāļ‚āđ‰āļ­āļ„āļ§āļēāļĄâ€ āđ€āļ—āđˆāļēāļ™āļąāđ‰āļ™ āđāļ•āđˆāđ€āļ›āđ‡āļ™ āđ€āļ„āļĢāļ·āđˆāļ­āļ‡āļĄāļ·āļ­āļŠāļģāļ„āļąāļāļŠāļģāļŦāļĢāļąāļšāļāļēāļĢāļ”āļĩāļšāļąāļāđƒāļ™āļāļēāļĢāļˆāļģāļĨāļ­āļ‡ āđāļĨāļ°āđ€āļĄāļ·āđˆāļ­āļāđ‰āļēāļ§āđ€āļ‚āđ‰āļēāļŠāļđāđˆāđ‚āļĨāļāļ‚āļ­āļ‡ â€œāļāļēāļĢāļ„āļ§āļšāļ„āļļāļĄāļˆāļ­â€ āļ”āđ‰āļ§āļĒ FPGA āļāđ‡āļˆāļ°āđ„āļ”āđ‰āļŠāļąāļĄāļœāļąāļŠāļ„āļ§āļēāļĄāļŠāļ™āļļāļāđƒāļ™āļāļēāļĢāļŠāļĢāđ‰āļēāļ‡āļāļĢāļēāļŸāļīāļāļˆāļĢāļīāļ‡āļšāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒ

āļŦāļ§āļąāļ‡āļ§āđˆāļēāļšāļ—āļ„āļ§āļēāļĄāļ™āļĩāđ‰āļˆāļ°āļŠāđˆāļ§āļĒāđƒāļŦāđ‰āļœāļđāđ‰āļ­āđˆāļēāļ™āđ€āļ‚āđ‰āļēāđƒāļˆāļ—āļąāđ‰āļ‡ āļāļēāļĢāļ”āļĩāļšāļąāļāđƒāļ™ simulation āđāļĨāļ° āļāļēāļĢāđāļŠāļ”āļ‡āļœāļĨāđƒāļ™āļŪāļēāļĢāđŒāļ”āđāļ§āļĢāđŒāļˆāļĢāļīāļ‡ āđ€āļžāļ·āđˆāļ­āļŠāļēāļĄāļēāļĢāļ–āļ™āļģāđ„āļ›āđƒāļŠāđ‰āļ‡āļēāļ™āđ„āļ”āđ‰āļ­āļĒāđˆāļēāļ‡āļĄāļąāđˆāļ™āđƒāļˆ