- 1 1. āļāļāļāļģ: āļāļ§āļēāļĄāļŠāļģāļāļąāļāđāļĨāļ°āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāļāļāļ “display” āđāļ Verilog
- 2 2. āļāļ·āđāļāļāļēāļāļāļāļ $display: āļ§āļīāļāļĩāđāļāļĩāļĒāļ āļāļēāļĢāđāļāđāļāļēāļ āđāļĨāļ°āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ
- 3 3. āļāļēāļĢāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ System Task āļŠāļģāļŦāļĢāļąāļāļāļēāļĢāđāļŠāļāļāļāļĨ: $display · $write · $strobe · $monitor
- 3.1 $display: āļāļēāļĢāđāļŠāļāļāļāļĨāļĄāļēāļāļĢāļāļēāļ
- 3.2 $write: āļāļēāļĢāđāļŠāļāļāļāļĨāđāļāļĒāđāļĄāđāļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ
- 3.3 $strobe: āđāļŠāļāļāļāđāļēāļŦāļĨāļąāļāļāļēāļāļŠāļīāđāļāļŠāļļāļāļĢāļāļāļāļēāļĢāļāļģāļĨāļāļ
- 3.4 $monitor: āļāļēāļĢāļāļīāļāļāļēāļĄāļāđāļēāļāļąāļāđāļāļĄāļąāļāļī
- 3.5 āļāļēāļĢāļēāļāđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļ
- 3.6 āđāļāļĨāđāļāļĨāļąāļāļāļēāļĢāđāļĨāļ·āļāļāđāļāđ
- 4 4. āļāļāļĢāđāđāļĄāļāļŠāđāļāļāļīāđāļāđāļāļāļĢāđāđāļĨāļ°āđāļāļāļāļīāļāļāļēāļĢāđāļŠāļāļāļāļĨāļāļīāđāļĻāļĐ
- 5 5. āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ: āļāļēāļĢāđāļāđ $display āđāļ Testbench āđāļĨāļ°āļ āļēāļĒāđāļāđāļĄāļāļđāļĨ
- 5.1 āļāļąāļ§āļāļĒāđāļēāļāļāļ·āđāļāļāļēāļ: āļāļēāļĢāđāļŠāļāļāļāļĨāđāļ Testbench
- 5.2 āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļŠāļāļāļāļĨāļāļēāļĄāđāļāļ·āđāļāļāđāļ
- 5.3 āļāđāļāļāļ§āļēāļĄāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļĩāļāļąāļ
- 5.4 āļāļēāļĢāđāļŠāļāļāļāļĨāļŦāļĨāļēāļĒāļŠāļąāļāļāļēāļāļāļĢāđāļāļĄāļāļąāļ
- 5.5 āļŠāļĢāļļāļāļāļļāļāļŠāļģāļāļąāļāđāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ
- 6 6. āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāļāļēāļĢāļāļ§āļāļāļļāļĄ Display (āļāļēāļĢāđāļŠāļāļāļāļĨāļāļīāļāđāļāļĨ / āļāđāļāļāļ§āļēāļĄ / āļ āļēāļ)
- 6.1 āđāļāļ§āļāļīāļāļāļ·āđāļāļāļēāļāļāļāļāļāļēāļĢāļāļ§āļāļāļļāļĄ Display
- 6.2 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 1: āļāļēāļĢāđāļŠāļāļāđāļāļāļŠāļĩ (Color Bar)
- 6.3 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 2: āļāļēāļĢāđāļŠāļāļāļāđāļāļāļ§āļēāļĄ
- 6.4 āļāļąāļ§āļāļĒāđāļēāļāļāļĩāđ 3: āļāļēāļĢāđāļŠāļāļāļ āļēāļ
- 6.5 āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļąāļāļāļēāļĢāđāļāđ $display āļŠāļģāļŦāļĢāļąāļ debug
- 6.6 āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāļīāđāļĄāđāļāļīāļĄ
- 7 7. āļāļēāļĢāđāļĨāļ·āļāļāđāļāđāđāļĨāļ°āđāļāļĨāđāļāļĨāļąāļāļāļēāļĄāļŠāļāļēāļāļāļēāļĢāļāđ
- 8 8. FAQ (āļāļģāļāļēāļĄāļāļĩāđāļāļāļāđāļāļĒāđāļĨāļ°āļāļģāļāļāļ)
- 8.1 Q1. āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļĢāļ°āļŦāļ§āđāļēāļ $display āđāļĨāļ° $monitor āļāļ·āļāļāļ°āđāļĢ?
- 8.2 Q2. āļĄāļĩāļŠāļāļēāļāļāļēāļĢāļāđāđāļāļāđāļēāļāļāļĩāđāļāļ§āļĢāđāļāđ $strobe?
- 8.3 Q3. āļāļāļĢāđāđāļĄāļāļŠāđāļāļāļīāđāļāđāļāļāļĢāđ %m āđāļāđāļāļģāļāļ°āđāļĢ?
- 8.4 Q4. āļāđāļēāđāļāđ $display āļāļģāļāļ§āļāļĄāļēāļ log āļāļ°āļĄāļĩāļāļāļēāļāđāļŦāļāđāļĄāļēāļ āļāļ§āļĢāļāļģāļāļĒāđāļēāļāđāļĢ?
- 8.5 Q5. āļŠāļēāļĄāļēāļĢāļāđāļāđ $display āđāļāļāļēāļĢāļŠāļąāļāđāļāļĢāļēāļ°āļŦāđ (FPGA/ASIC) āđāļāđāļŦāļĢāļ·āļāđāļĄāđ?
- 8.6 Q6. āļāđāļēāļāļĒāļēāļāđāļŠāļāļāļāđāļāļāļ§āļēāļĄāļŦāļĢāļ·āļāļ āļēāļāļāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļāļĢāļīāļāļāļ§āļĢāļāļģāļāļĒāđāļēāļāđāļĢ?
- 9 9. āļŠāļĢāļļāļāđāļĨāļ°āļāđāļēāļ§āļāđāļāđāļ
1. āļāļāļāļģ: āļāļ§āļēāļĄāļŠāļģāļāļąāļāđāļĨāļ°āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāļāļāļ “display” āđāļ Verilog
“display” āđāļ Verilog āļāļ·āļāļāļ°āđāļĢ?
$display
āđāļ Verilog āđāļāđāļāļŦāļāļķāđāļāđāļ system task āļāļĩāđāđāļāđāļŠāļģāļŦāļĢāļąāļ “āđāļŠāļāļāļāļĨ” āļŠāļāļēāļāļ°āļ āļēāļĒāđāļāļāļāļāđāļāļĢāđāļāļĢāļĄāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļģāļĨāļāļ āļāļĨāđāļēāļĒāļāļąāļ printf
āļāļāļāļ āļēāļĐāļē C āđāļāļĒāļŠāļēāļĄāļēāļĢāļāđāļŠāļāļāļāđāļēāļāļāļāļŠāļąāļāļāļēāļ āļāļąāļ§āđāļāļĢ āļŦāļĢāļ·āļāļŠāļāļĢāļīāļāđāļāļĒāļąāļāđāļāļāļĢāđāļĄāļīāļāļąāļĨāļŦāļĢāļ·āļāļāļāļāđāļāļĨāđāļāđ āļāļ·āļāđāļāđāļāļāļąāļāļāđāļāļąāļāļāļĩāđāļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļāļĒāđāļēāļāļĒāļīāđāļāđāļāļāļēāļĢāļāļĩāļāļąāļāđāļĨāļ°āļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļģāļāļēāļ
āļāļģāđāļĄ $display
āļāļķāļāļāļģāđāļāđāļāđāļāļāļēāļāļāļąāļāļāļē Verilog
- āđāļāļīāđāļĄāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļāļāļēāļĢāļāļĩāļāļąāļ: āđāļāļ§āļāļāļĢāļāļĩāđāļāļąāļāļāđāļāļ āļāļēāļĢāļĄāļāļāđāļŦāđāļāļŠāļąāļāļāļēāļāļ āļēāļĒāđāļāđāļāđāļāļŠāļīāđāļāļŠāļģāļāļąāļ
$display
āļāđāļ§āļĒāđāļŦāđāļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāļāđāļēāđāļāđāļāļąāļāļāļĩāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļģāļĨāļāļ - āļāļģāđāļŦāđāļāļēāļĢāļāļģāļĨāļāļāđāļāđāļēāđāļāļāđāļēāļĒāļāļķāđāļ: āļāļēāļĢāļāļđāđāļāļāļēāļ° waveform āļāļēāļāđāļĄāđāđāļāļĩāļĒāļāļāļ āļāļēāļĢāļāļąāļāļāļķāļ log āļāđāļ§āļĒāļāđāļāļāļ§āļēāļĄāļāđāļ§āļĒāđāļŦāđāđāļāđāļēāđāļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļāđāļēāđāļāđāļāļąāļāđāļāļāļāļķāđāļ
- āļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļāđāļāļāļēāļĢāđāļāļĩāļĒāļāđāļāļāļŠāļēāļĢ: āļŠāļēāļĄāļēāļĢāļāđāļŠāđāļāļģāļāļāļīāļāļēāļĒāļŦāļĢāļ·āļ hint āļĨāļāđāļ log āđāļāļ·āđāļāļāđāļ§āļĒāđāļŦāđāļāļđāđāļāļ·āđāļāđāļāđāļēāđāļāđāļāđāļāđāļāđāļāđāļēāļĒāļāļķāđāļ
āļ§āļąāļāļāļļāļāļĢāļ°āļŠāļāļāđāđāļĨāļ°āđāļāļĢāļāļŠāļĢāđāļēāļāļāļāļāļāļāļāļ§āļēāļĄ
āļāļāļāļ§āļēāļĄāļāļĩāđāļāļ°āļāļāļīāļāļēāļĒāļāļēāļĄāļĨāļģāļāļąāļāļāļąāļāļāļĩāđ:
- āļĢāļđāļāđāļāļāđāļĨāļ°āļ§āļīāļāļĩāđāļāđāļāļ·āđāļāļāļēāļ: āļāļāļīāļāļēāļĒ syntax āđāļĨāļ°āļ§āļīāļāļĩāđāļāđ
$display
- āđāļāļĢāļĩāļĒāļāđāļāļĩāļĒāļāļāļąāļ system task āļāļ·āđāļ āđ: āđāļāđāļ
$write
,$strobe
,$monitor
- āļāļāļĢāđāđāļĄāļāļŠāđāļāļāļīāđāļāđāļāļāļĢāđāđāļĨāļ°āđāļāļāļāļīāļ: āđāļāđāļ
%d
,%b
,%h
,%s
- āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ: āļāļĢāđāļāļĄāđāļāđāļāđāļ testbench
- āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄ 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
- āļāļīāļāļāļēāļĄāļāļ§āļēāļĄāļāļ·āļāļŦāļāđāļēāļāļāļāļāļēāļĢāļāļģāļĨāļāļ
āđāļŠāđ$display
āđāļāļāļģāđāļŦāļāđāļāđāļāļāļēāļ°āđāļāļ·āđāļāļāļđāļ§āđāļēāđāļāđāļāļāļģāļāļēāļāļāļķāļāļāļļāļāđāļāđāļĨāđāļ§ - āļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļāļāļŠāļąāļāļāļēāļ
āļāđāļ§āļĒāđāļŦāđāđāļāđāļēāđāļāđāļāļ·āđāļāļāđāļāļŦāļĢāļ·āļāļāļēāļĢāđāļāļĨāļĩāđāļĒāļāļŠāļāļēāļāļ°āđāļāđāļāđāļēāļĒāļāļķāđāļāđāļĄāļ·āđāļāđāļŠāļāļāļāļĨāđāļāđāļāļāđāļāļāļ§āļēāļĄ - āđāļŠāļāļāļāđāļāļāļ§āļēāļĄāļāļēāļĄāđāļāļ·āđāļāļāđāļ
āļŠāļēāļĄāļēāļĢāļāđāļāđāļĢāđāļ§āļĄāļāļąāļ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
āļāđāļāļāļ§āļĢāļĢāļ°āļ§āļąāļ
- āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢāđāļŠāļāļāļāļĨāļĄāļēāļāđāļāļīāļāđāļ
āļāļēāļĢāđāļāđ$display
āļāļļāļ clock āļāļ°āļāļģāđāļŦāđ log āļĄāļĩāļāļāļēāļāđāļŦāļāđāđāļĨāļ°āļāđāļēāļāļĒāļēāļ
â āļāļ§āļĢāđāļāđāđāļāļ·āđāļāļāđāļ - āđāļāđāļāļēāļĢāđāļŠāļāļāđāļ§āļĨāļē
āļŠāļēāļĄāļēāļĢāļāđāļāđ$time
āļŦāļĢāļ·āļ$realtime
āđāļāļ·āđāļāļāļđāđāļ§āļĨāļēāđāļāđāļāļĒāđāļēāļāđāļĄāđāļāļĒāļģ - āđāļāđāļ 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 | āđāļŠāļāļāļāļĨāđāļāđāļāļāļąāļāļāļĢāļ° ASCII | A |
%s | āđāļŠāļāļāļāļĨāđāļāđāļāļŠāļāļĢāļīāļ | Hello |
%t | āđāļŠāļāļāđāļ§āļĨāļēāļāļģāļĨāļāļ (simulation time) | #100 |
%m | āđāļŠāļāļāļāļ·āđāļāđāļĄāļāļđāļĨāđāļāļĨāļģāļāļąāļāļāļąāđāļ | top.u1.u2 |
āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ
- āđāļŠāļāļāļŠāļąāļāļāļēāļāđāļāļŦāļĨāļēāļĒāļĢāļđāļāđāļāļ
reg [7:0] data = 8'b10101010; $display("data = %b (bin), %d (dec), %h (hex)", data, data, data);
â āļāļĨāļĨāļąāļāļāđ:data = 10101010 (bin), 170 (dec), AA (hex)
- āļāļĢāļ§āļāļŠāļāļāđāļĄāļāļđāļĨāđāļāļĨāļģāļāļąāļāļāļąāđāļ
$display("āđāļĄāļāļđāļĨāļāļąāļāļāļļāļāļąāļāļāļ·āļ %m");
â āļāļĨāļĨāļąāļāļāđ:āđāļĄāļāļđāļĨāļāļąāļāļāļļāļāļąāļāļāļ·āļ top.u1.counter
- āđāļŠāļāļāđāļ§āļĨāļēāļāļģāļĨāļāļ
$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)
- āļāļēāļĢāđāļāđ
$display
āđāļāđāļ debug log- āđāļŠāļāļāļāđāļēāļāļāļāļāļąāļ§āđāļāļĢāļŦāļĢāļ·āļāļŠāļąāļāļāļēāļāļāļĩāđāļŠāļģāļāļąāļāđāļāļ·āđāļāļĒāļ·āļāļĒāļąāļāļāļēāļĢāļāļģāļāļēāļāļāļđāļāļāđāļāļ
- āđāļŦāļĄāļēāļ°āļŠāļģāļŦāļĢāļąāļāļāļĢāļ§āļāļŠāļāļāļāđāļēāļāļēāļĄāđāļāļ·āđāļāļāđāļ āđāļāđāļ counter āļŦāļĢāļ·āļ flag
- āļŦāļĨāļĩāļāđāļĨāļĩāđāļĒāļāļāļēāļĢāđāļŠāļāļāļāļĨāļĄāļēāļāđāļāļīāļāđāļ
- āļŦāļēāļāđāļŠāļāļāļāļĨāļāļļāļ clock āļāļ°āļāļģāđāļŦāđ log āļĄāļĩāļāļāļēāļāđāļŦāļāđāđāļāļīāļāđāļ
- āļāļ§āļĢāļāļĢāļāļāđāļāļāļēāļ°āđāļŦāļāļļāļāļēāļĢāļāđāļāļĩāđāļŠāļģāļāļąāļ āđāļāđāļ
if (state == ERROR) $display("āđāļāļīāļ ERROR āļāļĩāđ %0t", $time);
- āļāļēāļĢāđāļĨāļ·āļāļāđāļāđ task āļāļ·āđāļ āđ āļĢāđāļ§āļĄāļāļąāļ
$monitor
â āđāļāđāļŠāļģāļŦāļĢāļąāļāļāļīāļāļāļēāļĄāļŠāļąāļāļāļēāļāļāļĩāđāļāđāļāļāļāļēāļĢāļāļđāļāļĨāļāļāđāļ§āļĨāļē$strobe
â āđāļāđāđāļĄāļ·āđāļāļāļĒāļēāļāđāļāđāļāđāļēāļāļĩāđāđāļŠāļāļĩāļĒāļĢāļŦāļĨāļąāļāļāļāļĢāļāļāļāļēāļĢāļāļĢāļ°āđāļĄāļīāļ$write
â āđāļāđāļŠāļģāļŦāļĢāļąāļāļāļēāļĢāļāļąāļāļĢāļđāļāđāļāļ log āđāļāļāļŦāļĨāļēāļĒāļāđāļēāđāļāļāļĢāļĢāļāļąāļāđāļāļĩāļĒāļ§
āļāļēāļĢāđāļāđāļāļēāļāļāļąāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļāļĢāļīāļ (Display Control)
- āļāļēāļĢāđāļŠāļāļāļāļĨāļāđāļ§āļĒ 7-segment
- āđāļāđāļāļāļąāļ§āļāļĒāđāļēāļāļāļ·āđāļāļāļēāļāļāļĩāđāļāļīāļĒāļĄāđāļāđāļŠāļģāļŦāļĢāļąāļāļāļđāđāđāļĢāļīāđāļĄāļāđāļ FPGA
- āļŠāļēāļĄāļēāļĢāļāđāļāđāļāļ§āļāļāļđāđāļāļąāļ
$display
āđāļ simulation āđāļāļ·āđāļāļĒāļ·āļāļĒāļąāļāļāļĨāļĨāļąāļāļāđ
- āļāļēāļĢāļāļ§āļāļāļļāļĄ LCD/VGA
- āđāļāđ font ROM āļŦāļĢāļ·āļ image ROM āđāļāļ·āđāļāļŠāļĢāđāļēāļāļāđāļāļāļ§āļēāļĄāđāļĨāļ°āļ āļēāļāļāļāļāļ
- āļŠāļēāļĄāļēāļĢāļāļāļĢāļ§āļāļŠāļāļāļāļēāļĢāļāļģāļāļēāļāđāļāļĒāđāļāđ
$display
āļĢāļ°āļŦāļ§āđāļēāļ simulation āđāļāļ·āđāļāļāļđāļ§āđāļēāļāđāļēāļŠāļąāļāļāļēāļāļāļđāļāļŠāļĢāđāļēāļāļāļđāļāļāđāļāļ
- 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 āļāļąāđāļāđāļāđāļāļ·āđāļāļāļēāļāđāļāļāļāļāļķāļāļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāļāļēāļ āđāļāļĒāļŠāļĢāļļāļāļāļĢāļ°āđāļāđāļāļŠāļģāļāļąāļāđāļāđāļāļąāļāļāļĩāđ:
$display
āļāļ·āđāļāļāļēāļ- āđāļāđāđāļŠāļāļāļāđāļēāļāļāļāļŠāļąāļāļāļēāļāļŦāļĢāļ·āļāļāļąāļ§āđāļāļĢāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļģāļĨāļāļ āļāļĨāđāļēāļĒāļāļąāļ
printf
āđāļāļ āļēāļĐāļē C
- āđāļāđāđāļŠāļāļāļāđāļēāļāļāļāļŠāļąāļāļāļēāļāļŦāļĢāļ·āļāļāļąāļ§āđāļāļĢāļĢāļ°āļŦāļ§āđāļēāļāļāļēāļĢāļāļģāļĨāļāļ āļāļĨāđāļēāļĒāļāļąāļ
- āļāļ§āļēāļĄāđāļāļāļāđāļēāļāļāļąāļ task āļāļ·āđāļ āđ
$write
â āđāļŠāļāļāļāļĨāđāļāļĒāđāļĄāđāļāļķāđāļāļāļĢāļĢāļāļąāļāđāļŦāļĄāđ$strobe
â āđāļŠāļāļāļāđāļēāļāļĩāđāđāļŠāļāļĩāļĒāļĢāļŦāļĨāļąāļāļŠāļīāđāļāļŠāļļāļāļĢāļāļāļāļēāļĢāļāļģāļĨāļāļ$monitor
â āđāļŠāļāļāļāļĨāļāļąāļāđāļāļĄāļąāļāļīāđāļĄāļ·āđāļāļŠāļąāļāļāļēāļāđāļāļĨāļĩāđāļĒāļ
- āļāļēāļĢāđāļāđāļāļāļĢāđāđāļĄāļāļŠāđāļāļāļīāđāļāđāļāļāļĢāđ
- āđāļāđāļ
%b
,%d
,%h
,%m
,%t
āđāļāļ·āđāļāļāļģāđāļŦāđ log āļāđāļēāļāļāđāļēāļĒāđāļĨāļ°āļĄāļĩāļāļĢāļ°āđāļĒāļāļāđāļĄāļēāļāļāļķāđāļ
- āđāļāđāļ
- āļāļąāļ§āļāļĒāđāļēāļāļāļēāļĢāđāļāđāļāļēāļāļāļĢāļīāļ
- āđāļāļĢāļ
$display
āđāļ testbench āđāļāļ·āđāļāļāļīāļāļāļēāļĄāļāļ§āļēāļĄāļāļ·āļāļŦāļāđāļē - āđāļāđāđāļāļ·āđāļāļāđāļāđāļāļ·āđāļāđāļŠāļāļ log āđāļāļāļēāļ°āđāļĄāļ·āđāļāļāļģāđāļāđāļ āļāļģāđāļŦāđ debug āļĄāļĩāļāļĢāļ°āļŠāļīāļāļāļīāļ āļēāļ
- āđāļāļĢāļ
- āļāļēāļĢāļāļĢāļ°āļĒāļļāļāļāđāđāļāđāđāļāļāļēāļĢāļāļ§āļāļāļļāļĄāļāļ
$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 āđāļĨāļ° āļāļēāļĢāđāļŠāļāļāļāļĨāđāļāļŪāļēāļĢāđāļāđāļ§āļĢāđāļāļĢāļīāļ āđāļāļ·āđāļāļŠāļēāļĄāļēāļĢāļāļāļģāđāļāđāļāđāļāļēāļāđāļāđāļāļĒāđāļēāļāļĄāļąāđāļāđāļ