Conditional Operator
Coddy Verilog 여정의 기초 섹션에 포함된 레슨. 90개 중 28번째.
조건 연산자 ? :는 condition에 따라 두 값 중 하나를 선택합니다. 삼항 연산자라고도 합니다. 조건 연산자는 condition을 평가하고 두 값 중 하나를 반환합니다:
condition ? value_if_true : value_if_falsecondition이 참(1)이면 첫 번째 값이 반환됩니다. 거짓(0)이면 두 번째 값이 반환됩니다.
조건 연산자를 사용하는 이유
간단한 if-else 로직을 한 줄로 작성할 수 있는 간결한 방법입니다. 일반적인 사용 예는 다음과 같습니다.
- 두 신호 중에서 선택하기
- 멀티플렉서 만들기
- 기본값 설정하기
- 인라인 조건부 할당
구문 및 예제
기본 예제:
result = (a > b) ? a : b; // result는 a와 b 중 더 큰 값을 가집니다값 중에서 선택:
data_out = (enable) ? data_in : 8'b00000000; // Output data if enabled, else 0조건부로 신호 반전:
out = (invert) ? ~in : in; // invert가 1이면 출력을 반전함; 그렇지 않으면 변경하지 않음코드 예제
module conditional_demo;
reg [3:0] a, b, max;
reg enable;
reg [3:0] data_in, data_out;
initial begin
a = 4'd7;
b = 4'd9;
enable = 1;
data_in = 4'b1010;
max = (a > b) ? a : b; // 9
data_out = (enable) ? data_in : 4'b0000; // 1010
$display("max = %d", max);
$display("data_out = %b", data_out);
$finish;
end
endmoduleOutput:
max = 9
data_out = 1010중첩 조건 연산자
여러 선택을 위해 조건 연산자를 중첩할 수 있습니다:
result = (a > b) ? a : (b > c) ? b : c; // a > b이면 a, 그렇지 않으면 b와 c 중 더 큰 값중첩된 조건을 명확하게 만들려면 괄호를 사용하세요.
중요 참고 사항
- condition은 단일 비트여야 합니다(또는 0이나 1로 평가되는 표현식이어야 합니다).
- 두 value 옵션의 비트 폭을 동일하게 유지하세요. 서로 다르면 Verilog가 더 좁은 쪽을 자동으로 확장합니다.
- 이 연산자는 연속 할당(
assign) 및 프로시저 블록(always,initial)에서 사용할 수 있습니다.
챌린지
각 작업에 맞는 올바른 조건식을 작성하세요.
할 일:
max를x와y중 larger 값으로 설정하세요.abs를val의 absolute 값으로 설정하세요(음수인 경우 양수로 만드세요).enable이 1이면output_data를data로, otherwise8'b0으로 설정하세요.
직접 해보기
module conditional_challenge;
reg [3:0] x, y;
reg [3:0] max;
reg signed [3:0] val;
reg [3:0] abs;
reg enable;
reg [7:0] data;
reg [7:0] output_data;
initial begin
x = 4'd12;
y = 4'd8;
val = -4'sd5;
enable = 1;
data = 8'b10101010;
max = ______; // x와 y 중 더 큰 값
abs = ______; // val의 절댓값
output_data = ______; // enable이면 data, 아니면 0
$display("max = %d", max);
$display("abs = %d", abs);
$display("output_data = %b", output_data);
$finish;
end
endmodule이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
기초의 모든 레슨
4Operators Part 1
Arithmetic OperatorsModulo OperatorComparison OperatorsRecap - Simple MathBitwise Operators7Assign And Gates
Continuous AssignmentAssign With OperatorsBuilt In Gate PrimitivesAND OR NOT GatesXOR XNOR GatesRecap - Logic Gate Circuit10Decision Making
If StatementIf - ElseRecap - Simple ComparatorCase StatementCasex And CasezRecap - ALU Design5Operators Part 2
Logical OperatorsReduction OperatorsShift OperatorsConcatenation OperatorConditional OperatorRecap - Operator Challenge3Number System
Binary RepresentationSized NumbersUnsized NumbersNegative NumbersSpecial Values X And ZRecap - Number Formats6Modules
Module StructureInput And Output PortsInout PortsModule InstantiationPort Mapping By NamePort Mapping By OrderRecap - Build A Module9Procedural Blocks
Always BlockInitial BlockSensitivity ListBlocking AssignmentNon Blocking AssignmentRecap - Always vs Initial15Traffic Light Controller
Defining The StatesState Machine Logic직접 연습해 보세요: 온라인 Verilog 컴파일러