Getting Started 가이드의 디자인을 다시 한번 살펴보겠습니다. 아직 Getting Started 디자인을 진행하지 않았다면, 이전 단계로 돌아가 Getting Started를 먼저 완료해 주시기 바랍니다(Getting Started). 지금까지 우리가 수행한 유일한 수정 사항은 파라미터 이름 변경이었습니다. 이제 다음과 같은 Property을 가진 카메라의 이미지를 처리하도록 앱릿을 수정해 보겠습니다.
- 이미지 측면 크기 512 x 512
- 12 bit / pixel 그레이스케일
- 듀얼 탭 베이스 구성 모드의 Camera Link 인터페이스
우리 디자인에는 이미 CameraGrayAreaBase 연산자가 포함되어 있습니다. 이 연산자는 mE4VD4-CL 연산자 라이브러리에 속하며 mE4 Camera Link 프레임 그래버에서만 사용할 수 있습니다. 즉, mE4VD4-CL 라이브러리는 하드웨어 전용 연산자를 포함하는 라이브러리입니다. CameraGrayAreaBase 연산자는 베이스 구성 모드에서 Camera Link를 사용하는 그레이스케일 영역 스캔 카메라를 지원합니다. 디자인 내의 카메라 모듈을 더블 클릭하여 해당 Property를 엽니다. 파라미터 중 하나는 "Format"이라고 합니다. 여기서 특정 Camera Link 포맷을 선택할 수 있습니다. DualTap12Bit를 선택하고, 변경 사항을 적용한 후 창을 닫습니다. 이제 우리 디자인은 12 bit 카메라 이미지를 취득할 수 있게 됩니다.
"Format" 파라미터는 동적이라는 점에 유의하십시오. 즉, 하드웨어에서 디자인을 합성한 후에도 값을 변경할 수 있으므로 여러 카메라 포맷을 유연하게 사용할 수 있습니다. 그러나 카메라의 링크를 더블 클릭해 보면 링크의 Bit Width가 여전히 8 bit/pixel로 되어 있는 것을 볼 수 있습니다. 게다가 최대 이미지 크기가 충분히 크지 않습니다. 링크가 8 bit만 지원하는데 어떻게 12 bit 카메라를 사용할 수 있는지 궁금할 수 있습니다. 그 이유는 카메라 이미지의 상위 8개 유효 비트만 전송되기 때문이며, 즉 사용 가능한 링크 비트만 사용됩니다. 연산자는 카메라 연산자의 설정에 따라 이미지에서 올바른 비트를 자동으로 선택합니다. 자세한 내용은 카메라 연산자 문서를 확인하십시오('CameraGrayAreaBase'). 전체 카메라 비트 깊이를 처리하기 위해 Bit Width를 12 bit로 변경하겠습니다.
값을 변경한 후 Apply를 클릭합니다. 보시다시피 카메라, 버퍼 및 DMA 사이의 링크 색상이 검은색에서 녹색으로 변경되었습니다. 이는 변경 사항이 수락되고 유효성 검사가 완료되었음을 나타냅니다. 또한 링크 속성인 "bit width"가 이미지 버퍼를 통해 버퍼와 DMA 모듈 사이의 링크로 전파되었습니다. 따라서 사용자가 모든 링크에서 bitwidth를 변경할 필요가 없습니다. 링크 속성은 모듈을 통해 전파되며, 모듈이 링크 bitwidth를 자체적으로 변경하거나 사용자 입력을 요구할 때까지 전달됩니다. 버퍼와 DMA 사이의 링크 속성을 열어보면 여기서는 bitwidth를 변경할 수 없음을 알 수 있습니다.
이전 연산자인 ImageBuffer가 링크 bit width를 변경할 수 없기 때문입니다. 따라서 연결된 연산자가 변경을 허용하는 경우, 즉 정의상 bit width에 영향을 미치는 연산인 경우에만 링크 속성을 변경할 수 있습니다.
카메라에 필요한 이미지 측면 크기는 512 x 512 픽셀입니다. 링크 속성에서 Max. Img Width 및 Max. Image Height라는 속성을 확인할 수 있습니다. 이러한 속성은 링크의 최대 이미지 크기를 나타냅니다. 이것이 최댓값입니다. 이보다 작은 크기는 모두 허용됩니다. 그러나 이 제한을 초과하는 이미지 크기는 VisualApplets 디자인 규칙을 위반하며 하드웨어에서 앱렛을 사용할 때 오류가 발생할 수 있습니다.
이미지 크기 설정은 항상 필요한 최솟값으로 선택해야 하는데, 이미지 크기가 작을수록 FPGA 로직 및 메모리 리소스를 절약할 수 있기 때문입니다. 예제로 돌아가서: 카메라와 버퍼 사이의 링크 속성을 열고 최대 이미지 너비와 높이를 512 x 512로 선택합니다. 완료되면 Apply를 클릭합니다.
다시 말하지만, 이 변경이 현재 링크와 버퍼 모듈 뒤에 있는 링크의 링크 속성에 직접적인 영향을 미쳤음을 알 수 있습니다. 또한 버퍼 모듈이 이제 빨간색으로 표시되는 것을 볼 수 있습니다. 이는 소위 "잘못된 조건(illegal condition)"을 생성했기 때문입니다. 즉, 하나 이상의 링크 속성이 모듈의 파라미터 설정과 호환되지 않습니다. 우리 경우 ImageBuffer의 파라미터 설정을 링크 설정과 함께 사용할 수 없습니다. 모든 Property 창을 닫고 디자인 규칙 검사(design rules check)를 수행하면 Ctrl+F7 다음 그림과 같은 오류 메시지가 표시됩니다.
오류 메시지 중 하나를 클릭하여 오류가 발생한 모듈을 강조 표시할 수 있습니다. 이는 여러 계층 구조로 된 대규모 디자인이 있어 연산자의 위치를 즉시 파악할 수 없을 때 매우 유용합니다. 이제 Buffer 모듈의 Property 대화 상자를 엽니다. 오류를 유발하는 네 개의 파라미터가 빨간색으로 물들어 있는 것을 다시 확인할 수 있습니다.
또한 이제 오류의 원인이 명확해졌습니다. 오퍼레이터 내에서 링크의 허용 최대 이미지 크기보다 큰 ROI가 설정되었습니다. 이는 오퍼레이터의 파라미터 범위를 위반하고 VisualApplets 디자인 규칙에 저촉되어 오류를 발생시킵니다. XLength 및 YLength 파라미터 값을 512로 변경하여 디자인을 즉시 유효한 상태로 만들 수 있습니다.
디자인 작업이 거의 완료되었습니다. 이제 빌드를 시작하고 하드웨어에서 디자인을 사용할 수 있습니다. 그러나 고려해야 할 단계가 하나 더 남아 있습니다. 지금까지는 12 bit 픽셀 값을 DMA 모듈에 직접 연결했습니다. 이로 인해 각 픽셀마다 12 bit가 PC로 전송됩니다. 이 형식은 픽셀이 여러 바이트에 분산되어 있어 소프트웨어 프로그램에서 처리하기 매우 어렵습니다. 따라서 각 픽셀은 정확히 하나 이상의 바이트를 차지해야 합니다. 예제에서는 픽셀을 16 bit로 확장합니다. 이를 위해 버퍼와 DMA 모듈 사이에 다른 오퍼레이터를 배치해야 합니다. 이 작업을 해결하기 위한 여러 오퍼레이터가 존재합니다. 베이스 오퍼레이터 라이브러리의 ConvertPixelFormat 오퍼레이터를 사용하겠습니다. 버퍼와 DMA 모듈 사이에 오퍼레이터를 배치하십시오. 링크 위에 직접 오퍼레이터를 배치하면 자동으로 삽입됩니다. 다음으로 모듈 이름을 "To16Bit"로 변경하고 오퍼레이터 뒤의 링크 속성을 엽니다. 볼 수 있듯이 모듈 출력에 대한 기본 링크 비트 너비는 픽셀당 8 bit로 선택되어 있습니다. 따라서 모듈이 입력 링크 비트 너비를 덮어썼습니다. 입력 링크 비트 너비의 변경 사항은 무시됩니다. 모듈은 항상 파라미터화된 값을 출력합니다. 기본 픽셀당 8 bit는 비트 너비를 12에서 8로 줄이지만, 대신 우리는 비트 너비를 늘리고자 합니다. 따라서 링크 Property 값을 16 bit로 변경하고 변경 사항을 적용하기만 하면 됩니다.
이제 ConvertPixelFormat 오퍼레이터가 하위 위치에 4개의 상속된 0-비트를 삽입하여 12 bit 입력 픽셀을 16 bit로 확장합니다. 즉, 4비트 왼쪽 시프트를 수행한 것입니다. ConvertPixelFormat 오퍼레이터 대신 ShiftLeft 오퍼레이터를 대신 사용할 수도 있습니다. 마우스로 ConvertPixelFormat 오퍼레이터를 선택하고 팝업 메뉴나 메인 메뉴 바에서 삭제를 누르거나, 간단히 Del 을 누르십시오. Arith 오퍼레이터 라이브러리에서 ShiftLeft 오퍼레이터를 삽입하십시오. 디자인에 삽입하고 링크 속성을 확인하십시오. 볼 수 있듯이 링크 비트 너비는 여전히 12 bit이며 링크 속성에서 변경할 수 없습니다. 이 오퍼레이터의 경우 링크 비트 너비가 파라미터에 의해 변경됩니다. 즉, Shift 파라미터입니다. 파라미터 값을 4로 변경하고 변경 사항을 적용한 다음 링크 속성으로 돌아갑니다. 볼 수 있듯이 이제 링크 비트 너비가 16 bit로 변경되었습니다. 요약하자면: 일부 링크 속성은 링크에서 변경할 수 있는 반면, 일부는 오퍼레이터 속성을 사용하여 변경됩니다. 해당 예제에서는 두 방법 모두 오퍼레이터에 필요합니다. 하나는 입력 비트 너비와 무관하게 출력 비트 너비를 지정하는 데 사용되고 (즉, 시프트 값이 자동으로 결정됨), 시프트 오퍼레이터는 시프트 값을 지정하는 데 사용되기 때문입니다. 여기서 출력 비트 너비는 파라미터화된 값과 입력 비트 너비에 의해 자동으로 결정됩니다.
예제에서는 하위 비트 위치에 4비트를 삽입했습니다. 16 bit를 얻기 위해 상위 비트 위치에 4비트를 추가하려면 대신 CastBitWidth 오퍼레이터를 사용할 수 있습니다.
비트 조작 오퍼레이터에 대한 설명과 예제는 오퍼레이터 참조에서 확인할 수 있습니다. 'ConvertPixelFormat', 'ShiftLeft', 'ShiftRight' 및 'CastBitWidth'를 참조하십시오.
파라미터 설정 및 비트 처리에 대한 실용적인 지침은 Parameterization 튜토리얼 항목과 Bit Arithmetic 튜토리얼 항목을 참조하십시오.
We now have finalized the extension of our basic acquisition design. Next, you can build and use your design in hardware. You have learned on how to set parameters and how to solve conflicts. In the next section, a list of the basic acquisition applets for all kind of cameras is given.









이전

