반응형
verilog를 사용하면 수많은 신호들을 선언하게 됩니다.
일반적으로 아래와 같이 선언을 하게 되면
신호들은 unsiged type으로 취급이 됩니다.(제 경험상 그렇더군요... 틀렸으면 댓글 부탁합니다)
위의 신호는 0~511까지의 값을 가지는 register가 되는 겁니다.
만약에 아래와 같이 선언을 하게 될 경우
같은 bit이지만 -를 표현할 수가 있게됩니다. 값의 범위는 -256~+255 까지 표현이 가능합니다.
예전에 signed arithmetic 포스팅에서 잠깐 언급했지만(저도 틀렸을수도 있어요...배우면서 포스팅중입니다)
signed가 붙으면 연산시에 알아서 보수처리까지 된 결과를 구할 수가 있습니다.
문제는 예전에 DCT 구현하면서 실수했던 부분을 정리를 하려고 합니다.
이걸 하다가 실수했던거는 signed casting을 하는건 문제가 없지만
bit를 확장시킬 때는 tool문제인지 signed 결과가 풀리는 것 같습니다
그림에서 data_2_5와 data_2_6은 둘다 signed reg인데 실제 결과 값이 달라서
디버그하는데 오래걸렸습니다.
잘생각해보면 2의보수를 취하는 signed의 특성상 2의 보수를 유지시켜줘야 하는데 단순하게 0을 붙이는 operation을 하면 unsigned → signed로 되는 것 같네요
설계하시면서 참고하시면 좋을 것 같네요....
'language > Verilog' 카테고리의 다른 글
[systemverilog] task 와 function (0) | 2021.01.31 |
---|---|
[verilog] $signed casting logic count (0) | 2021.01.26 |
[verilog] hardware realtime DCT (0) | 2021.01.26 |
[verilog] 동일 logic LUT 비교 (0) | 2021.01.26 |
[verilog] 16bit floating point hdl 구현(adder) (3) | 2021.01.26 |
댓글