2019년 11월 20일 수요일

CLK 카운터, 주파수 카운터

이번에 테스트한 보드는 주파수 카운터이다.

​

명칭은 클럭(CLK)카운터이기도 하고, 주파수 카운터 둘다 된다.

​

최근에 주파수의 변화를 감지하여 이벤트를 발생시키는 테스트를 해야 할 일이 있어서 한번 만들어보았다.

​

보드는 기존에 제작된 CVBS,SDI 계측기 보드를 가지고 구현을 해보았고, 이 보드에서 동작하는 몇가지 CLK을 직접 체크해보는걸로 테스트하였다.

​



구현 방법은 여러가지 방법이 있겠지만 여기서는 FPGA를 이용하여 보드에서 가장 빠른 148.5Mhz를 가지고 1초 주기를 만들어서 들어오는 주파수를 직접 카운터하는 방식으로 하였다.

카운터된 숫자는 PIC18F MCU로 전달되어 몇가지 계산과 변화된 주파수 양에 따라 동작을 하고, 7인치 모니터에 숫자로 보여줄수 있게끔 FPGA에 다시 전달되게끔 하였다.

​

샘플링 주기를 짧게 하여 카운터하는 방식도 있는데, 실제로 하고자 하는것은 1초동안 수 Hz의 작은 변화까지 체크하는게 중요해서 1초라는 시간을 샘플링 주기로 하였다.

​

보드에서는 PIC18F MCU에서 사용하는 20Mhz 크리스탈과, 27Mhz 오실레이터, FPGA에서 나오는 499.675 Khz 주파수 3개를 입력으로 넣어주면서 체크를 해보았다.

                                
 

직접 보드에서 선을 납땜하여 연결해주는 방식으로 테스트 하였다.

아래 사진에서 보듯이

검은색 선 : 주파수 입력 선이다.

갈색 : 20Mhz 크리스탈 , 빨간색 : 27Mhz 오실레이터, 귤색 : 499.675Khz이다.

 
                                
 

아래 사진을 보면 검은색과 빨간색선(27Mhz)을 연결하였을때 모니터 상에 숫자가 표시된다.

27 :: 003 : 529 라고 표시가 되는데 27.003529 Mhz 이자 1초동안 27,003,529 개의 클럭이 들어오는것을 알수 있다.
 


​

CLK이나 주파수라는것이 실제로는 미세하게 변화가 생기기도 하고, 흔들리기도 하는데 스펙을 보면 PPM이라는 값이 있다. 이 카운터를 보게 되면 내가 지금 사용하고 있는 주파수 출력 장비가 어느정도 흔들리는지 또는 어느정도 시간이 지난다음 안정화 되는지등을 체크해볼수 있다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

Artix7으로 DDR3 테스트

이번 보드는 Xilinx 사의 Artix7 계열의 XC7A75T FPGA를 이용하여 DDR3를 동작시키는 보드이다.

사용툴은 Vivado 2018.2를 사용하였다.

(Vivado 툴 초보자 사용법은 네이버 블로그  FPGA관련 카테고리에 올려두었다.)

​

지금까지 FPGA를 가지고 DDR을 구동시켰던 보드는.

1) Altera사의 CycloneIV를 이용하여 DDR2 구동.

2) Altera사의 CycloneV를 이용하여 DDR3 구동을 시켰는데 주로 영상 데이타를 캡쳐나, FIFO형태로 구동을 시켰었고, 이번 보드는 FPGA 데모보드 형태로 I/O를 LED에 연결시켜놓아서 DDR3에 Write했던 데이타를 다시 읽어서 LED에 동작시키는것으로 검증을 해보았다.

​

FPGA는 Xilinx의 XC7A75T (Artix7 계열) 이고, DDR3는 Micron사의 1Gb용량의 MT41K64M16TW (16bit) 를 2개 사용하여 데이타 bit는 H/W 32비트를 사용하였다.

​

아래 사진은 FPGA에 DDR3 가 2개 배치되어있는 보드 사진이다.


​

Vivado툴을 이용하여 DDR3를 구동하기 위해서는 아래와 같이 제공되는 IP인 MIG(Memory Interface Generator)를 이용하여 해당되는 DDR3의 IP를 만들어주어야 한다.

현재 보드에서는 DDR3경우 400Mhz까지 동작을 할수는 있지만 303Mhz로 외부 CLK동작을 시켰고, DDR3전원은 1.35V를 사용하기 때문에 설정을 1.35V로 해주었다.

Aritx7의 경우 DDR3를 구동할때 ALTERA CycloneV 보다는 동일조건에서 열이 좀더 나는것으로 느껴진다.


