Kim Seon Deok
[Verilog] 반복문 본문
- 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