Industriële fabricage
Industrieel internet der dingen | Industriële materialen | Onderhoud en reparatie van apparatuur | Industriële programmering |
home  MfgRobots >> Industriële fabricage >  >> Industrial programming >> Verilog

Verilog - In een notendop

Alle gedragscode is geschreven in module en endmodule . Dus welk digitaal ontwerp je ook wilt maken, het past in een module blok. Het kan al dan niet poorten hebben gedefinieerd - laat signalen het blok binnenkomen als input of ontsnap aan het blok als output .

Module

De lege module in het onderstaande voorbeeld heet testbench . Je kunt het een naam geven die je wilt, behalve dat het alfanumeriek moet zijn en '_' mag bevatten.

  
  
module testbench;

endmodule

  

Laten we naar een andere module kijken. Het heeft een paar signalen (d, clk, rstb ) gedeclareerd als invoer en q gedeclareerd als een output.

  
  
module dff (input d,
                  clk,
                  rstb,
            output q);
endmodule

  

Gegevenstypen

Nu we hebben gezien hoe een module eruitziet, laten we eens kijken wat er in een module kan worden geplaatst, door nogmaals naar de testbench-module te kijken. Er zijn hoofdzakelijk twee soorten datatypes in verilog:

  • reg
  • draad
Een reg datatype wordt gebruikt om waarden als een variabele vast te houden, terwijl een wire is gewoon analoog aan een elektrische draad, die continu moet worden aangedreven. Dus typisch wire wordt gebruikt om verbinding te maken tussen meerdere modules en andere signalen.

  
  
module testbench;
	
	reg d;
	reg rst_b;
	reg clk;
	
	wire q;
endmodule

  

Opdrachten

Verilog heeft drie basisblokken:

always @ (staat ) altijd uitgevoerd als aan de voorwaarde is voldaan
initial wordt slechts één keer uitgevoerd, wanneer de simulatie begint
assign [LHS] =[RHS] Waarde van LHS wordt bijgewerkt wanneer RHS verandert

Er zijn een paar regels om in gedachten te houden bij het schrijven van Verilog:

  • reg kan alleen worden toegewezen aan initial en always blokken
  • wire kan alleen een waarde worden toegewezen via assign verklaring
  • Als er meerdere uitspraken in een initiaal/altijd . staan blok, moeten ze worden ingepakt in begin .. end

  
  
module testbench;
	
	reg d;
	reg rst_b;
	reg clk;
	
	wire q;
	
	initial begin
		d = 0;
		rst_b = 0;
		clk = 0;
		
		#100 $finish;
	end
	
	always begin
		#10 clk = ~clk;
	end
endmodule

  

Opmerking het volgende uit het bovenstaande voorbeeld:

  • Omdat er meerdere regels zijn voor initial blok, begin en einde worden gebruikt
  • Signalen d, rst_b en clk worden toegewezen binnen een eerste blok, omdat ze van het type reg zijn
  • Code in het initiële blok wordt uitgevoerd op 0ns, d.w.z. start van simulatie
  • Omdat er geen voorwaarde is voor de always blok, het zal lopen als een oneindige lus in C
  • # wordt gebruikt om tijdvertraging weer te geven. #10 vertelt de simulator om de simulatietijd met 10 eenheden te verlengen.
  • clk = ~clk; zal de waarde van klok veranderen, en omdat #10 voor het statement wordt geplaatst, wordt de klok na elke 10 tijdseenheden omgeschakeld.
  • $finish is de manier om een ​​simulatie te beëindigen. In dit geval zal het 100 tijdseenheden lopen en afsluiten.

Verilog

  1. Verilog-zelfstudie
  2. Verilog-aaneenschakeling
  3. Verilog-opdrachten
  4. Verilog blokkeren en niet-blokkeren
  5. Verilog-functies
  6. Verilog-taak
  7. Verilog hiërarchisch referentiebereik
  8. Verilog-klokgenerator
  9. Verilog wiskundige functies
  10. Verilog Tijdnotatie
  11. Verilog Tijdschaalbereik