​

테스트는 DDR3 내부 Address에 아래와 같이 Data를 Write를 하고, READ후 LED에 순서대로 표시하는것으로 하였다.

​

DDR3 0 ~ 39 번지 Address에 각각 Address와 동일한 0~39 Data를 Write하고 29번지 Address에만 전혀 다른 값을 Write를 해주었다.

​

이후에 5군데 Address 6 , 7 , 8 , 9 , 특정값 넣은 Add 순서대로 Read하여 오른쪽 LED 라인에 위에서 아래순서에 맞춰 각각 해당되는 값을 표시하였다.

                                
 

이 부분은 User가 본인이 DDR3를 구동하기 위하여 만든 코드를 테스트하기 위한 보드 구성이고,Xilinx의 경우 Vivado 툴에서 IP생성후에 아래와 같이 "Open IP Example Design" 을 이용하여 예제로 만들어진 코드를 가지고 검증하는 방법도 있다.
 

                              
 

보드가 처음 나오면 "Open IP Example Design"을 이용하여 먼저 H/W 검증을 마치고, 이후에 본인이 구동하는 코드를 만들어서 검증을 하면서 동작시키면 된다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

RS232, USB to RS232 시리얼분배기


이번 보드는 "RS232 분배기" 및 "USB to RS232" 기능을 갖춘 보드이다.
​
예전 장비들을 RS232로 여러 대 동작시킬 때 가끔씩 필요할 때가 있는데 요즘은 RS232 포트 없이 USB 단자만 있는 노트북이나 PC들이 많이 있어서 요즘 PC에서도 사용이 가능하게끔 "USB to RS232" 기능까지 내장을 하여 만들어 보았다.
하지만 USB특성이 사용중 또는 접속시 문제가 될때가 간혹 발생하기때문에 안정적인 사용은 RS232로 하는게 더 좋다. 물론 감안하고 사용한다고 하면 괜찮지만..
내 경우 USB 마우스나 키보드, 외장하드를 사용할때 가끔씩 인식이 안될때가 있어서 그냥 다시 뺏다 수초후 다시 연결하고 그냥 사용한다.
​
현재 제작된 보드 블럭도와 사진은 아래와 같다.
​
1. 입력 단자는 RS232 D-SUB 9PIN 단자와 USB MINI B 단자이다.
2. 출력쪽은 D-SUB 9PIN 4개 이다.
3. 전원은 DC +5V를 별도로 넣어주거나 USB Port연결시 USB전원을
사용하면 된다.
4. LED로 전원 상태 및 RX, TX 통신 상태를 보여준다.
​
분배기 기능을 FPGA로 구현을 하면서
1. 출력 4 Port에 대해서 D-SUB입력 또는 USB입력을 선택해주는 기능이
가능하게 되었다.
2. 그리고, 추가로 현재 통신되는 속도를 FND를 이용하여 보여줄수 있다.
​
물론 RS232통신 특성상 약속된 문자를 보낼때 통신속도가 제대로 보여진다.
​
스위치에 1번에 의해서 선택될때 아래와 같이 동작된다.
FND에서 RS232포트가 선택된것을 알려준다.
​
FND에서 USB포트가 선택된것을 알려준다.
​
그리고, RS232는 RS422이나 RS485와는 다르게 1:1 통신을 원칙으로 하기때문에 1:N 통신을 위해서는 TX는 모든 N채널에 줄수 있지만 RX는 오로지 하나에서만 받을 수 있다.
​
아래 블럭도가 현재 보드에서 1:N 통신에서 RX,TX가 연결되는 모습을 보여준다.
​
아래 사진을 보면 보드 1번 RS232 D-SUB 단자에 RX,TX를 서로 쇼트하여 내장된 USB to RS232로 통신되는 것을 보여주고 있다.
이때 대문자 'U' 나 "0x55" 를 전송하게 되면 통신 속도를 FND로 보여줄수 있다.
통신 속도가 올라가면 오차값이 커질때가 있는데 현재 연결된 시리얼 통신이 제대로 됐는지 정도 체크할정도로 사용하기에는 무리가 없어보인다.
​
아래 사진을 보면 통신 속도 9,600으로 하고 대문자 'U'를 전송시 FND에 9.6 이
표시되는것을 볼수 있다. FND가 4개짜리라서 최소 단위가 백단위부터 시작한다.

FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

2018년 9월 28일 금요일

PSF 와 Interlace의 차이점

* PSF( Progressive Segmented frame ) 와 Interlace의 차이점.

