입력 받은 이미지를 verilog에서 영상 신호에 맞춰 뽑아주는 module을 설계해보려 합니다
1. image RGB channel
우선 우리가 알고 있는 이미지는 각 위치에 R, G, B값을 가지고 있으며 application 마다 다르겠지만
보통 8bit의 resolution을 가지고 있습니다.
2. display signal
우리가 쓰는 PNL에서는 아래와 같은 신호를 사용하여 PNL을 구동시킵니다
우선 하나하나 설명 해보자면
- Vsync : 영상의 frame을 표현하는 파형
- Hsync : 영상의 세로를 표현하는 파형
설명이 약간 부족하지만 실제로는 위의 sync신호에 margin들을 더합니다
위의 그림으로 표현하면 X Resolution의 길이가 실제로 영상의 가로 길이만큼 구동에 필요 시간이지만
양옆으로 margin 같은게 붙어있는 것을 볼수가 있는데
수식으로 표현하면
Hsync period = X resolution active + back porch + front porch + width
이렇게 표현이 가능합니다.
그리고 구글링좀 하면 아래와 같은 이미지를 찾아 볼수가 있습니다
그림에서 Hsync가 active low인지 active high인지에 따라서 다르지만 설명을 해보자면
위에 그림에서 Dataen의 경우 실제 우리가 쓰는 가로 해상도만큼 길이가 되고
Hsync가 low 인 구간에서 De가 실제로 동작하도록 양옆에 porch(margin)들이 있고
high인 구간이 width인 구간입니다
Vsync는 Hsync와 동일하게 적용이 가능합니다
그래서 이걸 어떻게 설계를 하느냐는 아래와 같은 block diagram을 설계해서 검증하려 합니다
그래서 이걸 좀 코드화 시키면 아래와 같이 설계가 가능합니다
그냥 간단하게 count 기반으로 vsync와 hsync를 만들고 그걸 기반으로 de를 만들면 위와 같이 나오게 됩니다
그걸 simulation을 돌리면
이렇게 됩니다
3. image input/output
참고로 python을 이용해서 image를 hex로 변환하는 로직은 아래와 같이 설계를 했습니다
그래서 이걸 출력을 하면 아래와 같이 data가 출력이 되는데
이걸 verilog에서 받아주려면 아래와 같이 설계하고
이것이 제대로 들어갔는지 확인하는 block은 아래와 같이 설계하면 됩니다
4. simulration 결과
그래서 출력을 하면 아래와 같이 나오는데
내가 simulation을 끝까지 돌리지 않아서 영상을 쓰고 있는중에 멈춰진 것이 그림에서 확인가능힙니다(빨간점)
(예전 블로그에서 정리했던 것들 다시 가다듬으면서 올리는 中)
'language > Verilog' 카테고리의 다른 글
[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 |
[verilog] 16bit floating point hdl구현(multiplier) (0) | 2021.01.25 |
[verilog] memory 및 image filter 설계 (4) | 2021.01.24 |
댓글