Operator Library: Base
PseudoRandomNumberGen 오퍼레이터는 선형 피드백 시프트 레지스터(LFSR)를 사용하여 N비트 난수 스트림을 생성합니다. 이러한 LFSR은 균일하게 분포된 이진 난수 시퀀스를 생성합니다. 시퀀스가 반복되기 전까지의 길이는 피드백 시프트 레지스터의 레지스터 수에 의해 정의됩니다. 32비트 길이의 LFSR은 2^32 - 2개의 값으로 구성된 시퀀스를 생성합니다. 구현된 난수 생성기는 서로 다른 LFSR을 사용하여 오퍼레이터 출력에서 N비트 난수를 생성합니다. 이를 통해 시퀀스 길이가 증가하고 비트 간의 상관관계가 방지됩니다. 다음 그림은 유사 난수 생성기의 구현을 보여줍니다.

난수 Quality을 더욱 향상시키기 위해, LFSR은 픽셀 주파수에 의해 클록 소스가 공급되지 않고 프리런(free running) 방식으로 작동합니다. 따라서 결과의 타이밍은 비결정론적이므로, 값 생성 과정에 실제 난수가 도입되어 Quality이 극적으로 향상됩니다.
LFSR은 애플릿 초기화 시 시드(seed)로 미리 초기화됩니다. 이 시드는 VisualApplets에서 Seed0, Seed1, Seed2 파라미터를 사용하여 정의됩니다. 오퍼레이터 인스턴스화 시 기본 시드 값에는 소프트웨어 난수 생성기가 사용됩니다.
이 오퍼레이터는 다양한 Bit Width 및 Parallelism을 지원합니다. 그러나 높은 Parallelism 및 Bit Width에서는 더 많은 리소스가 필요합니다. 출력 Bit Width은 출력 링크를 사용하여 조정할 수 있습니다.
오퍼레이터 입력 링크는 동기화 용도로만 사용됩니다. 입력 링크의 데이터 값은 데이터 출력 생성에 사용되지 않습니다.
Min_LFSR_Length 파라미터는 가장 짧은 LFSR의 길이를 지정하는 데 사용됩니다. 그 외의 각 LFSR마다 레지스터 스테이지가 하나씩 추가됩니다. 최대 레지스터 길이는 168입니다.
오퍼레이터에 필요한 리소스를 줄이려면 Min_LFSR_Length 파라미터를 줄이십시오. 동일한 Min_LFSR_Length을 가진 오퍼레이터를 둘 이상 사용하는 경우 두 오퍼레이터 모두 동일한 시퀀스를 생성합니다. 시드가 다르더라도 시퀀스는 동일하며, 시퀀스의 시작점만 변경됩니다.
유사 난수 생성기는 결코 실제 난수 값을 생성할 수 없습니다. 효율적인 생성기 구현과 비결정론적 타이밍의 추가 덕분에 생성된 값의 Quality은 매우 높습니다. 구현의 Quality을 증명하기 위해, 다음에서는 생성기에 적용된 두 가지 테스트 결과를 제시합니다.
-
균등 분포 테스트(Test on Equidistribution):
8비트 난수 시퀀스가 생성되고 평균값이 결정됩니다. 평균값은 127.5 부근이어야 합니다. LFSR 이론에 따르면 시퀀스는 항상 균등 분포를 가집니다(모든 레지스터의 값이 0인 경우는 제외).
생성된 값의 히스토그램을 보면(예: microDisplay에서) 균일 분포를 확인할 수 있습니다.

-
스펙트럼 테스트(Spectral Test):
스펙트럼 테스트는 생성기의 직렬 상관관계를 테스트합니다. 생성된 시퀀스에서 어떠한 패턴도 보이지 않아야 합니다. 품질이 나쁜 생성기는 2차원 또는 3차원 공간에서 초평면(hyperplane)을 나타냅니다. VisualApplets 생성기에는 어떠한 초평면도 나타나지 않습니다:


품질이 나쁜 생성기의 예가 다음 그림에 나와 있습니다. 이는 C 프로그래밍 언어의 rand() 함수에 주로 사용되는 유명한 RANDU 생성기입니다.

이 오퍼레이터는 VisualApplets에서 완벽하게 시뮬레이션할 수 있습니다. 그러나 비결정론적인 하드웨어 구현은 시뮬레이션을 위한 소프트웨어로 구현할 수 없습니다. 따라서 시뮬레이션에서는 Quality이 낮은 매우 단순한 난수 생성기가 사용됩니다(MS VisualStudio의 rand() 함수). 시드가 변경되지 않으면 오퍼레이터는 항상 동일한 시퀀스를 생성합니다.
| Min_LFSR_Length | |
|---|---|
| Type | static parameter |
| Default | random |
| Range | [3, 168] |
|
이 파라미터는 가장 짧은 LFSR의 길이를 지정합니다. 값이 높을수록 리소스 소비가 증가합니다. 다음 제약 사항에 유의하십시오.
|
|
| Seed0 | |
|---|---|
| Type | static/dynamic 읽기/쓰기 파라미터 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
오퍼레이터 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 오퍼레이터 인스턴스화 시 이러한 값은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값은 취득(acquisition) 중에 변경할 수 있습니다. Seed2 파라미터가 수정되면 세 파라미터의 값이 모두 래치됩니다. |
|
| Seed1 | |
|---|---|
| Type | static/dynamic 읽기/쓰기 파라미터 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
오퍼레이터 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 오퍼레이터 인스턴스화 시 이러한 값은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값은 취득(acquisition) 중에 변경할 수 있습니다. Seed2 파라미터가 수정되면 세 파라미터의 값이 모두 래치됩니다. |
|
| Seed2 | |
|---|---|
| Type | static/dynamic 읽기/쓰기 파라미터 |
| Default | random |
| Range | [0, 2^64 - 1] |
|
오퍼레이터 소개에서 설명한 바와 같이, 시드는 LFSR을 미리 초기화하는 데 사용됩니다. 오퍼레이터 인스턴스화 시 이러한 값은 소프트웨어로 생성된 난수를 사용하여 초기화됩니다. 이 값은 취득(acquisition) 중에 변경할 수 있습니다. Seed2 파라미터가 수정되면 세 파라미터의 값이 모두 래치됩니다. |
|
PseudoRandomNumberGen 오퍼레이터의 사용법은 다음 예시에 나와 있습니다.




이전

