본문 바로가기
language/Verilog

[verilog] $signed casting 사용

by 파란하늘코더 2021. 1. 26.
반응형

verilog를 사용하면 수많은 신호들을 선언하게 됩니다.

 

일반적으로 아래와 같이 선언을 하게 되면 

신호들은 unsiged type으로 취급이 됩니다.(제 경험상 그렇더군요... 틀렸으면 댓글 부탁합니다)

 

위의 신호는 0~511까지의 값을 가지는 register가 되는 겁니다.

 

만약에 아래와 같이 선언을 하게 될 경우

같은 bit이지만 -를 표현할 수가 있게됩니다. 값의 범위는 -256~+255 까지 표현이 가능합니다.

 

예전에 signed arithmetic 포스팅에서 잠깐 언급했지만(저도 틀렸을수도 있어요...배우면서 포스팅중입니다)

leehc257.tistory.com/8

 

signed arithmetic

verilog 하면서 제일 헷갈리는게 signed arithmetic 인거같다 ​ 매번 할 때 마다 나만의 부호 bit 체계로 하려다보니 설계할때 너무 비효율적이라 ​ 이번에 공부하면서 제대로 해볼려고 한다. ​ 우선

leehc257.tistory.com

signed가 붙으면 연산시에 알아서 보수처리까지 된 결과를 구할 수가 있습니다.

 

문제는 예전에 DCT 구현하면서 실수했던 부분을 정리를 하려고 합니다.

leehc257.tistory.com/23

이걸 하다가 실수했던거는 signed casting을 하는건 문제가 없지만

 

bit를 확장시킬 때는 tool문제인지 signed 결과가 풀리는 것 같습니다

그림에서 data_2_5와 data_2_6은 둘다 signed reg인데 실제 결과 값이 달라서

 

디버그하는데 오래걸렸습니다.

 

잘생각해보면 2의보수를 취하는 signed의 특성상 2의 보수를 유지시켜줘야 하는데 단순하게 0을 붙이는 operation을 하면 unsigned → signed로 되는 것 같네요

 

설계하시면서 참고하시면 좋을 것 같네요....

 

댓글