language/Verilog

[verilog] $signed casting 사용

파란하늘코더 2021. 1. 26. 21:45
반응형

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로 되는 것 같네요

 

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