본문 바로가기

language/Verilog25

[verilog] $signed casting 사용 verilog를 사용하면 수많은 신호들을 선언하게 됩니다. 일반적으로 아래와 같이 선언을 하게 되면 신호들은 unsiged type으로 취급이 됩니다.(제 경험상 그렇더군요... 틀렸으면 댓글 부탁합니다) 위의 신호는 0~511까지의 값을 가지는 register가 되는 겁니다. 만약에 아래와 같이 선언을 하게 될 경우 같은 bit이지만 -를 표현할 수가 있게됩니다. 값의 범위는 -256~+255 까지 표현이 가능합니다. 예전에 signed arithmetic 포스팅에서 잠깐 언급했지만(저도 틀렸을수도 있어요...배우면서 포스팅중입니다) leehc257.tistory.com/8 signed arithmetic verilog 하면서 제일 헷갈리는게 signed arithmetic 인거같다 ​ 매번 할 때 마.. 2021. 1. 26.
[verilog] hardware realtime DCT DCT같은 수식도 LUT(Look Up table)로 구현할 수도 있지만 실제 연산을 통해서 구현할 수가 있습니다 verilog에서 어떻게 구현이 가능한지 정리를 해보겠습니다 1. DCT 수식 우선 dct는 아래와 같은 수식이라고 하며 cosine 함수의 조합으로 적용을 합니다 아래와 같이 2-dimension 수식에서 필요한 dimension만 추출 할 경우 1-dimension 처리가 가능합니다 2. DCT 구현을 위한 SW 검증 이번에 구글링하면서 정말 힘든게 이게 dct도 정확히 모르고 그냥 무작정 찾은 것도 있었지만 대부분 아래와 같은 그림만 주구장창 나와서 이해하는데 한참 걸렸습니다 해당 논문은 dct를 hardware로 구현하는 방식은 무수하게 많은데 compelxity를 고려하여 여러가지 .. 2021. 1. 26.
[verilog] 동일 logic LUT 비교 예전에 블로그 포스팅할때 정리해둘라고 했는데 아직도 정리를 못했습니다 우선 내용은 그대로 복사해놓고 집에서 시간나면 다른 tool로 돌려볼 예정입니다. 내용은 RGB to YCbCr을 두가지 방식으로 변환하였을 때의 LUT변화량 입니다 1. Case 1(한번에 연산) 이렇게 연산을 하면 simulation에서는 가능할지 몰라도 clock 주파수가 높아진다거나 target하는 timing에 meet를 하지못하는 case가 발생할 수도 있습니다. 2. Case 2(clock 분배) 이렇게 설계하면 기존보다 5 clock정도의 delay가 생기지만 timing meet하기에는 유리한 조건으로 바뀌게 됩니다. FPGA에서는 case 1처럼 해도 될 때도 있습니다만, 권고사항은 Case2 처럼 설계하는 방식이겠죠.. 2021. 1. 26.
[verilog] 16bit floating point hdl 구현(adder) python에서 사용하는 weight나 bias는 전부 floating point로 구성이 되어있습니다 하지만 이를 그대로 hdl로 구현하기에는 불필요한 logic이 너무 클 것 같다고 생각하여 우선 fixed point로 해볼려고 했으나 이왕 하는 김에 floating point로 똑같이 설계해서 SW vs HW 결과값을 비교하는 걸 시작하려 합니다 1. floating point 구조 floating32는 너무 size가 클 것같아서 우선 floating16 spec 찾아보니 설계를 하려하고 찾아보니 아래와 같은 구조를 가집니다 sign bit 1 지수 bit 5 가수 bit 10 이걸 유효숫자 형태로 표현한다음에 더하거나 곱하는 식으로 하는것인데 인터넷에 설명된 자료는 대부분이 32bit 기준인데 .. 2021. 1. 26.
[verilog] 16bit floating point hdl구현(multiplier) 저번 시간에 작성한 adder에 사용했던 코드들을 기반으로 multiplier를 구현해보려고 합니다 1. floating point multiplier 설계 multiplier는 over, underflow를 처리를 잘해줘야 하는 것으로 예상이 되는데 구현을 해야 convoltion 처리도 가능하므로 rtl code는 아래처럼 구성을 했습니다 이렇게 코드를 구성하면 나중에 warning이 뜨겠지만 그냥 결과만 보는 것이기에 그냥 사용했습니다 2. simulation result simulation을 돌려서 나온 결과는 결과가 똑같이 나온것을 확인 할 수 있습니다 input : (19,88) → (17,195) → (20,191) → ... output : (19,88) → (17,195) → (20,19.. 2021. 1. 25.
[verilog] memory 및 image filter 설계 image processing을 하기 위해서는 다양한 filter mask를 설계하여야 하는데 가장 간단한 3x3 sobel filter를 설계해보겠습니다 그냥 하기엔 아쉬우니 Ycbcr로 변경하여 아래와 같은 data flow로 진행이 됩니다 1. YCbCr 이제 Ycbcr을 구현하면 되는데 구글링 하면 아래와 같은 수식이 나오게 됩니다 hardware에서는 소수점을 표현하는데 제한이 있기 때문에 아래와 같은 수식으로 변경하여 설계를 합니다 이걸로 검증을 해보면 아래와 같이 나오게 됩니다 결과를 보면 Y에 대한 수식이 거의 동일하게 나오는 것을 확인하고 simulation을 하면 아래와 같이 나오게 됩니다. 2. image filter 이제 간단한 sobel mask를 설계를 해봅시다 우선 sobel .. 2021. 1. 24.