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

royroy님의 프로필 이미지
royroy

작성한 질문수

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

사칙연산 예제에서 질문드립니다.

작성

·

248

1

- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요!
- 먼저 유사한 질문이 있었는지 검색해보세요.
- 서로 예의를 지키며 존중하는 문화를 만들어가요.
- 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요.
 
a = 15; b = -8 wrong = a+b; correct = $signed({1'b0,a}) + b; 에서 질문 1 : $signed({1'b0,a})는 5비트 b는 4비트인데 피연산자의 비트길이가 다른데 연산이 가능한가요 ? correct가 5비트로 선언되었으므로 a에 0을 결합하여 5비트를 만들 필요없이 그냥 $signed(a) + b; 만 해줘도 되지 않나요?

답변 2

1

royroy님의 프로필 이미지
royroy
질문자

$signed(a) + b; 로 실행한 결과 원하는 결과가 나오지 않습니다.

생각해보니 애초에 15를 signed로 만들어줄려면 비트가 하나 더 필요하군요...  

정말 기본적인 생각을 안하고있었네요.. ㅠ

 

0

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

안녕하세요 :)

문 1 : $signed({1'b0,a})는 5비트 b는 4비트인데 피연산자의 비트길이가 다른데 연산이 가능한가요 ?

네 가능합니다. b 변수를 auto signed extention 해서 처리합니다. 하지만 이 부분의 rule 은 꼭 스스로 확인해보셔야 해요. Tool 마다 다를 수 있습니다. (최소한 Xilinx 의 tool 에서는 문제가 없다 보장해 드릴께요.)

correct가 5비트로 선언되었으므로 a에 0을 결합하여 5비트를 만들 필요없이 그냥 $signed(a) + b; 만 해줘도 되지 않나요?

직접 코드를 기입하셔서, 돌려보시면 답을 얻으실 수 있을 것 같아요. (환경은 전부 드렸습니다. ^^)

정말 그렇게 해도 될까요? 질문자님께서 답변으로 정리해서 남겨주시면 공부에 도움이 되실 것 같아요.

 

즐공하세요 :)

royroy님의 프로필 이미지
royroy

작성한 질문수

질문하기