Case 문은 주어진 표현식이 목록 내부의 다른 표현식 중 하나와 일치하는지 확인하고 분기합니다. 일반적으로 장치를 구현하는 것이 익숙합니다.
확인해야 할 측정 단위가 많고 장치 대신 우선순위 인코더로 합성하는 경우 if-else 구성이 적용되지 않을 수 있습니다.
~ 안에 Verilog , Case 문에는 Verilog 키워드, Case('casez', 'casex') 및 endcase 사이의 모든 코드가 포함됩니다. Case 문은 if-else-if 문을 간호하는 Associate와 거의 유사한 Select-One-of-Many 구조일 수 있습니다.
통사론
Verilog Case 문은 Case 키워드로 시작하고 endcase 키워드로 끝납니다.
괄호 안의 표현식은 구체적으로 한 번만 평가할 것을 목표로 하는 영역 단위이며 작성된 순서 내의 대안 목록과 비교됩니다.
그리고 선택 항목이 주어진 측정 단위와 일치한다는 진술입니다. 여러 명령문의 블록은 정렬되어야 하며 시작과 끝 안에 있어야 합니다.
case () case_item1 : case_item2, case_item3 : case_item4 : begin end default: endcase
주어진 표현식과 일치하는 사례가 없으면 기본 항목 측정 단위 내의 명령문은 작동하지 않습니다. 기본 문은 필수가 아니며 Case 문 전체에 기본 문이 하나만 있습니다. Case 문이 중첩되어 있습니다.
실행은 케이스 블록을 종료하지만 표현식과 일치하는 항목이 하나도 없고 기본 명령문이 제공되지 않으면 아무 작업도 수행하지 않습니다.
예
다음 유행 모듈에는 3개의 서로 다른 3비트 입력 중 하나를 out으로 표시된 부호로 라우팅하는 2비트 선택 신호가 포함되어 있습니다.
날짜를 문자열로 변환
Case 문은 sel 값을 지원하는 출력에 올바른 입력을 할당하는 데 사용됩니다. sel은 2비트 신호일 수 있으므로 0부터 3까지 202개의 콤보를 갖습니다. 기본 명령문은 sel이 3인 경우 출력을 0으로 줄이도록 도와줍니다.
module my_mux (input [2:0] a, b, c, // three 3-bit inputs [1:0]sel, // 2-bit opt for signal to choose on from a, b, c output reg [2:0] out); // Output 3-bit signal // invariably block is dead whenever a, b, c or sel changes in value invariably @ (a, b, c, sel) begin case(sel) 2'b00 : out = a; // If sel=0, output can be a 2'b01 : out = b; // If sel=1, output is b 2'b10 : out = c; // If sel=2, output is c default : out = 0; // If sel is something, out is commonly zero endcase end endmodule
사례 설명 헤더
Case 문 헤더는 Case('casez', 'casex') 키워드와 Case 표현식으로 구성되며 일반적으로 모두 한 줄의 코드로 구성됩니다.
Case 문에 full_case 또는 Parallel_case 지시어를 추가할 때 지시어 측정 단위는 Case 문 헤더 끝에 있는 Case 표현식 뒤와 이어지는 코드 줄의 Case 항목 앞에 실시간으로 주석으로 추가됩니다.
케이스 품목
케이스 항목은 익숙한 비트, 벡터 또는 Verilog 표현식을 케이스 표현식과 비교하는 것입니다.
'와 같은 다른 고급 프로그래밍 언어와는 달리 씨 '인 경우 Verilog 케이스 문에는 암시적 break 문이 포함되어 있습니다.
이 사례 표현식과 일치하는 첫 번째 사례 항목으로 인해 해당 사례 항목 문이 작동하지 않게 되므로 이에 대한 측정 단위의 나머지 모든 사례 항목이 사례 문을 거치게 됩니다.
사건 품목 명세서
케이스 항목 문은 케이스 항목이 이 케이스 표현식과 일치하는 경우 하나 이상의 Verilog 문이 작동하지 않는 것입니다. VHDL과 달리 Verilog의 경우에는 그 자체가 표현식이 될 수 있습니다.
Verilog 코드 문서의 구문 분석을 변경하려면 Verilog 사례 항목 설명을 키워드 사이에 묶어야 합니다. '시작하다' 그리고 '끝' 특정 사례 항목에 대해 하나 이상의 명령문이 종료되는 경우.
카세즈
Verilog에는 'z' 및 '?'를 활성화하는 Case 문의 변형인 Casez 문이 있습니다. 대소문자 비교 전반에 걸쳐 '상관 없음' 값으로 처리되는 값입니다.
'Z'와 '?' 측정 단위는 케이스 표현식 내부에 있는지 또는 케이스 항목 내부에 있는지 상관하지 않는 것으로 처리됩니다.
string.compareto C#
'Don't Care'로 Case문을 비밀리에 작성하는 경우 Casez문을 사용하고 '?'를 사용합니다. 케이스 내부의 'z' 문자 대신 문자는 '상관 없음' 비트를 목적으로 합니다.
카섹스
Verilog에는 'z', '?' 및 'x' 값을 비교 전반에 걸쳐 '상관 없음' 값으로 처리할 수 있도록 하는 Case 문의 변형인 Casex 문이 있습니다.
'x', 'z' 및 '?' 측정 단위는 케이스 표현식 내부에 있는지 또는 케이스 항목 내부에 있는지 상관하지 않는 것으로 처리됩니다.
전체 사례 설명
전체 Case 문은 모든 getable Case-Expression 바이너리 패턴이 Case 항목 또는 Case 기본값과 일치하는 내부 Case 문일 수 있습니다.
Case 문이 Case 기본값을 포함하지 않고 인쇄된 Case 항목과 일치하지 않는 이진 Case 표현을 찾아볼 수 있는 경우 Case 문은 가득 차지 않습니다.
전체 Case 문은 모든 getable 바이너리, 비바이너리, 바이너리와 비바이너리 패턴의 혼합이 Case 문 내부의 Case 항목으로 포함된 Case 문일 수 있습니다.
Verilog는 케이스 설명이 합성이나 고밀도 지질단백질 시뮬레이션이 가득 찬 것을 원하지 않지만 Verilog 케이스 설명은 케이스 기본값을 추가하여 가득 차게 됩니다. VHDL은 사례 설명이 고밀도 지질단백질 시뮬레이션으로 가득 차기를 원하며 일반적으로 간호학 '기타' 절의 준회원을 원합니다.
평행 사례 진술
병렬 케이스 문은 케이스 표현식을 하나의 케이스 항목에만 일치시킬 수 있는 내부 케이스 문일 수 있습니다.
하나의 사례 항목에 대해 일치할 수 있는 사례 표현식을 찾아볼 수 있는 경우 일치하는 사례 항목의 측정 단위가 겹치는 사례 항목으로 명시되므로 사례 문이 평행하지 않습니다.
하드웨어 회로도
RTL 코드는 4:1 멀티플렉서를 나타내는 하드웨어 회로도를 얻기 위해 정교하게 만들어졌습니다.
위 설계를 실행한 후 sel이 3일 때 출력은 0이고 다른 값에 할당된 입력에 해당합니다.
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0b11 out=0x0 [10] a=0x5 b=0x5 c=0x5 sel=0b10 out=0x5 [20] a=0x1 b=0x5 c=0x6 sel=0b01 out=0x5 [30] a=0x5 b=0x4 c=0x1 sel=0b10 out=0x1 [40] a=0x5 b=0x2 c=0x5 sel=0b11 out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
Case 문에서 표현식의 각 비트가 0, 1, x 및 z를 포함한 대안 중 하나와 일치하는 경우에만 비교가 성공합니다. 위의 예에서 sel의 비트 중 하나라도 x 또는 z이면 기본 일치하는 다른 대안이 없기 때문에 문이 실행됩니다. 이러한 경우 출력은 모두 0이 됩니다.
ncsim> run [0] a=0x4 b=0x1 c=0x1 sel=0bxx out=0x0 [10] a=0x3 b=0x5 c=0x5 sel=0bzx out=0x0 [20] a=0x5 b=0x2 c=0x1 sel=0bxx out=0x0 [30] a=0x5 b=0x6 c=0x5 sel=0bzx out=0x0 [40] a=0x5 b=0x4 c=0x1 sel=0bxz out=0x0 [50] a=0x6 b=0x5 c=0x2 sel=0bxz out=0x0 [60] a=0x5 b=0x7 c=0x2 sel=0bzx out=0x0 [70] a=0x7 b=0x2 c=0x6 sel=0bzz out=0x0 [80] a=0x0 b=0x5 c=0x4 sel=0bxx out=0x0 [90] a=0x5 b=0x5 c=0x5 sel=0bxz out=0x0 ncsim: *W,RNQUIE: Simulation is complete.
디자인의 사례 설명에 사례 항목 대안에 x와 z가 있는 경우 결과가 달라집니다.
module mux (input [2:0] a, b, c, output reg [2:0] out); // Case items have x and z, and sel has to match the exact value for // output to be assigned with the corresponding input always @ (a, b, c, sel) begin case(sel) 2'bxz: out = a; 2'bzx: out = b; 2'bxx: out = c; default: out = 0; endcase end endmodule
Case와 if-else의 구별
Case 문은 다음과 같은 두 가지 면에서 if-else-if와 다릅니다.
- 에 주어진 표현 다른 경우라면 블록은 더 일반적인 반면, 케이스 블록에서는 단일 표현식이 여러 항목과 일치됩니다.