inflearn logo
강의

강의

N
챌린지

챌린지

멘토링

멘토링

N
클립

클립

로드맵

로드맵

지식공유

Verilog FPGA Program 1 (Arty A7-35T)

ifelse, 삼항연산자에 대해서 질문 있습니다.

425

이동훈

작성한 질문수 7

0

자료를 보다 궁금한 점이 생겨 질문 남깁니다.

작성해주신 코드를 보면 삼항연산자를 많이 사용하시는 것 같습니다.

자료를 공부하면서 좋은 방법이라고 생각해서 저도 많이 사용하고 있습니다.

근데 공부하다가 삼항연산자나 ifelse구문을 많이 사용한 후 합성하게 되면

MUX로 설계되어 delay가 많아지는 문제가 생긴다는 글을 보게 되었습니다.

위의 문제가 맞다면 아래 두가지 내용이 궁금합니다.

  1. ifelse, 삼항연산자를 사용할 때 주의할 점

     

  2. 삼항연산자를 사용하지 않는 설계 방법

verilog-hdl fpga

답변 1

0

alex

안녕하세요.

RTL 설계는 대부분의 코드가 아래와 같이 구현됩니다.

연산 - Mux - Flip/Flop - 연산 - Mux - Flip/Flop - 연산 - Mux - Flip/Flop ~

Mux를 if-else문이나, 3항 연산자나, case문으로 구현하지만, 합성을 하면 동일하게 변환됩니다.

 

mux를 사용하면 delay가 많아진다는 것은 다른 이야기 입니다.
즉 Digital Logic에서 중요한 것은 Clock의 동기에 맞게 설계하는 것이고,
위에서 Flip/Flop과 Flip/Flop 사이에 있는 "연산 - Mux"가 1-clock 안에 구현이 되어야 합니다.
"연산 - Mux"가 구현할 내용이 많아서 1-clock 안에 동작하지 않으면 Timing 오류가 발생합니다.
이러한 경우는 "연산-Mux"를 2개나 3개로 나누어서 그 중간에 Flip/Flop을 추가해서 Timing 오류가 발생하지 않도록 구현해야 합니다.

제 코드는 주로 3항 연산자로 이루어져 있습니다. 저의 오랜 경험에 의하면 3항 연산자를 사용할 때 코드가 보기에도 좋고 간단히 몇줄로 처리할 수 있습니다. 3항 연산자가 처음에는 낯설고 코드 분석도 어려운 부분이 있을 수 있지만, 습관이 되면 참 편리한 것 같습니다.

감사합니다 ~!!

[HDL 32장-2부] 참고 링크 관련

1

35

2

강의 만료일 연장 신청

0

32

2

기초예제 파일 불러오기 문의

0

25

2

Zybo 환경에서 PL RTL UART 보드 검증 방법

0

30

2

Verilog 코딩 스타일

0

119

2

xilinx 권고와 차이

0

248

2

강의자료

0

115

1

open hardware manager에서 보드 인식 못하는 문제

0

343

2

RAM ip를 이용하여 FIFO 기능을 구현할 수도 있나요?

0

327

1

SPI MASTER 질문

0

248

1

SPI master testbench 질문

0

327

1

자사 개발보드 관련

0

357

2

안녕하세요. IP Packaging 관련 질문 있습니다.

0

317

1

안녕하세요. verilog 활용 관련 문의드립니다.

0

342

1

안녕하세요 fpga_intro_v16 192p에 질문있습니다!

0

335

1

안녕하세요 SLVAE 컨트롤러에 대한 질문이 있습니다

0

371

1

안녕하세요 I2C Register 모듈에 대해서 질문이있습니다.

0

416

1

SPI에서 Master 내의 miso 값 update 과정에서 질문있습니다.

1

878

1

안녕하세요 i2c master 부분에 관련하여 질문있습니다.

0

612

1

SPI Master 부분 질문입니다.

1

612

3

I2C Master 모듈관련 질문입니다.

0

1182

1

memory configuration

0

841

1

UART, SPI구현

0

657

1

SPI와 I2C의 차이

2

1981

1