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-zaakverklaring

De case statement controleert of de gegeven expressie overeenkomt met een van de andere expressies in de lijst en vertakt dienovereenkomstig. Het wordt meestal gebruikt om een ​​multiplexer te implementeren. De constructie als-anders is mogelijk niet geschikt als er veel voorwaarden moeten worden gecontroleerd en zou worden gesynthetiseerd in een prioriteits-encoder in plaats van een multiplexer.

Syntaxis

Een Verilog geval statement begint met de case zoekwoord en eindigt met de endcase trefwoord. De uitdrukking tussen haakjes wordt exact één keer geëvalueerd en vergeleken met de lijst van alternatieven in de volgorde waarin ze zijn geschreven en de instructies waarvoor het alternatief overeenkomt met de gegeven uitdrukking worden uitgevoerd. Een blok van meerdere instructies moet worden gegroepeerd en binnen begin . vallen en end .

  
  
	// Here 'expression' should match one of the items (item 1,2,3 or 4)
	case (<expression>) 
		case_item1 : 	<single statement>
		case_item2,
		case_item3 : 	<single statement>
		case_item4 : 	begin
		          			<multiple statements>
		        			end
		default 	 : <statement>
	endcase

  

Als geen van de hoofdletter-items overeenkomt met de gegeven uitdrukking, instructies binnen de default item wordt uitgevoerd. De default statement is optioneel en er kan maar één default . zijn verklaring in een casus. Case-statements kunnen worden genest.

Uitvoering zal het hoofdletterblok verlaten zonder iets te doen als geen van de items overeenkomt met de uitdrukking en een default verklaring wordt niet gegeven.

Voorbeeld

De hieronder getoonde ontwerpmodule heeft een 2-bits selectiesignaal om een ​​van de drie andere 3-bits ingangen naar het opgeroepen uitgangssignaal te leiden. Een case statement wordt gebruikt om de juiste invoer aan uitvoer toe te wijzen op basis van de waarde van sel. Aangezien sel een 2-bits signaal is, kan het 2 2 . hebben combinaties, 0 t/m 3. De standaardopdracht helpt om de uitvoer op 0 in te stellen als sel 3 is.

  
  
module my_mux (input       [2:0] 	a, b, c, 		// Three 3-bit inputs
                           [1:0]	sel, 			  // 2-bit select signal to choose from a, b, c
               output reg  [2:0] 	out); 			// Output 3-bit signal 
  
  // This always block is executed whenever a, b, c or sel changes in value
  always @ (a, b, c, sel) begin 		
    case(sel)
      2'b00    : out = a; 		// If sel=0, output is a
      2'b01    : out = b; 		// If sel=1, output is b
      2'b10    : out = c; 		// If sel=2, output is c
      default  : out = 0; 		// If sel is anything else, out is always 0
    endcase
  end
endmodule

  

Hardwareschema

De rtl-code is uitgewerkt om een ​​hardwareschema te krijgen dat een 4 op 1 multiplexer vertegenwoordigt.

Zie dat de uitgang nul is als sel 3 is en overeenkomt met de toegewezen ingangen voor andere waarden.

Simulatielogboek
ncsim> run
[0]  a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0
[10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5
[20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5
[30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1
[40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

In een case-statement slaagt de vergelijking alleen wanneer elk bit van de expressie overeenkomt met een van de alternatieven, waaronder 0, 1, x en z. Als in het bovenstaande voorbeeld een van de bits in sel x of z is, is de default statement wordt uitgevoerd omdat geen van de andere alternatieven overeenkwam. In een dergelijk geval zal de output allemaal nullen zijn.

Simulatielogboek
ncsim> run
[0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0
[10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0
[20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0
[30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0
[40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0
[50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0
[60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0
[70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0
[80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0
[90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0
ncsim: *W,RNQUIE: Simulation is complete.

Als de casusverklaring in ontwerp x en z heeft in de casusitem-alternatieven, zouden de resultaten heel anders zijn.

  
  
module my_mux (input  		[2:0] 	a, b, c,
													[1:0]		sel,
							output reg	[2:0] 	out);
  
  // Case items have x and z and sel has to match the exact value for
  // output to be assigned with the corresponding input
  always @ (a, b, c, sel) begin
    case(sel)
      2'bxz			:	out = a;
      2'bzx			:	out = b;
      2'bxx			:	out = c;
      default 	:	out = 0;
    endcase
  end
endmodule

  
Simulatielogboek
ncsim> run
[0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x1
[10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x5
[20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x1
[30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x6
[40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x5
[50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x6
[60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x7
[70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0
[80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x4
[90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x5
ncsim: *W,RNQUIE: Simulation is complete.

Wat is het verschil tussen een case en if-else?

De case statement is anders dan if-else-if op twee manieren:

  • Uitdrukkingen gegeven in een if-else blok zijn algemener in een case blok, wordt een enkele uitdrukking gekoppeld aan meerdere items
  • case geeft een definitief resultaat als er X- en Z-waarden in een uitdrukking zijn


Verilog

  1. Inleiding tot Verilog
  2. C# switch-instructie
  3. C# break-instructie
  4. C# doorgaan Verklaring
  5. C++ Switch Case Statement met VOORBEELD
  6. Verilog-zelfstudie
  7. Verilog-aaneenschakeling
  8. Verilog-opdrachten
  9. Verilog blokkeren en niet-blokkeren
  10. Verilog-functies
  11. Verilog-taak