콘텐츠로 바로 가기

Bit Arithmetic#

이 토픽에서는 VisualApplets 디자인에서 생성된 FPGA 파이프라인에서 Bit Width가 어떻게 작동하는지 설명합니다. 이 토픽을 읽고 나면 링크 Bit Width이 Arithmetic 결과에 미치는 영향, 오버플로 처리 방법, 그리고 cast, clip, shift 연산자를 사용하여 값 범위를 제어하는 방법을 이해할 수 있습니다. 또한 부호 있는 값과 부호 없는 값의 차이, 고정소수점 숫자의 작동 방식, 그리고 더 넓은 데이터 워드에서 비트 필드를 추출하는 방법을 알 수 있습니다.

핵심 용어

Bit width은 링크 상의 픽셀당 또는 값당 비트 수입니다. Bit Width은 값의 범위를 정의합니다. 예를 들어, 8비트 부호 없는 링크는 0에서 255 사이의 값을 전달합니다. Arithmetic 오버플로란 Arithmetic 연산 결과가 가용 비트에 더 이상 맞지 않는 것을 의미합니다. 결과가 순환하거나 상위 비트가 손실됩니다.

링크 Property 및 파라미터 종속성에 대한 자세한 내용은 Parameterization 튜토리얼 토픽을 참조하십시오. 링크의 공식적인 규칙에 대해서는 사용자 설명서의 Rules of Links를 참조하십시오.

각 link 두 모듈(즉, 인스턴스화된 오퍼레이터) 사이의 링크에는 Bit Width 속성이 있습니다. 이 속성은 생성된 FPGA 파이프라인이 해당 연결의 각 픽셀 또는 값에 대해 몇 개의 Bit Width를 사용하는지 정의합니다. 컬러 링크의 경우 Bit Width는 모든 색상 요소를 함께 포함합니다. 링크에서 ImageProtocol = VALT_SIGNAL, Bit Width는 항상 1비트입니다.

링크는 데이터 단어당 최대 64 bits를 지원합니다. 오퍼레이터가 더 넓은 결과를 계산하는 경우, 링크 너비가 이 제한을 초과하기 전에 데이터를 자르거나(clip), 캐스팅하거나(cast), 시프트해야 합니다.

모든 오퍼레이터가 모든 Bit Width를 지원하는 것은 아닙니다. 일부 오퍼레이터는 1~64비트, 8비트, 12비트 또는 16비트와 같은 특정 범위만 허용합니다. Operator Reference의 Supported Link Format 표에는 각 오퍼레이터에 대해 허용되는 값이 문서화되어 있습니다. 또한 디자인 창에서 모듈을 마우스 우클릭하고 Help를 선택하거나 F1을 눌러 오퍼레이터 도움말을 열 수 있습니다. 이는 VisualApplets의 툴 내 도움말로 제공되는 Operator Reference와 동일한 내용입니다.

Bit Width 충돌이 발생하면 먼저 업스트림 오퍼레이터의 출력 링크를 확인하십시오. 편집 가능한 오퍼레이터에서 Bit Width 링크 속성을 조정하거나, CastBitWidth, ClipHigh, ClipLow, ShiftLeft, 또는 ConvertPixelFormat 같은 오퍼레이터를 삽입하여 경로상의 Bit Width를 변경하십시오.

링크 속성은 오퍼레이터가 이를 변경할 때까지 파이프라인을 통해 전파됩니다. 카메라 출력 링크에서 너비를 설정하거나 처리 경로에 Bit Width 오퍼레이터를 삽입하십시오. Propagation of Link Properties 튜토리얼 항목을 참조하십시오.

Arithmetic 연산을 위한 Bit Width#

Arithmetic 라이브러리의 오퍼레이터는 출력 Bit Width 을(를) 자동으로 유추합니다. 지원되는 Link Format 의 Operator 레퍼런스 표는 auto(으)로 이러한 출력을 표시합니다. 일반적으로 링크에서 이러한 출력 Bit Width 링크 속성을 직접 편집할 수는 없습니다. 산술 연산 후 수동으로 Bit Width를 변경하려면 CastBitWidth 및/또는 ClipHigh , ClipLow(와)과 같은 추가 오퍼레이터를 조합하여 사용하십시오. 다음 산술 오퍼레이터도 Bit Width를 변경합니다.