앞장에서 Interlace와 Progressive의 차이점에 대한 설명을 본 사람들은 대충 Interlace의 형태에 대해서 어느정도 이제 감이 잡힐것이다.
그러면 결론적으로 Interlace와 PSF 와의 포맷자체의 차이가 있냐라고 하면,

정답은 " 없다 " 이다.

그럼 두 Format의 차이가 어디서 있냐라고 하면 원영상이 어떤 영상이냐를 가지고 말할수 있다.
Interlace 형태의 ODD, EVEN 으로 나뉘어져 있는 영상은 우리가 Data 양을 줄이거나 Video Format형태에서 만들어진 인위적인 Format이지 원래부터 Interlace 영상자체라는건 없다고 생각하면 된다.
우리가 눈으로 보고 있는 모든 영상 자체는 Progressive와 같이 위에서 아래로 다 이어져 있는 영상이고, 이걸 카메라로 찍을때도 하나의 전체적인 영상이지 처음부터 ODD,EVEN으로 나뉘어져 있는 자연의 영상은 없다는 것이다.

그럼, PSF 는 원영상이 어떤 영상이냐고 하면..

24Psf Format이라고 하면 원 영상이 24 Frame이고, 이 24Frame을 48i 로 만든 Format인것이다.
즉 하나의 Progressive 영상자체를 2개의 segment (interlace에서는 field) 로 나누어 놓은것이다.

그럼, 그림을 보면서 한번 Psf 와 Interlace 의 차이를 좀더 살펴보자.



그림 1 은 하나의 Frame 에서 홀수, 짝수 줄을 나누어서  즉 (1,3,5,...1079) , (2,4,6...1080) 줄로 나눈 영상을 홀수는 Segment A  , 짝수는 Segment B 로 나누어서 48i 형태로 보내주고 있는것이다.




그림 3은 60i 의 Interlace를 보여주고 있다.
홀수(Field 1) , 짝수(Field 2) 가 하나의 Frame에서 나온것이 아니고, 2개의 Frame에서 나온것이다.

이 차이점은 실제로 굉장히 중요한 포인트중에 하나이다.
위 2개의 영상에서는 원영상도 같고, PSF 와 Interlace 로 변환된 영상에서도 Frame 숫자만 틀리지 모든 영상 데이타 자체가 동일하게 보인다.

하지만 아래의 영상을 살펴보자.


그림 2는 매 Frame마다 White , Black 으로 바뀌는 영상에서 PSF 로 바뀐 영상을 보여주고 있다.
이 부분에 대해서는 이제 이해하는데 있어서 문제가 없을것이다.
그럼, 아래 영상을 보자.




그림 4 는 똑같이 매 Frame마다 White, Black 의 영상을 Interlace의 형태로 바뀐모습을 보여주고 있다.

여기서 중요한 포인트가 그림 3 과 그림 4를 비교해보자.
원 영상이 분명히 틀리지만 Interlace로 변환된 Data는 똑같다.

하지만 PSF 는 원영상이 틀린거에 대한 변환된 Data도 다르다는것을 보여주고 있다.

즉, PSF는 영상을 다시 Progressive 로 바꾸는 과정에서 두개의 Segment 를 합치기만 하면 원래의 동일한 영상을 복원할수 있다.
하지만 Interlace는 원영상은 분명히 틀리지만 Interlace 영상 자체를 Progressive로 바꿀때 100% 동일하게 바꾸는데 있어서 생기는 문제점이 분명 생긴다.
이러한 문제때문에 Interlace를 Progressive로 변환하는 과정이 복잡하고, 매우 어렵다는것을 어느정도 가늠하게 된다.
 
FPGA관련 정보, 영상 신호 이론, 하드웨어 관련 더 많은 정보는 하기 네이버 블로그에 있습니다. https://blog.naver.com/zaszas2345

VHDL이란 언어에 대한 소개

여기에 있는 내용은 VHDL 이란 언어에 대해서 간략히 설명을 해 놓은것이다.
시중에 많은 책들이 나와있지만 어떤 책을 사야할지 모르는 사람들은 여기에 있는 내용을 한번정도 공부하고 나면 아마 다른 책을 구입하는데 있어서 많은 도움이 될거라 생각한다.
또는 본인이 VHDL을 공부하고 싶다라고 한번쯤 마음을 먹었다면 여기의 내용을 가지고 공부를 한번정도 하기에는 부족함이 없다고 생각한다.
VHDL을 처음 접하는 사람들 위주로 설명을 해놨지만 여기에 있는 내용은 누구나 알고 있어야 하는 기본적인것이기 때문에 가벼운 마음으로 읽어보는것도 괜찮다.


