인프런 커뮤니티 질문&답변

강종민님의 프로필 이미지
강종민

작성한 질문수

설계독학맛비's 실전 Verilog HDL Season 1 (Clock부터 Internal Memory까지)

[HDL 16장] HW 의 동작을 제어하는 FSM 을 이해해보자. (실습편)

if 문과 case 문의 차이점에 관해 문의 드립니다.

작성

·

2.6K

1

fsm_test.v의 64행 Step 3 의 always  block 에서 o_done 을 1로 셋하는 부분에 궁금한 점이 있습니다.

아래와 같이 if ..else 문을 사용해도 되는 것 같은데 case문을 사용한 것과 타이밍이나 사이즈 면에서 합성 결과가 차이가 나는지  궁금합니다. 시뮬레이션 결과는 같이 보여서요..

if (c_state == S_DONE) o_done <= 1; else o_done <= 0;

if 문과  case문을 선택하는 것은 단지 설계자의 취향 차이 일까요?

 

답변 1

0

설계독학맛비님의 프로필 이미지
설계독학맛비
지식공유자

안녕하세요 :)

Function 적으로 예제를 만들다보니, if else 를 사용했구요. (미쳐 생각하지 못했습니다.)

저의 가이드는 if else 대신 case 사용이 가능하다면 case 를 쓰셔라 입니다. 

 

아래와 같이 if ..else 문을 사용해도 되는 것 같은데 case문을 사용한 것과 타이밍이나 사이즈 면에서 합성 결과가 차이가 나는지  궁금합니다. 시뮬레이션 결과는 같이 보여서요..

function 적으로 동일하게 보이게 만들었을 뿐, if 와 case 는 다른 로직을 만들 수 있습니다.

그리고 if else 와 case 는 서로 다른 기능을 갖고있습니다. 바로 우선순위 입니다.

if 문에는 우선순위의 개념이 존재합니다.

if,          우선순위 1

else if 우선순위 2

else    우선순위 3

우선순위 1 -> 2 -> 3 check  할 수 있는 로직이 생성됩니다.

 

case 문에는 우선순위가 없습니다.

switch (변수)

case 1

case 2

default 

 

case 1, 2, default 를 검사하는데 동시성을 갖습니다. 이는 완벽한 Mux 를 의미합니다.

if else 또한 Mux 를 이용해서 구현이 됩니다만, Mux 의 Chain 형태 (Mux 가 나열된) 로 로직이 합성됩니다.

즉, case 로 표현이 가능하다면 case 가 Logic size 입장에서 적게 사용가능합니다. 

 

if 문과  case문을 선택하는 것은 단지 설계자의 취향 차이 일까요?

설계자의 역량과 꼼꼼함 차이입니다. 다시적어드리면,

저의 가이드는 if else 대신 case 사용이 가능하다면 case 를 쓰셔라 입니다. (Case 문법을 정확하게 알고 계시다면...)

단순한비교는 if -> case 쉽게 변환 가능 합니다.

하지만 복잡한 비교에서는, if else 가 편하실 꺼에요.

if else  더 복잡한 기술이 가능함으로 이론상 모든 if else 를 switch case 로 기술가능합니다만.. 어려우실 겁니다. (세상은 그렇게 호락호락하지 않다..?)

 

즐공하세요 :)

 

강종민님의 프로필 이미지
강종민

작성한 질문수

질문하기