title: Verilog
text: Verilog is een hardwarebeschrijvingstaal (HDL) en wordt gebruikt om elektronische systemen te modelleren. Verilog is gestandaardiseerd als IEEE 1364 en wordt vooral gebruikt bij het ontwerpen en de verificatie van digitale circuits op het register-transferniveau van abstractie. Het wordt ook gebruikt bij de verificatie van analoge schakelingen en mixed-signalcircuits.
  
  Voorbeeld 
  Een kort hello world-programma ziet er als volgt uit:
  module main;
    initial
      begin
        $display("Hello world!");
        $finish;
      end
  endmodule
  
  Dit is een eenvoudige beschrijving van twee flip-flops:
  module toplevel(clock,reset);
    input clock;
    input reset;
  
    reg flop1;
    reg flop2;
  
    always @ (posedge reset or posedge clock)
      if (reset)
        begin
          flop1 <= 0;
          flop2 <= 1;
        end
      else
        begin
          flop1 <= flop2;
          flop2 <= flop1;
        end
  endmodule
  
  De "<=" operator in Verilog vloeit voort uit het feit dat dit een hardwarebeschrijvingstaal is en geen gewone procedurele programmeertaal. Deze operator stelt een "niet-blokkerende toewijzing" voor. Het resultaat van deze toewijzing is pas zichtbaar in de volgende simulatiecyclus. Als gevolg hiervan is de volgorde van de toewijzingen onbelangrijk en zal het simulatieresultaat altijd hetzelfde zijn. De twee flip-flops zullen bij elke klokcyclus hun waarden omwisselen.
  
  De andere operator voor toewijzingen is "=" en stelt een blokkerende toewijzing voor. Als men dit soort toewijzing gebruikt, wordt de waarde van het linker lid onmiddellijk aangepast. Als in het bovenstaande voorbeeld de blokkerende "="-operator gebruikt zou zijn, zouden de waarden van flop1 en flop2 niet omgewisseld worden. In plaats daarvan zou, net als in een traditionele programmeertaal, de waarde van flop 1 gelijk worden aan flop 2.
  
  Programmeertaal