덧셈 및 뺄셈#

The ADD 오퍼레이터는 모든 입력 링크의 픽셀 값을 합산합니다. SUB 오퍼레이터는 첫 번째 입력에서 두 번째 입력의 픽셀 값을 뺍니다.

VisualApplets은 입력 Bit Width로부터 출력 Bit Width를 설정합니다. 결과는 해당 최댓값보다 1비트 더 큽니다. 부호 없는 입력과 부호 있는 입력을 ADD에서 혼용하는 경우, 출력에 1비트가 추가로 필요할 수 있습니다.

Add 오퍼레이터 픽셀 값 더하기

출력 Bit Width는 64비트를 초과할 수 없습니다. ADD 또는 SUB후에 다운스트림 연결에서 전파된 링크 너비를 확인하십시오.

곱셈#

The MULT 오퍼레이터는 두 입력의 픽셀 값을 곱합니다. 하나의 링크에서 허용되는 최대 입력 Bit Width는 32비트입니다. 출력 Bit Width는 두 입력 Bit Width의 합과 같습니다. 8비트 값과 8비트 값을 곱하면 16비트 결과가 생성됩니다:

MULT operator를 사용하여 Bit Width 변경하기

정보

MULT 은(는) 많은 FPGA 리소스를 사용합니다. 상수를 사용한 Scaling의 경우 Basler에서는 다음을 권장합니다. SCALE 또는 ShiftLeft 명령을 사용하십시오.

Division#

The DIV operator는 입력 링크의 값을 I1 입력 링크의 값으로 I2나눕니다. 출력 링크 O 은(는) 정수 몫을 전달합니다. 출력 링크 R 은(는) 나머지를 전달합니다. 0으로 나누기는 두 출력 모두에서 정의되지 않습니다.

입력 링크의 Bit Width I2 은(는) 입력 링크의 Bit Width보다 작거나 같아야 합니다 I1. 부호 없는 입력의 경우, 출력 링크의 출력 Bit Width O 은(는) 입력 링크의 Bit Width와 같습니다 I1. 부호 있는 입력의 경우, 출력 링크의 출력 Bit Width O 은(는) 입력 Bit Width와 같습니다 I1 더하기 1.

부호 없는 입력 링크가 있는 DIV operator의 Bit Widths

DIV 은(는) 정수 나눗셈을 수행합니다. 자체적으로 소수점을 보존하지 않습니다. 고정소수점 나눗셈의 경우, 나누기 전에 다음을 사용하십시오. ShiftLeft operator.

소수점에 대한 자세한 내용은 이 항목의 Fixed-Point Arithmetic 섹션을 참조하십시오.

정보

DIV 은(는) 많은 FPGA 리소스를 사용합니다. 2의 거듭제곱으로 나누려면 다음을 사용하십시오. ShiftRight 명령을 사용하십시오.

Clip 및 Cast 연산자를 사용한 Arithmetic 오버플로 처리#

Arithmetic overflow은(는) 결과가 현재 Bit Width가 표현할 수 있는 범위를 초과할 때 발생합니다. 8비트 부호 없는 링크의 경우 범위는 0에서 255입니다. 200 + 100의 합은 300입니다. 출력 비트가 충분하지 않으면 저장된 값이 잘못됩니다. 오버플로는 잘못된 픽셀 값으로 나타납니다.

Bit Overflow

