Kim Seon Deok

[Verilog] if 문, case 문 본문

Verilog

[Verilog] if 문, case 문

seondeok 2022. 12. 9. 02:01

 

 

 

 

  • gate level modeling
  • concurrent assignment
  • behavioral modeling 
  • structural modeling 

gate level modeling과 concurrent assignment는 조합회로를 구현하는 데 사용된다. 

behavioral moeling과 structural modeling은 대체로 조합회로와 순차회로를 구현하는 데 사용된다.   

 

 

 

 

 

behavioral modeling

 

조합논리 회로와 순차 논리회로의 설계 그리고 모델링된 회로의 simulation을 위한 testbench작성에 사용된다.

(모델링된 소스코드 합성을 거쳐 gate-level netlist로 변환)

  • always 구문
  • initial 구문

 

procedural assignment와 if문과 case문 그리고 반복문은 behavioral modeling의 always, initial 구문 내부에서 사용된다.

 

 

 

if 문

 

if (조건)
    blocking 또는 nonblocking문  ;
else
    blocking 또는 nonblocking문  ;

조건식이 참이면 해당 statement문 실행

조건식이 거짓이면 해당 statement문 실행

if문 안에 또 다른 if문 이 중첩될 수 있다.

 

module dff_sr_async (clk, d, rb, sb, q, qb) ;
	input    clk, d, rb, sb  ; // 클럭, 입력, 리셋, 셋
	output   q, qb           ;
	reg      q               ;  //always문 안에 들어가는 변수는 reg로 선언. default값은 x

	always  @(posedge clk or negedge rb or negedge sb) // clk만 있는 게 아니라 셋, 리셋 있으니까 비동기식
	begin                                              // 셋,리셋이negedge이므로 둘다 active low이다.
		if(rb == 0)   // 해당 조건이 참이면
			q <= 0 ;  // nonblocking
		else if(sb == 0) // 해당 조건이 참이면
			q <= 1 ;
		else             // 해당 조건이 참이면
			q <= d ;
	end
	
	assign qb = ~q ;  // concurrent assignment문 

endmodule

 

 

 

 

case 문

 

case (조건)

      case 아이템  :  statement or null  ;
      case 아이템  :  statement or null  ;
      ......
      default  :  statement or null  ;

endcase

 

case의 조건식의 값과 일치하는 case아이템의 statement가 실행된다.

case문의 조건식과 모든 case아이템의 비트 크기는 큰 쪽에 맞추어져야한다.

모든 case아이템들에 대한 비교에서 일치하는 항이 없는 경우 default 항이 실행된다.

default항이 없다면 이전에 할당받은 값 유지 → 래치동작

하나의 case문에는 default문이 한개만 있어야 한다.

조건식에 상수값이 들어가도 된다.

 

module mux21_case(a,b,sel,out) ;
	input    [1:0]  a, b  ;
	input            sel  ;
	output   [1:0]   out  ;
	reg      [1:0]   out  ;   // always문 안에 들어가는 변수이므로 reg 선언
    
	always @(a or b or sel) begin   // a나 b나 sel에서 이벤트가 발생하면
		case(sel)
 			0 : out = a   ;  // case아이템이 0 이면
			1 : out = b   ;  // case아이템이 1 이면
		endcase
	end
endmodule

 

 

 

 

 

 

 

 

casex, casez

 

casex 문 :  x를 don't care로 취급해 해당 비트를 비교에서 제외한다. don't care 조건으로 ? 기호 사용가능

casez  문 :  z를 don't care로 취급해 해당 비트를 비교에서 제외한다. don't care 조건으로 ? 기호 사용가능

reg [7:0] ir;

casez(ir)
	8'b1??????? : instruction1(ir) ;
	8'b10?????? : instruction2(ir) ;
	8'b00010??? : instruction3(ir) ;
	8'b000001?? : instruction4(ir) ;
 endcase

 

 

 

 

 

 

'Verilog' 카테고리의 다른 글

[Verilog] Structural modeling - module instance  (0) 2022.12.09
[Verilog] 반복문  (0) 2022.12.09
[Verilog] Behavioral modeling  (0) 2022.12.09
[Verilog] Procedural assignment  (2) 2022.12.08
[Verilog] Concurrent assignment  (0) 2022.12.08
Comments