[Verilog HDL] CH7 조건문, 다중분기UVM & RTL/Verilog HDL2022. 6. 14. 14:52
Table of Contents
조건문
조건문은 특정 조건에 따라서 결정하기 위해 이 조건은 문장을 수행할지 말지를 결정하는데 사용된다.
// 형식 1
if(!lock) buffer = data;
// 형식 2
if(number_queued < MAX_Q_DEPTH) begin
data_queue = data;
number_queued = number_queued + 1;
end
else
$display("Queue Full. Try again");
// 형식 3
// ALU 제어 신호에 따라 문장을 수행한다.
if(alu_control == 0)
y = x + z;
else if(alu_control == 1)
y = x - z;
else
$display("Invalid ALU control signal");
다중 분기
위의 조건문의 형식 3에서 여러 문장들 중 하나를 선택하게 된다. 만약 너무 많은 선택조건이 있으면 if-else if-else구문을 다루기 불편하게 된다. case문을 사용해 간단하게 같은 결과를 얻을 수 있다.
case 문
case, endcase, default키워드가 사용된다.
reg [1:0] alu_control;
...
...
case(alu_control)
2'd0 : y = x+z;
2'd1 : y = x-z;
2'd2 : y = x*z;
default : $display("Inavlid ALU control signal");
endcase
case문장은 또한 n:1 MUX로 동작한다. 이것을 이해하기 위해 4:1 MUX 모델을 case문장을 써서 나타내어 보자.
module mux4to1(
output out;
input i0, i1, i2, i3;
input s1, s0;
reg out;
)
always @(*) begin
case({s1,s0})
2'd0 : out = i0;
2'd1 : out = i1;
2'd2 : out = i2;
2'd3 : out = i3;
default : $display("Inavalid control singals");
endcase
end
endmodule
case문에서 x와 z
case문장은 수식의 0,1,x,z값과 비교를 하고 비트가 일치하는 것을 선택한다. 만약 수식과 선택의 비트 폭이 일치하지 않으면, 수식과 선택된 것의 폭 중 더 큰 비트 폭에 맞춰 나머지를 0으로 채운다.
casex, casez 키워드
case문에는 두가지 변형이있는데 그것들은 키워드 casex와 casez로 나뉜다. 이들을 사용하면 case수식과 선택에서 x와 z비트가 아닌 부분만을 비교할 수 있다.
reg [3:0] encoding;
integer state;
casex(encoding)
4'b1xxx : next_state = 3;
4'b1xxx : next_state = 2;
4'b1xxx : next_state = 1;
4'b1xxx : next_state = 0;
default : next_state = 0;
endcase
'UVM & RTL > Verilog HDL' 카테고리의 다른 글
[Verilog HDL] CH7 순차 처리와 병렬 처리 블록 (0) | 2022.06.14 |
---|---|
[Verilog HDL] CH7 루프 (0) | 2022.06.14 |
[Verilog HDL] CH7 타이밍 제어 (0) | 2022.06.14 |
[Verilog HDL] CH7 구조적 프로시저 & 절차적 할당 (0) | 2022.06.14 |
[Verilog HDL] CH6 연산자 (0) | 2022.06.14 |
@Return :: Return
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!