• 카테고리

    질문 & 답변
  • 세부 분야

    반도체

  • 해결 여부

    미해결

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

24.03.06 04:07 작성 조회수 125

0

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

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

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

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

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

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

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

     

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

답변 1

답변을 작성해보세요.

0

alex님의 프로필

alex

지식공유자

2024.03.06

안녕하세요.

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항 연산자가 처음에는 낯설고 코드 분석도 어려운 부분이 있을 수 있지만, 습관이 되면 참 편리한 것 같습니다.

감사합니다 ~!!