Arithmetic overflow 은(는) 다음에서 처리하는 오버플로 조건과 혼동해서는 안 됩니다. Overflow 오퍼레이터( Synchronization library: The Overflow operator는 중지할 수 없는 소스의 흐름 제어에 사용됩니다. 자세한 내용은 다음을 참조하십시오. Overflow operator, see 중지 가능 및 중지 불가능 데이터 스트림 튜토리얼 항목.

다음 operator를 사용하여 arithmetic overflow를 해결할 수 있습니다:

ClipHigh 및 ClipLow#

The ClipHigh operator는 값을 설정 가능한 최댓값으로 제한합니다. 최댓값을 초과하는 모든 입력 값은 최댓값으로 대체됩니다. 이 ClipLow operator는 설정 가능한 최솟값에 대해서도 유사하게 작동합니다.

설정하려는 속성을 식별하려면 ClipHigh 및 ClipLow 값을 대상 범위 내로 유지하기 위해 전 Bit Width를 줄입니다. 모듈 파라미터를 사용하여 클립 제한을 구성하십시오. 유효한 범위는 Bit Width 입력 링크 Property 및 입력 링크가 signed 또는 unsigned arithmetic 중 무엇을 사용하는지에 따라 다릅니다.

스크린샷은 다음을 보여줍니다. ClipHigh 255보다 큰 모든 픽셀 값을 255로 설정합니다:

ClipHigh Operator는 모든 픽셀 값이 범위에 맞도록 계산합니다

CastBitWidth#

The CastBitWidth operator가 링크 Bit Width를 변경합니다. 링크 Property를 설정합니다. Bit Width operator의 출력 링크에서.

출력 Bit Width가 입력 Bit Width보다 클 때, operator는 값을 유지하고 최상위 비트 위치에 비트를 추가합니다. signed 값의 경우, CastBitWidth 부호 확장(sign extension)을 수행합니다.

출력 Bit Width가 입력 Bit Width보다 작을 때, CastBitWidth 최상위 비트를 버립니다. 결과적으로 출력 Bit Width 내에서 표현할 수 없는 값이 수정됩니다. 이 작업은 비트를 영구적으로 제거하므로 이후 처리에 필요한 정보가 손실될 수 있습니다.

링크 Bit Width를 줄일 때 Basler는 다음 단계를 순서대로 권장합니다:

  1. 삽입 ClipHigh 및 ClipLow Bit Width 값을 대상 범위로 제한합니다.
  2. 삽입 CastBitWidth Bit Width를 줄입니다.

참조: Parameterization 튜토리얼 주제.

예시: 픽셀 더하기 및 결과 범위 축소#

이 예시는 두 개의 8비트 unsigned 픽셀 스트림을 더하고 다운스트림 처리를 위해 8비트 결과를 반환합니다:

  1. 두 개의 8비트 이미지 경로를 연결합니다. ADD (으)로 줄어듭니다.
  2. 출력 링크를 확인하십시오. ADD 9비트 결과를 생성합니다.
  3. 삽입 ClipHigh 다음 ADD. 최댓값을 255로 설정합니다.
  4. 삽입 CastBitWidth 다음 ClipHigh. 출력 Bit Width 을(를) 8로 설정합니다.
  5. Design Rules Check Level 1을(를) 실행하고 모든 링크가 유효한지 확인합니다.

이(가) 없으면 ClipHigh, CastBitWidth 단순히 9번째 비트만 버리게 되므로 큰 합계에서 잘못된 픽셀 값이 발생합니다.

ClipHigh와 CastBitWidth의 조합으로 잘못된 결과 데이터 방지

부호 있는 값 및 부호 없는 값#

링크 속성 Arithmetic 은(는) 생성된 FPGA 파이프라인이 값을 다음과 같이 처리할지 여부를 정의합니다. Signed 또는 Unsigned에 대한 두 번의 호출 사이에서 변경될 수 있습니다. Signed, 하드웨어는 2의 보수 표현을 사용합니다. 이 속성은 디자인 타임에 VisualApplets에서 설정합니다.

부호 비트는 구성된 Bit Width의 일부입니다.

9비트 값, 부호 정보용으로 1비트 예약됨

The CastType 연산자는 출력 링크의 Arithmetic 링크 속성을 변경합니다. 비트 패턴은 그대로 유지됩니다. 생성된 FPGA 로직은 저장된 비트 패턴을 변경하지 않으므로, 연산자는 FPGA 리소스를 사용하지 않습니다.

Arithmetic 설정에 따라 동일한 비트 패턴이 서로 다른 십진수 값을 나타낼 수 있습니다. 값 1010 은(는) 4비트 부호 없는 링크에서 10과 같습니다. 4비트 부호 있는 링크에서 동일한 패턴은 -6과 같습니다.

다음 명령을 사용하여 CastType 하위 연산자에 다른 Arithmetic 유형이 필요하고 값 범위가 여전히 일치할 때 연산자입니다.

CastType이 Arithmetic 값을 Signed에서 Unsigned로 변경합니다.

값이 비트 범위에 맞는지 확인#

VisualApplets에서 파라미터 값(예: CONST 연산자의 모듈 파라미터)은 십진수로 입력되고 표시됩니다. 그러나 연산자에 연결된 링크는 특정 비트 범위 내의 값만 저장할 수 있습니다. 따라서 파라미터 값이 연결된 링크의 Bit Width에 맞는지 확인하십시오.

Unsigned 링크

n비트 Unsigned 링크는 양수와 0만 나타낼 수 있습니다. 유효한 범위는 다음과 같습니다.

0 ~ 2^n − 1

예를 들어, 8비트 Unsigned 링크는 0부터 255까지의 값을 저장할 수 있습니다.

8비트 Unsigned의 최댓값

링크에서 다음을 사용: ImageProtocol = VALT_SIGNAL, 구성된 Bit Width에 관계없이 Arithmetic은 항상 Unsigned.

Signed Links

n비트 Signed Link는 양수와 음수를 모두 나타낼 수 있습니다. 유효한 범위는 다음과 같습니다.

−2^(n-1) ~ 2^(n-1) − 1

예를 들어, 8비트 Signed Link는 −128부터 127까지의 값을 저장할 수 있습니다.

Maximum Value for 8 Bit Signed

최상위 비트는 부호 비트로 사용되며 값이 양수인지 음수인지 나타냅니다.

고정소수점 Arithmetic#

VisualApplets는 FPGA에 구현되는 이미지 처리 디자인을 생성하는 데 사용됩니다. PC에서 실행되는 소프트웨어와 달리 FPGA 하드웨어는 일반적으로 부동 소수점 숫자(예: 0.5 또는 1.25)를 처리하지 않습니다. 대신 계산은 일반적으로 정수를 사용하여 수행됩니다.

정수 Arithmetic을 계속 사용하면서 소수 값을 표현하기 위해 VisualApplets는 고정 소수점 표현 방식을 사용합니다. 이를 통해 scaling factor, 이득 또는 서브픽셀 좌표와 같은 값을 하드웨어에서 효율적으로 저장하고 처리할 수 있습니다.

이 섹션의 내용:

  • 고정 소수점 표현이 필요한 이유
  • 정수 비트 패턴에 소수 값이 저장되는 방식
  • Q 형식이 소수점 위치를 정의하는 방식
  • 비트 폭이 사용 가능한 값의 범위와 정밀도에 어떤 영향을 미치는지.
  • 연산자 선택이 계산 정확도에 미치는 영향

링크로 전송되는 모든 값은 비트 시퀀스로 저장됩니다. 하드웨어는 이러한 비트를 정수 값으로 해석합니다.

예를 들어, 아래 비트 패턴은 정수 값 5를 나타냅니다.

00000101 = 5

그러나 이미지 처리 애플리케이션에는 다음과 같은 소수 값이 자주 필요합니다. 0.5, 1.25, 또는 12.75.

FPGA는 부동 소수점 숫자를 저장하지 않으므로 이러한 값은 고정 소수점 형식을 사용하여 표현됩니다. 고정 소수점 표현에서는 비트 패턴이 여전히 정수로 저장되지만 소수점의 위치가 고정됩니다.

저장된 정수 값은 여전히 5이지만 다음과 같이 해석됩니다.

5 / 2^2 = 1.25

두 비트가 소수부에 할당되어 있기 때문입니다.

이는 다음과 같이 생각할 수 있습니다. 가상 소수점 이 소수점은 미리 정의된 위치에 고정되어 있습니다. 이진 Arithmetic에서 이 분할은 비트 가중치 사이의 이진점이 됩니다. 2^0 및 2^-1. 이 튜토리얼에서는 익숙한 용어를 그대로 사용합니다. 가상 소수점. FPGA는 모든 계산을 정수 연산으로 수행하며, 사용자는 선택한 고정소수점 형식에 따라 결과를 해석합니다.

Q 포맷 및 비트 할당#

고정소수점 수는 일부 비트를 정수 부분에, 일부 비트를 소수 부분에 할당하여 소수 값을 표현합니다. 가상 소수점의 위치는 Q 형식을 사용하여 표시됩니다.

A Q 형식은 다음과 같이 표기됩니다:

Qm.n

여기서:

  • m 정수 비트의 개수입니다
  • n 분수 비트의 개수입니다

부호가 있는 값의 경우, 부호 비트는 정수 부분에 포함됩니다.

예:

Q4.4

의미는:

  • 정수 부호에 4비트
  • 소수부에는 4비트가 할당됩니다.
  • 총 8비트

소수 비트의 개수는 표현된 값의 정밀도를 결정합니다.

표현 가능한 최소 단계 크기는 다음과 같습니다:

1 / 2^n

여기서 n 는 소수부 비트의 개수입니다.

예시:

형식 분수 비트 최소 단계 크기
Q6.2 2 0.25
Q4.4 4 0.0625
Q2.6 6 0.015625

분수 자릿수가 많을수록 인접한 값 간의 차이가 더 작아지므로 정밀도가 높아집니다.

총 비트 폭은 고정되어 있습니다. 그 결과, 소수 부분에 사용되는 비트는 더 이상 정수 부분에 사용할 수 없습니다.

따라서:

  • 소수 비트가 많을수록 정밀도는 높아지지만, 사용할 수 있는 정수 범위는 줄어듭니다.
  • 소수 비트의 수가 적을수록 정수 범위는 넓어지지만 정밀도는 낮아집니다.

Q 형식을 선택할 때는 필요한 값의 범위와 필요한 정밀도 사이의 균형을 고려해야 합니다.

고정소수에서 각 비트는 2의 거듭제곱을 나타냅니다.

가상 소수점 왼쪽의 비트는 정수를 나타냅니다:

..., 2^3, 2^2, 2^1, 2^0

오른쪽의 비트는 소수를 나타냅니다:

2^-1, 2^-2, 2^-3, ...

예를 들어 Q4.4 형식의 경우:

Bit position:  7   6   5   4   3    2     1      0
Weight:      2^3  2^2  2^1  2^0  2^-1  2^-2  2^-3  2^-4

위치 2^0 비트는 가상 소수점의 위치를 정의합니다. 이 위치는 하드웨어에 저장되지 않으며, 선택된 Q 형식에 의해 정의되고 전체 설계 과정에서 일관되게 해석되어야 합니다.

예시: Q4.4#

Q4.4 형식에서는 정수부에 4비트, 소수부에 4비트가 사용됩니다.

비트 패턴

0 0 0 0 . 1 0 0 0

포함 1 첫 번째 소수점 자리. 이 위치는 다음 값을 나타냅니다. 2^-1, 이는 다음와 같습니다. 0.5.

따라서 해당 비트 패턴은 다음을 나타냅니다:

0 * 2^0 + 1 * 2^-1 + 0 * 2^-2 + 0 * 2^-3 + 0 * 2^-4 = 0.5

나타내는 값은 다음과 같지만 0.5, FPGA는 해당 정수 값만 저장합니다:

Stored integer value: 8
Represented real value: 0.5

이는 Q4.4가 4개의 소수점 비트를 사용하기 때문에 작동합니다. 저장된 정수 값은 다음과 같이 해석됩니다:

Real value = Stored integer / 2^4
           = 8 / 16
           = 0.5

하자 F 소수점 비트 수입니다.

실수 값을 고정소수점 표현으로 변환하려면:

FixedPoint = round(RealValue * 2^F)

예:

FixedPoint = round(0.5 * 2^4)
           = round(8)
           = 8

결과 비트 패턴:

0000.1000

고정소수점 값을 다시 실수 값으로 변환하려면:

RealValue = FixedPoint / 2^F

예:

RealValue = 8 / 2^4
          = 8 / 16
          = 0.5

연산자 및 설계 규칙#

연산자는 정수 비트 패턴만 처리합니다. 고정소수점 Arithmetic에서 가상 소수점의 위치는 Q 형식에 의해 결정되며 전체 설계 과정에서 추적되어야 합니다.

다음 연산자는 Scaling을 조정하고 의도한 Q 형식을 유지하는 데 일반적으로 사용됩니다:

  • The ShiftLeft 및 ShiftRight 연산자는 입력 비트 패턴을 구성 가능한 비트 수만큼 왼쪽 또는 오른쪽으로 이동시킵니다. 왼쪽 시프트는 값에 2^Shift를 곱하고, 오른쪽 시프트는 2^Shift로 나눕니다. 이러한 연산자는 원하는 Q 형식을 복원하기 위해 Arithmetic 연산 후에 자주 사용됩니다.
  • SCALE 또는 ShiftLeft: 대신 다음 연산자를 사용하세요. MULT 값에 2의 거듭제곱 상수를 곱할 때 사용합니다. 동일한 Scaling 연산을 수행하지만 일반적으로 더 적은 FPGA 리소스가 필요합니다.
  • The MULT 연산자는 두 입력 값을 곱합니다. 출력 Bit Width는 입력 Bit Width의 합과 같습니다. 고정소수점 Arithmetic에서 결과의 소수점 비트 수도 두 피연산자의 소수점 비트 수의 합입니다.

예시#

Q4.4 값에 다른 Q4.4 값을 곱하면 Q8.8 결과가 생성됩니다:

Q4.4 * Q4.4 -> Q8.8

결과적으로 더 높은 정밀도가 제공되지만, 후속 작업이 필요할 수 있습니다. ShiftRight 설계에서 Q4.4 값을 예상하는 경우 연산 또는 비트 폭 축소를 수행합니다.

일부 연산자는 특정 고정 소수점 형식을 가정합니다. 예를 들어 다음과 같은 삼각 연산자 SIN, COS, TAN와 그 역함수는 입력 및 출력에 대해 미리 정의된 소수 부 비트 수를 요구합니다.

이러한 연산자에 링크를 연결하기 전에 Operator Reference의 Arithmetics Library에서 필요한 형식을 확인하십시오.

설계 지침

각 단계에서 Q 형식을 문서화하십시오. 곱셈 또는 나눗셈 후에는 다음을 사용하십시오. ShiftRight 또는 필요한 경우 비트 폭 조정을 사용하여 의도한 형식을 복원합니다.

시뮬레이션에서 고정소수점 값 표시#

Applet을 빌드하기 전에 VisualApplets의 시뮬레이션 기능을 사용하여 고정 소수점 값이 의도대로 해석, Scaling 및 설계 전체에 전파되는지 확인할 수 있습니다. Simulation Probe Viewer에서 링크 값은 정수 상태로 유지되지만, fractional bits를 설정하고, 부호 있는/부호 없는 십진수를 선택하며, 선택적으로 scaling factor를 적용하여 고정 소수점으로 표시할 수 있습니다. 이는 표시에만 영향을 미치며 하드웨어에는 영향을 미치지 않습니다. VisualApplets에서 시뮬레이션을 통해 고정 소수점 값을 확인하려면:

  1. 처리 파이프라인의 시작 부분에 Simulation Source를 추가합니다.
  2. 연산자의 출력 링크에 Simulation Probe를 추가합니다.
  3. Analysis → Start Simulation을 통해 시뮬레이션을 시작합니다.
  4. 2단계에서 추가한 프로브의 Simulation Probe Viewer를 엽니다.
  5. Simulation Probe Viewer에서 부호 있는 또는 부호 없는 십진수 표시를 선택합니다.
  6. Q-format에 맞게 fractional bits 수를 설정합니다.
  7. 선택적으로 단위 변환(예: 라디안을 도로 변환)을 위한 Scaling factor를 설정합니다.

그 결과 Simulation Probes가 소수 부 비트를 어떻게 고려하는지 확인할 수 있습니다.

Simulation Probe: 소수 부 비트를 고려하여 결과 표시.

VisualApplets의 시뮬레이션에 대한 자세한 내용은 User Manual의 Simulation을 참조하십시오.

SelectBitField를 사용한 비트 필드 추출#

The SelectBitField 연산자는 입력 값에서 연속된 비트 범위를 추출하여 출력에 복사합니다. 더 넓은 데이터 워드에서 특정 부분만 필요한 경우 이 연산자를 사용하십시오.

다음과 같이 연산자를 구성합니다.

  • 출력을 설정합니다 Bit Width 출력 링크에 있습니다. 이는 추출되는 비트 수를 결정합니다.
  • 파라미터를 원하는 BitOffset 매개변수입니다. 이는 출력에 복사할 선택된 필드의 최하위 비트(LSB) 위치를 지정합니다. 선택된 비트는 출력 값의 비트 0(최하위 비트)이 됩니다.

그레이 이미지의 경우, BitOffset 범위 내에 있어야 합니다:

0 ... Input Bit Width - Output Bit Width

입력이 부호 있는 Arithmetic을 사용하는 경우, 추출된 비트는 항상 부호 없는 값으로 출력됩니다.

SelectBitField: 입력 및 출력 링크 Bit Width와 BitOffset Module Property의 종속성

다운스트림 소프트웨어를 위한 Bit Width 확장#

많은 카메라는 픽셀당 10비트 또는 12비트와 같은 Bit Width의 픽셀 데이터를 생성합니다. 그러나 이미지 처리 소프트웨어와 이미지 파일 형식은 흔히 8비트, 16비트, 32비트와 같은 표준 데이터 폭으로 작동합니다.

따라서 호스트 PC로 전송하기 전에 카메라 데이터를 16비트 픽셀로 변환하는 것이 일반적입니다. 이를 수행하는 방법은 다음과 같습니다.

ConvertPixelFormat 사용#

Bit Width를 넓히려면 다음 연산자를 삽입할 수 있습니다. ConvertPixelFormat 이미지 소스 또는 버퍼와 DmaToPC.

연산자를 삽입한 후, ConvertPixelFormat 출력 링크 속성을 열고 다음을 설정합니다. Bit Width 에서 16.

예를 들어 9비트 픽셀 데이터를 16비트로 변환할 때, 연산자는 각 픽셀 값을 왼쪽으로 7비트 시프트하고 새로 생성된 최하위 비트 위치에 0을 삽입합니다. 이는 데이터를 16비트 형식에 맞추면서 상대적인 밝기 범위를 유지합니다.

ConvertPixelFormat 연산자로 Bit Width 넓히기

ShiftLeft 사용#

대안으로 다음 연산자를 삽입할 수도 있습니다. ShiftLeft 연산자를 삽입하고 파라미터를 Shift 7로 설정합니다.

왼쪽으로 7비트 시프트하면 9비트 값을 16비트 값으로 변환할 때와 동일한 Scaling 효과가 발생합니다.

9-bit value << 7

그러면 출력 링크가 16비트 픽셀 값을 전달합니다.

ShiftLeft 연산자로 Bit Width 넓히기

CastBitWidth 사용#

수치 값을 변경하지 않고 Bit Width를 늘리려면 다음 연산자를 삽입하십시오. CastBitWidth 다운스트림 소프트웨어에 더 넓은 Bit Width가 필요하지만 픽셀 값의 Scaling을 원하지 않는 경우 이 옵션을 선택하십시오.

연산자로 Bit Width를 변경하려면 CastBitWidth 연산자의 출력 링크에서 Bit Width를 변경하십시오. CastBitWidth 연산자:

CastBitWidth 연산자로 Bit Width 넓히기

달리 ConvertPixelFormat 또는 ShiftLeft, CastBitWidth 픽셀 데이터를 시프트하지 않습니다. 대신 원래 값을 유지하면서 상위 비트를 추가합니다.

DRC를 사용한 디자인 검증#

Bit Width를 변경하거나 Arithmetic 연산자를 삽입한 후 Analysis → Design Rules Check Level 1을 실행하세요. Level 1은 DRC log에서 Bit Width 불일치 및 파라미터 충돌을 보고합니다. 영향을 받는 모듈과 링크는 디자인 창에서 강조 표시됩니다.

실행 Design Rules Check Level 2 빌드하기 전에 실행하세요. Level 2는 FPGA 리소스 사용량을 추정합니다. 넓은 중간 결과와 다음과 같은 MULT 및 DIV 연산자는 리소스 소비를 증가시킵니다.

하이라이트된 모듈 및 링크와 함께 DRC 로그를 읽습니다. 전체 워크플로는 From Empty Design to Running Applet 튜토리얼 주제를 참조하십시오.

핵심 용어

Basler에서는 Bit Width 작업 시 다음 권장 사항을 따를 것을 권장합니다.

  • 전파된 Bit Width 모든 Arithmetic 연산자 이후의 다운스트림 링크를 확인합니다.
  • 더 좁은 너비로 캐스트하기 전에 값을 자릅니다(Clip).
  • DMA 전의 픽셀당 16비트 등 호스트 소프트웨어의 Bit Width 변경을 미리 계획하십시오.
  • 설정하려는 속성을 식별하려면 ShiftLeft 및 ShiftRight 가능한 경우 MULT 및 DIV 대신
  • 매개변수 값이 적용되지 않는 경우 Operator Reference를 참조하십시오.