여기에 있는 내용은 누구나 다운로드 해서 볼수 있지만 그 외의 용도로 사용될때는 출처를 명시하고 사전 허락을 받아야만 합니다.

다운로드 파일은 아래 네이버 블로그  FPGA관련항목 VHDL언어에  있음.
 
네이버 블로그 : https://blog.naver.com/zaszas2345

Vivado 2018.2사용법

그동안 Altera와 Quartus만 사용을 해오다 요즘 Xilinx를 공부하면서 Vivado 2018.2 툴을 사용하고 있다. Vivado툴을 사용하면서 기본적으로 설치부터 프로젝트 만들기등을 문서로 작업을 해보았다.
단순 툴적인 부분에 있어서 기본적인 내용때문에 처음 접근이 대체로 어려운데 여기있는 문서정도면
본인이 프로젝트를 만들고 사용하는데는 크게 불편함이 없을듯 하고 그 외의 기능들은 나도 지속
사용하면서 업데이트 하도록 하겠다.


현재는 총 5개의 파일이 있다.


1. VIVADO 설치 방법.
2. VIVADO 프로젝트 만들기.
3. Bit파일과 MCS파일 만들고 다운로드 하기.
4. PLL IP만들기.
5. RAM IP만들기.


위 순서대로 보는게 좋고, 문서만 보는것보다는 실제 Vivado 툴을 실행해서 같이 보면서 하면 좋다.


이외 기능이나 DDR IP만들기등은 본인도 공부하면서 준비가 되면 올릴수 있도록 하겠다.

여기에 있는 내용은 누구나 다운로드 해서 볼수 있지만 그 외의 용도로 사용될때는 출처를 명시하고 사전 허락을 받아야만 합니다.
 
다운로드 파일은 아래 네이버 블로그  FPGA관련항목 VIVADO사용법에 있음.
 
네이버 블로그 : https://blog.naver.com/zaszas2345

Quartus 사용법.

여기에 있는 내용은 QuartusII 9.1 을 가지고 간단한 프로젝트를 만들어서 컴파일하고, 시뮬레이션, 다운로드까지 하는 부분과 Quartus의 몇가지 기능들을 나누어서 문서로 만들어 놓았다.
QuartusII 를 처음 접하는 사람들위주로 프로젝트를 처음부터 만들고 다운로드하는 과정을 Step별로 해놓았기 때문에 따라하다보면 크게 어렵지 않게 프로젝트를 만들수 있을것이라고 생각한다.
아주 기본적인 부분에 대한 설명이고, 실제로 사용하는데 있어서 꼭 필요한 부분만을 설명했다.
실제로 본인이 업무를 할때 하는 방법대로 해놓았기 때문에 사람마다 프로젝트를 만드는데 있어서 약간의 차이가 있기때문에 여기에 있는 기본을 토대로 자기 스타일대로 일을 하면 된다.

현재는 총 6개의 파일이 있다.
그 중에 5번에 해당되는 내용은 Quartus가 버젼이 올라가면서 10.0 이 넘어가는 버젼부터 자체 시뮬레이션 기능이 빠졌기때문에 QuartusII 11 버젼과 ModelSim(모델심)을 이용하여 시뮬레이션하는 방법에 대해서 설명해 놓았다.

1. Quartus II 9.1 compiler.pdf
2. Quartus II 9.1 시뮬레이션.pdf
3. Quartus II 다운로드.pdf

위 내용은 서로 이어지는 부분이기때문에 순서대로 보는것이 좋다.

그외 Quartus의 기능들에 대해서는 문서를 따로 하나씩 만들어서 올릴예정이다.

4. QuartusII 에서 VHDL파일 옮기고 컴파일하기.pdf
5. QuartusII 11 & ModelSim(모델심)으로 시뮬레이션. zip
(설명 17에서 경로 설정이 ModelSim 이 아니고, ModelSim-Altera입니다. 설명 19 처럼 하면 됨.)
6. VHDL과 Verilog 언어 같이 사용하기.pdf

7. Quartus12.1 Programmer User Manual
 (Quartus Tool에서 POF, JIC, SOF 파일등 다운로드만 사용할때는 Quartus 다운로드
  전용 설치파일만 설치해서 사용하면 편리하다.)

여기에 있는 내용은 누구나 다운로드 해서 볼수 있지만 그 외의 용도로 사용될때는 출처를 명시하고 사전 허락을 받아야만 합니다.
 
다운로드 파일은 아래 네이버 블로그  FPGA관련항목 Quartus 사용법에 있음.
네이버 블로그 : https://blog.naver.com/zaszas2345