Kim Seon Deok

[Verilog] 반복문 본문

Verilog

[Verilog] 반복문

seondeok 2022. 12. 9. 02:32

 

 

 

 

  • 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 구문 내부에서 사용된다.

 

 

 

 

반복문

  • forever 문
  • reperat 문
  • while 문
  • for 문

 

 

forever 문 

 

always문, initial문 내부에서 문장이 무한히 반복적으로 실행된다.

입력신호, 출력신호 만드는 데 사용되기도 한다.

forever statement ;
module tb_dff ;
	reg clk, din  ;
	
	dff U1 (clk, din, q) ;   // dff 모듈 인스턴스 U1으로 불러옴
 
 	initial begin
		clk = 1'b0 ;   // clk값 초기화
 		forever  #10 clk = ~clk ;  // 주기 20ns인 클럭펄스
	end
    
	initial begin
		din = 1'b0 ;   // din값 초기화
		forever begin   // begin ~ end 사이에 있는 문장 무한히 반복한다는 뜻
			#15 din = 1'b1 ;   // 15ns 지나고 값 변경
 			#20 din = 1'b0 ;   // 20ns 지나고 값 변경
			#30 din = 1'b1 ;   // 30ns 지나고 값 변경
			#20 din = 1'b0 ;   // 20ns 지나고 값 변경 
		end
	end
endmodule

 

 

 

 

repeat 문

 

always문, initial문 내부에서 문장이 지정된 횟수만큼 문장이 반복실행된다.

 

repeat (반복 횟수) statement  ;
module repeat_example (); 
 
  reg r_Clock = 1'b0;
   
  initial begin
      repeat (10)  // 10번 반복
        #5 r_Clock = !r_Clock;  // 5ns 지나면 반전
   end
endmodule

 

 

 

 

 

while 문

 

always문, initial문 내부에서 조건식의 값이 거짓이 될때까지 문장이 반복 실행된다.

 

while (조건식) statement ; 
moduel cnt_one(rega, count) ;
	input   [7:0]  rega   ;
	output  [3:0]  count  ;
	reg     [7:0]  temp_reg ;  // always문 안에서 사용할 변수 reg로 선언
	reg     [3:0]  count    ;  // always문 안에서 사용할 변수 reg로 선언
    
	always @(rega) begin   // rega에 변화가 있다면
		count = 0  ;       // count 초기화
 		temp_reg = rega ;  // temp_reg 초기화
        
		while(temp_reg) begin  // 조건이 참일때 반복
			if(temp_reg[0])    // temp_reg[0] == 1이면
				count = count + 1 ;
			temp_reg = temp_reg >> 1;  // else
 		end
	end
endmodule

 

 

 

 

 

for 문

 

always문, initial문 내부에서 반복횟수를 제어하는 변수에 의해 문장이 반복 실행된다.

이 때 for문 의 변수는 미리 integer로 선언해주어야 한다.

for (초기값 ; 조건식 ;  증감식)  statement ;
module enc_for(in, out) ; 
	input  [7:0]  in   ;
	output [2:0]  out  ;
	reg    [2:0]  out  ;
	integer         i  ;   // for문에서 사용할 변수 integer로 선언

	always @(in) begin
		out = 0 ;
		for(i = 7 ; i >= 0 ; i = i - 1) begin
			if(in[i]) begin   // in[i] == 1이면
				out = i ;
				disable LOOP ;  // 루프 종료
			end
		end
	end
endmodule

 

 

 

 

 

 

 

 

 

 

'Verilog' 카테고리의 다른 글

[Verilog] Structural modeling - module parameter  (0) 2022.12.09
[Verilog] Structural modeling - module instance  (0) 2022.12.09
[Verilog] if 문, case 문  (0) 2022.12.09
[Verilog] Behavioral modeling  (0) 2022.12.09
[Verilog] Procedural assignment  (2) 2022.12.08
Comments