작성
·
267
0
자료를 보다 궁금한 점이 생겨 질문 남깁니다.
작성해주신 코드를 보면 삼항연산자를 많이 사용하시는 것 같습니다.
자료를 공부하면서 좋은 방법이라고 생각해서 저도 많이 사용하고 있습니다.
근데 공부하다가 삼항연산자나 ifelse구문을 많이 사용한 후 합성하게 되면
MUX로 설계되어 delay가 많아지는 문제가 생긴다는 글을 보게 되었습니다.
위의 문제가 맞다면 아래 두가지 내용이 궁금합니다.
ifelse, 삼항연산자를 사용할 때 주의할 점
삼항연산자를 사용하지 않는 설계 방법
답변 1
0
안녕하세요.
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항 연산자가 처음에는 낯설고 코드 분석도 어려운 부분이 있을 수 있지만, 습관이 되면 참 편리한 것 같습니다.
감사합니다 ~!!