ตัวอย่าง Verilog Code

ตัวอย่าง Verilog code ของวงจร Synchronous Sequential แบบ Moore ที่มี 1 input (y) และ 1 output (z) โดย z=1 เมื่อ จำนวน 1 ที่เข้ามารวมกัน หารด้วย 3 ลงตัว
จาก States Diagram ดังรูป

Code 1
Code 2
Code 3 (Finite State Machine)
module mod3a(clock, y, reset,z) ;

input clock ;
input y ;
input reset ;
output z ;
reg z;
reg [1:0] state;

always @ (posedge clock)
 if (reset)
  begin
   state=0;
   z=1;
  end
  else
   if (y)
   begin
     state=state+1;
     if (state==2'b11
     begin
       state=0;
       z=1;
    end
     else
       z=0;
    end  
endmodule

module mod3b(clock, y, reset,z)

input clock ;
input y ;
input reset ;
output z ;
reg [1:0]state;

assign z=~|state;

always @(posedge clock)
begin
 if (reset)
   state=0;
  else
   if (y)
     if (state==2)
        state=0;
     else
        state=state+1;    
end
endmodule

module mod3f (clock, y, reset, z) ;

input clock ;
input y ;
input reset ;
output z ;reg z;
reg [1:0]pstate, nstate;

always @ (posedge clock)
begin
  if (reset)
  begin
    pstate=0;
   
  end
  else
    pstate=nstate;   
end
   
always @(pstate)    
  case(pstate)
   0: begin z=1;
            if (y) nstate=1;
            else nstate=0; end
   1: begin z=0;
            if (y) nstate=2;
            else nstate=1; end
   2: begin z=0;
            if (y) nstate=0;
           elsenstate=2; end
   default : begin z=0;
                  nstate=0; end
  endcase 
endmodule


ในการ simulate code ทั้ง 3 แบบให้ timing diagram เหมือนกัน (ทำงานถูกต้องเหมือนกัน) แต่เมื่อ Synthesis โดยใช้
Synthesizer ของ Xilinx

Max. Clock Frequency
คำนวณจาก longest delay path
Number of Gates Used
Code 1
132.714MHz
42
Code 2
148.876MHz
36
Code 3
209.644MHz
30

ถึงแม้ว่าผลที่ได้นี้จะขึ้นกับ Synthesizer และ target technology ที่ใช้  แต่ผลที่ได้นี้แสดงให้เห็นว่า Verilog code ที่ทำงานได้เหมือนกันอาจสร้างเป็นวงจรได้ต่างกัน และเมื่อเขียน code ต้องคำนึงถึง hardware ที่จะได้ด้วย