inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

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

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

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

3074

강종민

작성한 질문수 1

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문을 선택하는 것은 단지 설계자의 취향 차이 일까요?

 

verilog-hdl 임베디드 fpga

답변 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 로 기술가능합니다만.. 어려우실 겁니다. (세상은 그렇게 호락호락하지 않다..?)

 

즐공하세요 :)

 

latency 개념 구현

1

87

3

비바도 all os버전

1

71

2

초기화를 reset_n 이 '1'일 때가 아닌 '0' 일 때 실행시키는 이유 질문

1

71

2

다운로드용량

1

71

2

비바도리눅스설치

1

80

2

전체path복사넣기

1

63

2

Vivado 2025.2 리눅스 설치 후 실행 에러와 솔루션 (libxv_commontasks.so)

1

149

2

explorer.exe오류

1

106

3

mobaxterm설치오류

1

90

2

./build시, waveform 'divide color' 사용

1

57

2

Latch와 관련하여 (Time borrowing, Latch-based design)

1

129

2

clean 명령어가 안되는데, 따로 저장해줘야 하는지 궁금합니다.

0

62

1

안녕하세요 설치 관련 질문 드립니다.

1

64

3

16장 mealy 설계.

1

74

2

14장 Cycle 관련, Testbench 코드.

1

64

2

21강(16장) 초기값 설정이 적용되는 시점 질문

1

60

1

20강(15장) - 밀리 머신 관련하여 질문 드립니다.

1

68

2

build에러 질문

0

57

2

1장 ./build에서 에러가 나요

1

73

2

FPGA 강의 보드 문의 드립니다.

1

105

2

5장 DFF특성에 대한 질문

1

77

3

vivado linux 사용 이유.

1

137

2

메모리의 형태가 전체설계에 미치는 영향이 궁금합니다.

1

104

2

디스코드 멤버쉽 등업 관련 문제

1

92

2