KR102068384B1 - 모듈식 및 스케일러블 순환 중복 검사 계산 회로 - Google Patents

모듈식 및 스케일러블 순환 중복 검사 계산 회로 Download PDF

Info

Publication number
KR102068384B1
KR102068384B1 KR1020157028911A KR20157028911A KR102068384B1 KR 102068384 B1 KR102068384 B1 KR 102068384B1 KR 1020157028911 A KR1020157028911 A KR 1020157028911A KR 20157028911 A KR20157028911 A KR 20157028911A KR 102068384 B1 KR102068384 B1 KR 102068384B1
Authority
KR
South Korea
Prior art keywords
cyclic redundancy
redundancy check
crc
packet
unit
Prior art date
Application number
KR1020157028911A
Other languages
English (en)
Other versions
KR20150130494A (ko
Inventor
웨이롱 지앙
고든 제이. 브레브너
마크 비. 카슨
Original Assignee
자일링크스 인코포레이티드
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 자일링크스 인코포레이티드 filed Critical 자일링크스 인코포레이티드
Publication of KR20150130494A publication Critical patent/KR20150130494A/ko
Application granted granted Critical
Publication of KR102068384B1 publication Critical patent/KR102068384B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • HELECTRICITY
    • H03ELECTRONIC CIRCUITRY
    • H03MCODING; DECODING; CODE CONVERSION IN GENERAL
    • H03M13/00Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
    • H03M13/03Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
    • H03M13/05Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
    • H03M13/09Error detection only, e.g. using cyclic redundancy check [CRC] codes or single parity bit
    • H03M13/091Parallel or block-wise CRC computation

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Theoretical Computer Science (AREA)
  • Computing Systems (AREA)
  • Error Detection And Correction (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)
  • Data Exchanges In Wide-Area Networks (AREA)

Abstract

일 실시예에서, 순환 중복 검사를 수행하기 위한 디바이스들 및 방법들이 개시된다. 예를 들어, 디바이스(100)는 데이터 워드를 복수의 경로들로 분할하기 위한 분할기(105)를 갖는다. 디바이스는 또한 복수의 순환 중복 검사 유닛들(110A-110N)을 갖는다. 이 유닛들 각각은 경로들의 각각의 경로를 프로세싱하기 위한 것이다. 또한, 이 유닛들(110A-110N) 각각은 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 1 출력 포트(113A-113N); 및 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 2 출력 포트(112A-112N)를 포함한다.

Description

모듈식 및 스케일러블 순환 중복 검사 계산 회로{MODULAR AND SCALABLE CYCLIC REDUNDANCY CHECK COMPUTATION CIRCUIT}
본 발명은 일반적으로 디바이스들, 예를 들어, 필드 프로그래밍 가능 게이트 어레이들과 같은 집적 회로 및 높은 데이터 레이트들로 패킷들에 대한 순환 중복 검사 계산들을 수행하기 위한 방법들에 관한 것이다.
순환 중복 코드들(CRC들)은 데이터 무결성(data integrity)을 보장하기 위해 원격통신 및 네트워킹에서 널리 이용된다. 예를 들어, 각각의 모든(every) 이더넷 패킷이 첨부된 CRC-32 코드(32-비트 CRC 코드)와 함께 전송된다. 순환 중복 검사들을 수행하기 위한 회로들은 시프트 레지스터를 이용하여 직렬로 구현된다. 그러나 이러한 접근법은 현재 데이터 레이트들을 따라가기에 불충분하다. 또한, 100Gb/s까지의 데이터 레이트들에 대한 몇 개의 CRC 회로 설계들이 있지만, 이들은 일반적으로 기껏해야 512 비트들의 입력 폭을 갖는 비교적 좁은 데이터 버스를 이용하는 것을 포함한다.
일 실시예에서, 순환 중복 검사를 수행하기 위한 디바이스가 개시된다. 이 디바이스는 데이터 워드를 복수의 경로들로 분할하기 위한 분할기를 포함한다. 이 디바이스는 또한 복수의 순환 중복 검사 유닛들을 포함한다. 이 유닛들 각각은 경로들의 각각의 경로를 프로세싱하기 위한 것이다. 또한, 이 유닛들 각각은 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 1 출력 포트; 및 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 2 출력 포트를 포함한다.
다양한 실시예들에서, 복수의 순환 중복 검사 유닛들에 의해 프로세싱되는 패킷들의 크기는 적어도 경로들 각각의 경로 크기이고, 이 디바이스는 추가로, 복수의 순환 중복 검사 유닛들 중 제 1 순환 중복 검사 유닛 내에서 시작하거나 진행되는 패킷에 대한 제 1 순환 중복 검사 값을 복수의 순환 중복 검사 유닛들 중 제 2 순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 제 2 순환 중복 검사 값과 결합하기 위한 적어도 하나의 결합기를 더 포함하고; 적어도 하나의 결합기는 제 1 순환 중복 검사 값과 제 2 순환 중복 검사 값 상에서 배타적-or 연산을 수행하기 위한 것이고; 복수의 순환 중복 검사 유닛들 중 제 1 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷 및 복수의 순환 중복 검사 유닛들 중 제 2 순환 중복 검사 유닛 내에서 종료하는 패킷은 동일한 패킷이고; 디바이스는 추가로 복수의 순환 중복 검사 유닛들 중 적어도 2개에 의해 프로세싱되는 적어도 하나의 패킷이 복수의 순환 중복 검사 유닛들 중 적어도 2개 사이에서 연속적인지를 검사하기 위한 적어도 하나의 검사 회로를 더 포함하고; 검사 회로는, 패킷의 시작(start-of-packet) 신호가 2개의 유닛들 중 제 1 유닛과 연관된 제 1 경로에서 발견되는 경우 그리고 패킷이 제 1 경로에서 진행중인 경우, 그리고 패킷의 끝(end-of-packet)신호가 2개의 유닛들 중 제 2 유닛과 연관된 제 2 경로에서 발견될 때 패킷이 2개의 유닛들 사이에서 인접하다고 결정하고; 순환 중복 검사 유닛들 각각은, 경로들 중 하나를 복수의 레인들로 분할하기 위한 분할기; 및 레인들의 각각의 레인의 비트들의 부분적 순환 중복 검사 값을 계산하기 위한 복수의 순환 중복 검사 모듈들을 더 포함하고; M개의 순환 중복 검사 유닛들 각각은, 순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값으로서의 출력을 위해 순환 중복 검사 값을 선택하기 위한 선택 모듈을 더 포함하고; 선택 유닛은 레인들 중 하나의 패킷의 끝 신호에 기초하여 그리고 레인들 중 어느 것에도 패킷의 끝 신호가 없는 경우 디폴트 조건에 기초하여 순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값으로서 출력하기 위한 중간 순환 중복 검사 값을 선택하기 위한 것이고; 순환 중복 검사 유닛들 각각은, 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값으로서의 출력을 위해 순환 중복 검사 값을 선택하기 위한 선택 모듈을 더 포함하고; 선택 모듈은 레인들 중 하나의 레인 내의 패킷의 시작 신호에 기초하여 또는 레인들 중 어느 것에도 패킷의 시작 신호가 없는 경우 디폴트 조건에 기초하여 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값으로서의 출력을 위해 순환 중복 검사 값을 선택하기 위한 것이고; 순환 중복 검사 유닛들 각각은, 제 2 순환 중복 검사 모듈과 연관된 레인들의 각각의 레인에 대한 순환 중복 검사 값을 출력하도록 적어도 제 1 순환 중복 검사 모듈로부터의 부분적인 순환 중복 검사 값 및 적어도 제 2 순환 중복 검사 모듈로부터의 부분적인 순환 중복 검사 값을 결합하기 위한 적어도 하나의 결합기를 더 포함하고; 순환 중복 검사 유닛들 각각은 적어도 하나의 포워딩 모듈의 레인과 목적지 레인 간의 비트들의 수에 기초하여 적어도 하나의 부분적인 순환 중복 검사 값을 비트-포워딩(bit-forwarding)하기 위한 적어도 하나의 포워딩 모듈을 더 포함하고; 이 디바이스는 이전의 데이터 워드로부터 누적된 순환 중복 검사 값을 수신하기 위한 입력 포트; 및/또는 다음 데이터 워드에 대한 누적된 순환 중복 검사 값을 출력하기 위한 출력 포트를 더 포함하고; 이 디바이스는 추가로 누적된 순환 중복 검사 값을 순환 중복 검사 유닛들 중 적어도 하나 내에서 종료하는 패킷에 대한 적어도 하나의 순환 중복 검사 값과 결합하기 위한 적어도 하나의 결합기를 더 포함하고; 이 디바이스는 추가로 적어도 하나의 포워딩 유닛의 경로와 목적지 경로 간의 비트들의 수에 기초하여 적어도 하나의 순환 중복 검사 값을 비트-포워딩하기 위한 적어도 하나의 포워딩 유닛을 더 포함하고; 이 디바이스는 추가로 패킷의 끝과 레인의 끝 간의 또는 패킷의 끝과 경로의 끝 간의 엠프티 비트들(empty bits)의 수에 기초하여 적어도 하나의 순환 중복 검사 값을 언롤(unroll)하기 위한 적어도 하나의 언롤 유닛을 더 포함한다.
다른 실시예에서, 순환 중복 검사를 수행하기 위한 다른 디바이스가 개시된다. 예를 들어, 디바이스는 데이터 워드를 프로세싱하기 위한 복수의 순환 중복 검사 유닛을 포함한다. 일 실시예에서, 순환 중복 검사 유닛들 각각은 데이터 워드의 일부를 프로세싱하고 각각의 순환 중복 검사 값을 출력하기 위한 것이다. 디바이스는 또한 복수의 패킷들 각각에 대한 최종 순환 중복 검사 값들로서 출력하기 위해 복수의 각각의 순환 중복 검사 값들을 선택하기 위한 선택 유닛을 포함한다. 데이터 워드는 최소 패킷 크기보다 더 크다.
추가의 실시예에서, 순환 중복 검사를 수행하기 위한 방법이 개시된다. 예를 들어, 이 방법은, 데이터 워드를 복수의 경로들로 분할하는 단계; 및 경로들 각각을 프로세싱하는 단계를 포함한다. 일 실시예에서, 경로들 각각에 대해, 프로세싱하는 단계는 경로 내에서 종료하는 패킷에 대한 순환 중복 검사 값을 계산하는 단계; 및 경로 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 계산하는 단계를 포함한다.
첨부 도면들은 본 개시의 하나 이상의 양상들에 따른 예시적인 실시예들을 도시하지만, 첨부 도면들은 본 개시를 도시된 실시예들로 제한하는 것으로 받아들여선 안 되고, 오히려 설명 및 이해만을 위한 것이다.
도 1은 CRC 회로/디바이스 구현의 블록도를 예시한다.
도 2는 CRC 유닛의 블록도를 예시한다.
도 3은 CRC 유닛의 대안적인 실시예의 블록도를 예시한다.
도 4는 경로 상에서 및/또는 CRC 유닛을 통해 프로세싱되는 비트들에 대한 예시적인 시나리오들에 대한 타이밍도를 예시한다.
도 5는 패킷이 2개의 CRC 유닛들 간에서 인접한지를 검사하기 위한 검사 회로의 블록도를 예시한다.
도 6은 경로 상에서 및/또는 CRC 유닛을 통해 프로세싱되는 비트들에 대한 추가의 예시적인 시나리오들에 대한 타이밍도를 예시한다.
도 7은 순환 중복 검사를 수행하기 위한 방법의 블록도이다.
도 8은 본 명세서에서 설명된 기능들을 수행하는데 이용하기에 적합한 범용 컴퓨터 또는 컴퓨팅 디바이스의 고레벨 블록도를 예시한다.
본 개시는 일반적으로 순환 중복 검사들을 수행하기 위한 디바이스들 및 방법들에 관한 것이다. 예를 들어, 본 개시는 높은 비트 레이트로 그리고 와이드(wide) 데이터 버스 상에서 수신되는 패킷들 상에서 순환 중복 검사 동작들을 수행하도록 집적 회로(integrated circuit; IC), 예를 들어, 프로그래밍 가능 로직 디바이스(programmable logic device; PLD), 전용 IC, 필드 프로그래밍 가능 게이트 어레이(field programmable gate array; FPGA) 등 내에서 구현될 수 있다. 본 개시의 실시예들은 100Gb/s 초과, 예를 들어, 1024 비트들 및 그 이상을 포함하는 입력 폭들을 갖는 와이드 데이터 버스를 이용하여 400Gb/s으로부터 그 초과의 데이터 전송 레이트들(data transmission rates)을 지원할 수 있다. 회로 아키택처는 모듈식이고 확장 가능하여서, 자원-성능 트래이드오프들이 제공되도록 허용한다.
순환 중복 코드들(CRC)은 데이터 무결성을 보장하기 위해 원격통신 및 네트워킹 및 다수의 다른 애플리케이션들에서 널리 이용된다. 예를 들어, 이더넷 패킷들은 프레임 검사 시퀀스(Frame Check Sequence; FCS)로서 또한 지칭되는 첨부된 CRC-32 코드(32-비트 CRC 코드)와 더불어 전송된다. 순환 중복 검사들을 수행하기 위한 회로들은 시프트 레지스터를 이용하여 직렬로 구현된다. 그러나 이러한 접근법은 현재 데이터 레이트들을 따라가기에 불충분하다. 또한, 100Gb/s까지의 데이터 레이트들에 대한 몇 개의 CRC 회로 설계들이 있지만, 이들은 일반적으로 기껏해야 512 비트들의 입력 폭/워드 크기를 갖는 비교적 좁은 데이터 버스를 이용하는 것을 포함한다. 이는, 클록 주파수의 충분한 증가들을 획득하는데 더욱 어려워지게 되기 때문에 미래의 쓰루풋 스케일링(throughput scaling)을 제한한다. 400Gb/s와 같은 더 높은 쓰루풋을 달성하기 위해, 예를 들어, CRC 회로가 클록 사이클 당 1024 비트들을 초과하여 프로세싱할 수 있는 더 넓은 데이터 버스들이 이용될 수 있다. 그러나 네트워크 패킷들/이더넷 프레임들의 최소 크기가 512비트들이기 때문에, 다수의 패킷들은 동시에 이러한 와이드 데이터 버스 상에서 출현할 수 있다. 패킷은 데이터 버스 내의 임의의 포지션에서 시작하고 끝날 수 있다. 따라서, 워드 당 패킷들의 수가 증가할 때, 상이한 패킷 포지션들을 참작하는 것이 보다 복잡하게 된다.
이에 따라, 본 개시의 실시예들은 예를 들어, 512-비트 CRC 유닛들을 기반으로 한, 예를 들어, 512-비트 입력 데이터 폭으로 최적화되는 확장 가능한 CRC 아키택처를 설명한다. 본 실시예는 쓰루풋이 증가함에 따라 자원 이용의 선형 스케일링을 제공하는 반면에, 종래의 접근법은 초-선형 스케일링(super-linear scaling)을 수반한다. 본 개시의 실시예들이 512 비트들의 배수들 및 분수들과 관련하여 설명되지만, 본 개시는 그것으로 제한되지 않는다는 것이 주의되어야 한다. 즉, 예시적인 아키택처는 현재의 최소 이더넷 프레임 크기에 대응하고, 그에 따라 예시적인 목적에 매우 적합한 512-비트 경로 크기/CRC 유닛 크기를 특징으로 한다. 그러나 당업자들은 다른 데이터 버스 폭들, 프레임 크기들, 경로 크기들 및 라인 크기들이 본 개시에 따라 이용될 수 있다는 것을 인지할 것이다. 따라서, 본 개시의 다른 실시예들은 상이한 통신 기술들을 수용하고, 상이한 네트워크 층들에 대해 최적화되고, 상이한 패킷/유닛 크기들, 예를 들어, 프레임들, 패킷들, 세그먼트들, 데이터그램들, 프로토콜 데이터 유닛들(protocol data units; PDU들), 전송 데이터 유닛들(transport data units; TDU들), 세션 데이터 유닛들(session data units; SDU들) 등에 맞춤 제작될 수 있다.
순환 중복 검사는 데이터 전송 애플리케이션들에서 널리 이용되는 패리티 비트 기반 에러 검출 방식이며 다항식 연산에 기초한다. 전송된 데이터의 비트들은 다항식의 계수들이다. 일 예로서, 비트 스트림 1101011011은 10 비트들을 가지며 10-항 다항식을 나타낸다:
Figure 112015098731514-pct00001
메시지의 CRC를 컴퓨팅하기 위해, 생성 다항식(generator polynomial)이라 불리는 다른 다항식(G(x))이 선택된다. G(x)는 0보다 더 큰 차수(degree)를 가지며 X0 항에서 비-제로 계수를 가져야 한다. 이는 생성 다항식에 대한 몇 개의 가능한 옵션들 및 그에 따른 표준화에 대한 필요성을 발생시킨다. CRC-16은 다음과 같은 생성 다항식을 이용하는 하나의 이러한 표준이다.
Figure 112015098731514-pct00002
CRC-16은 모든 단일 및 이중 에러들, 홀수의 비트들을 갖는 모든 에러들, 길이 16 미만의 모든 버스트 에러들 및 더 긴 버스트들에 대한 대부분의 에러들을 검출한다. 다른 표준 CRC는 다음의 생성 다항식을 이용하는 CRC-32이다.
Figure 112015098731514-pct00003
일반적으로, n-비트 CRC는 다항식 M(x)으로서 데이터 스트림을 표현하고, M(x)를 xn(여기서 n은 다항식 G(x)의 차수임)으로 곱하고, 그 결과를 생성 다항식(G(x))으로 나눔으로써 계산된다. 결과적인 나머지는 데이터 스트림에 첨부되고 전송된다. 완성된 전송되는 다항식은 이어서 수신기 단에서 동일한 생성 다항식에 의해 나눠진다. 이러한 나눗셈의 결과가 나머지를 갖지 않는 경우, 전송 에러들은 없다. 수학적으로 이는 다음과 같이 표현될 수 있다.
Figure 112015098731514-pct00004
IEEE 802.3은 목적지 어드레스, 소스 어드레스, 길이/타입 및 프레임의 데이터로서 다항식 M(x)를 정의하며 최초의 32-비트들은 보완된다. 위의 CRC의 계산으로부터의 나머지는 보완되고, 그 결과는 IEEE 802.3 32-비트 프레임 검사 시퀀스(Frame Check Sequence; FCS) 필드이다. FCS는 이더넷 프레임의 끝에 첨부되고 최고 차수 비트가 먼저 전송된다(x31, x30,..., x1, x0).
일 실시예에서, 본 개시는 부분적, 중간 및 최종 CRC들을 생성하기 위해 생성 다항식에 따라 인입하는 데이터의 다양한 부분들 상에서 행렬 연산들을 이용한다. 순환 중복 코드들(CRC)의 몇 개의 유용한 특성들이 본 실시예에서 이용되며, 예를 들면 다음과 같다.
특성 1 :
Figure 112015098731514-pct00005
;
특성 2:
Figure 112015098731514-pct00006
;
여기서 0P는 P-비트 0들이고 {X,0P}= X이며 여기서 P개의 0들이 첨부되고, Hp는 생성 다항식으로부터 유도된 행렬이고,
특성 3:
Figure 112015098731514-pct00007
.
일 예로서, 인입하는 데이터 워드(D)는 1024 비트들을 포함할 수 있다. D에 대한 순환 중복 검사 코드(CRC)를 계산하기 위해, 데이터는 D = [bit 1023...bit 0] = E [D1 | 0512] xor F [0512 | D2]로서 설명될 수 있으며, 여기서 D1 = [bit 1023...bit 512]이고 D2 = [bit 511...bit 0]이다. 따라서 특성 1에 따라 CRC (D) = CRC (E) xor CRC (F)이다. CRC(F)는 특성 3에 따라 D2에 대한 CRC를 단순히 계산함으로써 계산될 수 있다. 즉, CRC(F) 계산은 F의 모든 1024 비트들에 관해서가 아니라, D2의 512비트들에 관해서만 수행될 수 있다. CRC(E)는 다음과 같이 특성 2에 따라 계산될 수 있다. 첫째로 D1에 대한 CRC를 계산한다. 둘째로, CRC(D1)를 생성 함수(Hp)로부터 유도된 행렬로 곱하고, 결과로서 CRC(E)를 갖는다. 일단 CRC(E) 및 CRC(F)가 알려지면, CRC(D)는 CRC (D) = CRC (E) xor CRC (F)로서 컴퓨팅된다.
이들 다양한 특성들 및 변환들의 활용은 다양한 컴포넌트들 및 특징들과 관련하여 아래에서 논의된다. 특히, 본 개시의 실시예들은 병렬 CRC 유닛들 및 병렬 경로들을 이용하는 CRC 회로를 특징으로 한다. 각각의 경로는, 데이터 워드 내에서 종료하는 하나 이상의 패킷들에 대한 최종 CRC 값들을 생성하기 위해 다른 유닛들 중 하나 이상으로부터의 CRC 출력(들)과 추후에 결합되는 2개의 CRC 출력들을 생성하도록 인입하는 데이터 워드의 부분을 각각 프로세싱하는 CRC 유닛을 포함한다.
도 1은 본 개시의 실시예에 따른 디바이스 또는 CRC 회로(100)의 블록도를 예시한다. 도 1에서 예시된 바와 같이, CRC 회로(100)는 N개의 경로들로 분할되며, 여기서 각각의 경로는 512-비트 폭 계산 블록(대략적으로 n-비트 폭 계산 블록)을 포함하고, 예를 들어, 각각은 512-비트 CRC 유닛(110A, 110B,...,110N)을 각각 갖는다. 다양한 실시예들에서, 각각의 512-비트 CRC 유닛은 4개의 레인들을 포함하고, 각각의 레인은 도 2 및 도 3에서 각각 더 상세히 예시되는 128-비트 CRC 계산 모듈을 갖는다. 4개의 128-비트 레인들은 예시 목적들만을 위해 도시된다는 것이 주의되어야 한다. 따라서, 본 개시는 임의의 수의 레인들 또는 임의의 특정한 레인 크기로 제한되지 않는다. 또한, 일 실시예에서, 상이한 타입의 CRC 유닛 아키택처, 예를 들어, (549-비트까지) 배타적 OR 게이트들에 기초한 보다 많은 모놀리식 블록(monolithic block)이 이용될 수 있다. 따라서, CRC 유닛들(110A-110N) 중 임의의 하나 이상에 대한 이러한 대안적인 아키택처는 그 기본 기능을 변경함 없이 CRC 회로(100)에 통합될 수 있다.
일 실시예에서, CRC 회로(100)는 N개의 512-비트 경로들(A, B 및 N)(단지 3개의 경로들만이 도 1에서 예시됨)을 포함한다. 그러므로, 입력 포트(101) 상의 인입하는 데이터는 1536-비트 폭 데이터 버스를 포함할 수 있다. 분할기(105)는 데이터 버스 상의 신호들을 각각의 512-비트 경로들(A, B 및 N)로 분할한다. 일 실시예에서, 직렬 데이터는 CRC 회로(100)에 진입하기 이전에 병렬 데이터 워드로 변환된다. 따라서, 일 실시예에서, "앞선" 비트들의 회로의 상단에서부터, "뒤의" 비트들이 프로세싱되는 회로의 하단으로 버스 상에 배치될 수 있다.
본 개시의 실시예들에 따라, 데이터 워드의 폭은 N-비트이다. 최소 크기 이더넷 패킷이 64-바이트(즉, 512-비트)이기 때문에, 동일한 워드에서 (N/512)개까지의 패킷 엔딩이 있다. 따라서, 각각의 워드마다 (N/512)개까지의 CRC 출력들이 있다. 이에 따라, 도 1에서, 예를 들어, 3개까지의 512-비트 이더넷 프레임들이 동일한 1536-비트 데이터 워드 내에서 종료할 수 있기 때문에, 잠재적으로 출력 포트들(180A, 180B 및 180N) 상의 3개의 CRC 출력들이 있다. 예를 들어, n-번째 CRC 출력(180N)은 동일한 N-비트 입력 데이터 워드 상에서 n-번째 완성된 패킷에 대한 것이다(n=N/512).
각각의 512-비트 CRC 유닛(110A-110N)은 2개의 순환 중복 코드들: 유닛/경로 내에서 종료하는 패킷에 대해 하나(예를 들어, CRC 출력 포트들(113A-113N) 상의 CRC_A) 및 유닛/경로 내에서 시작하거나 진행(ongoing)중인 패킷에 대해 다른 하나(예를 들어, CRC 출력 포트들(112A-112N) 상의 CRC_B)를 생성한다. 레지스터(160)는 다수의 워드들에 스패닝(spanning)하는 패킷에 대한 누적된 CRC 값(CRC_accum_new(170))을 저장한다.
병렬 CRC 계산에서, 0들이 부분적인 CRC들을 컴퓨팅하기 위해 데이터에 첨부될 수 있다. 이들 첨부된 0들은 "엠프티 비트들(empty bits)"로 불린다. 따라서, 다양한 실시예들은 또한 128-비트 경계들(예를 들어, 도 2에서 도시된 바와 같은 CRC 회로들을 이용함)로 또는 512-비트 경계들(예를 들어, 도 3에서 도시된 바와 같은 CRC 회로들을 이용함)로 패킷의 끝에 부가적으로-누적된 0들을 정정한다. 이들 접근법들 각각은 또한, 예를 들어, 원래의 패킷이 시작에서 0-패딩되어 그것이 128-비트 또는 512-비트 경계와 끝-정렬(end-align)하게 되는 경우 어떠한 끝 조정(end adjustment)도 필요로 되지 않을 때 응용 가능하다. 일 실시예에서, 엠프티 비트들 및/또는 0 패딩들을 참작하는 추가의 동작들이 또한 CRC 유닛들(110A-110N)의 프로세싱 이후에 구현될 수 있다. 예를 들어, "FWD" 블록들(포워딩 유닛들(120B, 120N 및 120X))은 상이한 수의 엠프티 비트들 만큼 CRC 값을 포워딩한다. 레인 언롤 유닛들(lane unrolling units)(130A-130N) 및 바이트 언롤 유닛들(150A-150N)은 상이한 수의 엠프티 바이트들만큼 CRC를 언롤(unroll)한다. "포워딩(forwarding)" 및 "언롤(unrolling)" 기능들은 도 2 및 도 3의 예시적인 CRC 유닛들(200 및 300)에 관해 하기에서 이어지는 논의에서 더 상세히 설명될 것이다.
일 실시예에서, N-비트 데이터 버스 상의 인입하는 데이터(예를 들어, 본 명세서에서 패킷들로서 또한 지칭될 수 있는 이더넷 프레임(들))는 (N/L)-비트의 패킷의 시작(start-of-packet; SoP) 및 패킷의 끝(end-of-packet; EoP) 신호들을 포함한다. 일 실시예에서, SoP 및 EoP 신호들의 크기는 N/L 비트들이다. 전체 CRC 회로(100) 내에서 N/L 레인들이 있다. 이에 따라, 일 실시예에서, SoP 신호 또는 EoP 신호는, 패킷(또는 프레임, PDU 등)이 대응하는 레인에서 시작하거나 종료하는지 그리고 레인 내의 어디에서 프레임이 종료하는지를 나타낸다. SoP 신호 또는 EoP 신호가 레인에 대해 검출되는 경우, 레인에 대응하는 SoP 또는 EoP 플래그가 세팅되는데, 예를 들어, 단일 비트가 일"1"로 세팅되어 특정한 레인에 대해, SoP 신호가 검출되었음을 표시하고, 어떠한 SoP 신호도 레인 내의 데이터 상에서 검출되지 않은 경우, SoP 플래그는 영"0"으로 남아있을 수 있다. 일 실시예에서, 패킷의 시작은 레인의 시작과 정렬되어야 한다고 가정된다. 일 실시예에서, 패킷의 끝은 레인의 종료와 정렬되지 않을 수 있다. 그러나 일 실시예에서, 패킷의 끝은 바이트의 끝과 정렬되는 것으로 가정된다. 따라서, 레인이 L/8 바이트들을 포함하고 패킷은 끝나는 레인 내에의 임의의 바이트에서 종료할 수 있다. 일 실시예에서 Mty("엠프티") 값은 레인 내의 엠프티 바이트들의 수를 표시하도록 계산된다. 일 실시예에서, Mty 값은 특정한 바이트 내에서 EoP 신호의 검출 및 EoP 신호가 검출된 바이트의 포지션 아래의 레인 내의 부가적인 바이트들의 수의 결정에 기초하여 계산된다. Mty 값을 저장하는데 요구되는 비트들의 수는 size_Mty = (N/512) * Log2(L/8)-비트 에 의해 주어진다. 최소-크기 이더넷 패킷이 512-비트이기 때문에, (n=N/512)까지의 패킷들이 동일한 워드에 포함될 수 있다. 따라서, n-번째 Mty는 n-번째 완성된 패킷에 대한 것이다.
도 2는 512-비트 CRC 유닛(200)의 예시적인 실시예를 예시하며, L=128(즉, 레인 폭은 128-비트들임)이다. 예를 들어, CRC 유닛(200)은 도 1의 각각의 CRC 유닛들(110A-110N)로서 구현될 수 있다. 도 2에서 도시된 바와 같이, CRC 유닛(200)은 4개의 CRC 모듈들(210A-210D)을 포함한다. 모듈들 각각은 각각의 L-비트 레인(A-D) 상의 데이터 상에서 CRC 값을 컴퓨팅한다. 각각의 L-비트 레인 상의 CRC 값은 부분적인 CRC 값으로서 본 명세서에서 지칭된다. 포워딩 유닛(220B, 220C 및 220D)은 "i" 레인들 만큼 부분적인 CRC 값을 포워딩하기 위한 "F x i" 모듈들을 포함한다. 예를 들어, 도 2에서 도시된 바와 같이, 포워딩 유닛(220C)은 레인 C에 대한 부분적인 CRC 값을 2개의 레인들 만큼, 즉, 레인 A로 포워딩하는 Fx2 모듈을 포함한다. 도 2에서 도시된 바와 같이, 포워딩된 부분적 CRC 값들 각각은 목적지 레인의 부분적인 CRC 값과 결합한다. 예를 들어, 몇 개의 결합기들(290)이 도 2에서 도시되며, 결합기들(290) 각각은 그 결합기가 입력들로서 수신한 부분적인 CRC 값들 상에서 예를 들어, 배타적-or 연산을 수행하기 위한 것이다.
부분적인 CRC 값들을 포워딩하는 것 외에도, 포워딩 유닛들(220B-220D) 각각은, 부분적인 CRC 값을 특정한 목적지 레인으로 포워딩/송신하기 이전에, 목적지 레인에 대응하는 비트들의 수에 기초하여 부분적인 CRC 값을 "포워딩"한다. 비트-포워딩의 동작은, 다른 레인들로 및/또는 선택 모듈들, 예를 들어, 멀티플렉서들(230 및 240)로의 결과적인 CRC 값의 "포워딩"(예를 들어, 송신 및/또는 출력)에 대조적으로, CRC 값 상의 데이터 조작/연산이라는 것이 주의되어야 한다. 예를 들어, 레인 D의 포워딩 유닛(220D)의 Fx2 모듈은 256비트들(2개의 레인들에 대응하는 비트들의 수)에 기초하여 부분적인 CRC 값을 포워딩하고 결과적인 부분적인 CRC 값을 레인 B에 송신할 것이며, 이 값은 배타적-or 연산을 통해 결합기(290)에서 레인 B의 부분적인 CRC 값과 결합된다. 일 실시예에서, 포워딩은 생성 함수 및 목적지 레인까지의 거리(비트들의 수)에 기초하여 입력 CRC 값의 행렬 변환(matrix transformation)을 포함한다. 특정한 레인의 마지막 결합기 이후의 CRC 값 출력은 멀티플렉서(230)에 대한 입력들 중 하나를 포함한다. 각각의 포워딩 유닛들(220B-220D) 내의 포워딩 모듈 각각은 유사한 방식으로 동작한다. 다양한 레인들로부터의 부분적인 CRC 값들의 결합들을 포함하는 CRC 값들은 멀티플렉서들(230 및 240)에 대한 각각의 입력들을 포함한다.
"EoP_index" 신호(270)는 패킷이 종료하는 레인의 인덱스를 특정한다(예를 들어, 레인은 패킷이 그 레인에서 종료한다고 표시하기 위해 일"1"로 세팅되는 대응하는 EoP 비트/플래그를 가짐). EoP_index 신호(270)는 멀티플렉서(230)에 대한 입력들 중 어느 것이 CRC_A(CRC 모듈(200)에 의해 프로세싱되는 512 비트들 내에서 종료하는 패킷에 대한 CRC 값)로서 출력 포트(260) 상에서 출력되는지를 제어한다. 즉, 멀티플렉서(230)는 EoP_index의 값에 기초하여 어느 입력 CRC 값을 CRC_A로서 출력할지 선택한다. 유사하게, "SoP_index" 신호(280)는 패킷이 시작하는 레인의 인덱스를 특정한다(즉, 레인에 대한 대응하는 SoP 비트/플래그가 일"1"로 세팅됨). EoP_index 및 SoP_index에 대한 디폴트 값은 각각 0 및 (512/L-1)이다. SoP_index 신호(280)는 멀티플렉서(240)에 대한 입력 CRC 값들 중 어느 것이 CRC_B(CRC 유닛(200) 내에서 시작하거나 진행중인 패킷에 대한 CRC 값)으로서 출력 포트(250) 상에서 출력되는지를 제어한다. 즉, 멀티플렉서(240)는 SoP_index의 값에 기초하여 어느 입력 CRC 값을 CRC_B로서 출력할지 선택한다.
도 1의 논의로 돌아와서, CRC 회로(100)의 추가의 컴포넌트들 및 특징들이 이제 설명될 것이다. 위에서 언급된 바와 같이, 패킷은 레인의 시작에서 시작하는 것으로 가정된다. 그러나 일 실시예에서, 패킷은 경로 내의 임의의 레인에서 그리고 레인 내의 임의의 포지션에서 종료할 수 있다(바이트의 끝에서 종료하는 것으로 가정됨). 이에 따라, 일 실시예에서, 바이트 언롤 유닛들(150A-150N)은 레인의 끝에서 종료하지 않은 패킷들을 참작하기 위해 CRC 회로(100)에 포함된다. 위에서 언급된 바와 같이, 일 실시예에서, Mty("엠프티") 값은 레인 내의 엠프티 바이트들의 수를 표시하도록 계산된다. Mty 값은 특정한 바이트 내의 EoP 신호의 검출 및 EoP 신호가 검출된 바이트의 포지션 아래의 레인 내의 부가적인 바이트들의 수의 결정에 기초하여 계산될 수 있다. Mty 값을 저장하는데 요구되는 비트들의 수는 size_Mty = (N/512) * Log2(L/8)-비트 에 의해 주어진다. 최소-크기 이더넷 패킷이 512-비트이기 때문에, (n=N/512)까지의 패킷들이 동일한 워드에 포함될 수 있다. 따라서, n-번째 Mty는 n-번째 완성된 패킷에 대한 것이다. 도 1에서 도시된 바와 같이, Mty_1st, Mty_2nd...Mty_(n/512)th는 각각 바이트 언롤 유닛들(150A-150N)에 대한 입력들이다. 일 예로서, Mty_1st는 7의 값을 가질 수 있다. 이는 패킷이 레인의 바이트 9에서 종료되고 레인의 마지막 7 비트들은 0/엠프티 바이트들로서 취급되어야 한다는 것을 표시한다.
일 실시예에서, Mty 값에 따라 CRC를 "언롤" 또는 "언와인드(unwind)"하기 위해, 생성 함수에 그리고 Mty의 값(비트들의 수)에 기초한 입력 CRC 값의 행렬 변환이 수행된다. 다른 실시예에서, 파이프라인 언롤 동작이 바이트 언롤 유닛들(150A-150N) 중 임의의 하나 이상에서 구현될 수 있다. 일 실시예에서, 파이프라인은 i 스테이지들을 포함하며, 여기서 i-번째 스테이지는 2i 바이트를 언롤하기 위한 것이다. 따라서, 일 실시예에서, 4개의 파이프라인 스테이지들이 16 바이트까지 언롤하는데 필요하다. 다른 실시예에서, 반복 함수가 수행된다. 예를 들어, 일 실시예에서, CRC 값의 최하위 비트가 제거된다. 그 비트가 일"1"인 경우, 약수(divisor)(즉, 생성 다항식/생성 함수)가 결과적인 CRC 값에 부가된다. 그러나 제거된 비트가 영"0"인 경우, 0들이 결과적인 CRC 값에 부가된다. 이 동작은 Mty 값에 의해 표시된 바와 같은 비트들의 수에 대해 반복된다. 예를 들어, Mty_1st의 값이 2(2바이트들 또는 16 비트들)인 경우, 언롤 동작은 최종 CRC 값을 컴퓨팅하기 위해 16번 수행된다. 또 다른 실시예에서, 상이한 언롤 알고리즘이 활용될 수 있다. 즉, 본 개시는 임의의 하나의 특정한 언롤 알고리즘으로 제한되지 않는다.
CRC 회로(100)의 CRC 유닛들(110A-110N) 각각이 도 2의 유닛(200)과 같은 CRC 유닛을 포함할 때, 레인 언롤 유닛들(130A-130N)은 회로(100)로부터 생략될 수 있다. 그러나 일 실시예에서, 이들 레인 언롤 유닛들은, CRC 유닛들이 512-비트 경로의 끝에 대한 패킷 정렬을 유지하는 경우 회로(100)에 포함된다. 경로의 끝에 대해 정렬하는 예시적인 CRC 유닛은 도 3에서 도시된다.
도 3은 일 실시예에 따른 CRC 유닛(300)을 예시한다. 예를 들어, 도 1의 CRC 유닛들(110A-110N) 중 임의의 하나 이상은 CRC 유닛(300)을 포함할 수 있다. 도 3에서 도시된 바와 같이, CRC 유닛(300)은 도 2의 CRC 유닛(200)에 대한 다수의 유사성들을 공유한다. 예를 들어, CRC 유닛(300)은 512-비트 입력 포트/버스 및 512 비트들을 4개의 128-비트 레인들(A-D)로 분할하기 위한 분할기(305)를 갖는다. 레인들(A-D) 각각은 각각 CRC 모듈(310A-310D)을 포함한다. 그러나, 도 2와 대조적으로, 도 3의 포워딩 유닛들(320B-320D)은 CRC 값을 출력/포워딩하기 이전에 단일-비트 포워딩 동작만을 수행한다. 예를 들어, 포워딩 유닛(320D)은 레인 A의 목적지 레인을 또한 가정하는 384 비트들에 기초한 CRC 값의 비트들을 경로의 최종 레인으로 포워딩한다(3-레인 포워딩). 패킷이 레인 A 상에서 실제로 종료하지만, 그럴 필요는 없다는 것에 주의한다. 예를 들어, 패킷은 여전히 레인 B 상에서 종료할 수 있다. 유사하게, 포워딩 유닛(320C)은, 레인 A의 목적지를 또한 가정하는 256 비트들에 기초하여 CRC 유닛(310C)에 의한 부분적인 CRC 출력의 비트들을 경로의 최종 레인으로 "포워딩"할 수 있다. 이러한 방식의 비트-포워딩은 본질적으로 CRC 유닛(300)의 끝/경로의 끝에 패킷을 정렬한다. 그러나 이러한 가정이 부정확할 수 있으므로, 패킷과 경로의 끝의 정렬은 도 1의 CRC 회로(100)의 레인 언롤 유닛들(130A-130N)에서 정정될 수 있다. CRC 유닛(300)의 부가적인 컴포넌트들은 도 2의 CRC 유닛(200)의 부가적인 컴포넌트들과 유사한 방식으로 기능한다. 예를 들어, 선택 모듈/멀티플렉서(330)는 EoP(end-of-packet)_index 값(370)에 기초하여 출력 포트(360) 상에서 CRC_A로서 출력될 입력 부분적 CRC 값을 선택한다. 유사하게, 선택 모듈/멀티플렉서(340)는 SoP(start-of-packet)_index 값(380)에 기초하여 출력 포트(350) 상에서 CRC_B로서 출력될 입력 CRC 값을 선택한다. 또한, 결합기들(390) 각각은 도 2의 결합기(290)와 동일한 기능을 갖는다.
도 1의 CRC 회로(100)로 돌아오면, 레인 언롤 유닛들(130A-130N)은 512-비트 경로의 끝에 대해 정렬하는 CRC 유닛들을 이용할 때 포함될 수 있다. 예를 들어, 도 1의 CRC 유닛(110B)이 도 3의 CRC 유닛(300)을 포함한다고 가정한다. 패킷이 CRC 유닛(300)의 레인 C(제 2 레인) 상에서 종료하는 경우, 멀티플렉서(330)는 출력 CRC_A로서 (레인 C로부터의) 입력 2를 선택할 것이다. 그러나 포워딩 유닛들(320D 및 320C)은 본질적으로 둘(2)의 너무 많은 레인들 만큼 그 각각의 CRC 값들을 "오버-포워딩"시킬 것이다 따라서, 레인 언롤 유닛(130B)은, 그것이 입력으로서 수신한 중간 CRC 값을 2개의 레인들(256-비트들) 만큼 언롤할 수 있다. 레인 언롤 유닛은 앞서 설명된 바이트 언롤 유닛들(150A-150N)과 동일하거나 유사한 설계에 기초할 수 있다. 예를 들어, 언롤 동작은 엠프티 레인들의 수에 대응하는 엠프티 비트들의 수 및 생성 함수에 기초하여 입력 CRC 값의 행렬 조작을 포함할 수 있다. 일 설계에서, 레인 언롤 유닛들은 대응하는 레인의 EoP_index 값에 기초하여 언롤할 레인들의 수를 결정한다. 예를 들어, 위의 동일 예에 따라, 패킷이 레인 B 상에서 종료하는 경우, EoP_index = 2이다. 따라서, 레인 언롤 유닛은 두(2) 레인들(256 비트들)에 대응하는 비트들의 수에 기초하여 언롤할 것이다. 패킷이 레인 B의 중간 내에서 여전히 종료하기 때문에, CRC 값은 바이트 언롤 유닛들(150A-150N) 중 하나의 끝나는 레인 내에서 엠프티 바이트들의 수 만큼 여전히 언롤되어야 한다는 것에 주의한다.
CRC 회로(100)의 추가의 기능들, 특히 포워딩 유닛들(120B, 120N) 및 선택 유닛(140)의 기능들은 도 4의 예들을 이용하여 예시될 수 있다. 특히, 도 4는 본 개시의 실시예들에 따라 CRC 모듈에 의해 프로세싱될 수 있는 512-비트 입력에 대한 다양한 시나리오들에 관련된 타이밍도(400)를 예시한다. 예를 들어, 5개의 예들(A-E) 각각은 임의의 하나의 클록 사이클에서 수신/프로세싱될 수 있는 512 비트들을 나타낸다. 이 예들에서, 비트(511)는 데이터 스트림에서 "앞선" 비트이고 비트(0)는 "늦은" 비트란 것이 주의되어야 한다. 예를 들어, 도 1의 회로(100)와 같은 CRC 회로는 트랜시버의 단지 하나의 컴포넌트만을 포함할 수 있다. 일 실시예에서, 트랜시버는 직렬 데이터를 전송 및/또는 수신하고, 이 직렬 데이터는 CRC 회로 및 트랜시버의 다른 컴포넌트들에 의한 더 빠른 프로세싱을 위해 병렬 데이터로 변환된다. 따라서, 데이터가 직렬로 수신될 때, 데이터는 (위에서 설명된 바와 같이 몇 개의 512-비트 CRC 유닛들에 의한 프로세싱을 위한 몇 개의 경로들로 CRC 회로에 의해 추후에 분할될 수 있는) 데이터 워드의 연속적인 병렬 비트 포지션들에 배치될 수 있다. 예시적인 A에서, 경로에서 수신되는(즉, 512-비트 CRC 유닛에 의해 프로세싱되는 512 비트들 내에 있는) SoP 또는 EoP 신호는 없다. 이는 2개의 이유들로 인한 것일 수 있는데: 경로 상에 패킷/데이터가 없거나, 또는 패킷이 경로를 통해 진행중이다(예를 들어, 패킷이 512 비트들을 초과하는 경우, 패킷은 다른 512-비트 CRC 유닛들에 의해 프로세싱되는 상이한 경로 상에서 시작하고 종료할 수 있음). 어느 경우든, 경로 내에서 종료하는 패킷이 없기 때문에, Valid_A는 경로 내에서 종료하는 패킷들에 대한 CRC_A 출력이 유효한 출력이 아니라고 표시하도록 영"0"으로 세팅된다. 한편, Valid_B는 경로 내에서 시작하거나 연속되는 패킷에 대한 CRC_B 출력이 유효한 출력이라고 표시하기 위해 일"1"로 세팅된다.
예 B에서, SoP 신호가 512 비트들 내에서 발견되지만, 어떠한 EoP 신호도 여전히 발견되지 않는다. 따라서, 경로에서 시작하는 패킷은 있지만, 어떠한 패킷도 경로 내에서 종료하지 않는다. 따라서, Valid_A는 영"0"으로 세팅되고, Valid_B는 일"1"로 세팅된다. 예 C에서, EoP 신호가 512 비트들 내에서 발견되지만, SoP 신호는 없다. 이에 따라, Valid_A는 (패킷들이 EoP 신호에 의해 표시된 바와 같이 경로 내에서 종료하기 때문에) 경로에서 종료하는 패킷들에 대한 CRC_A 출력이 유효하다는 것을 표시하기 위해 일"1"로 세팅된다. 그러나 Valid_B는 경로 내에서 시작하거나 연속되는 패킷들에 대한 CRC_B가 유효하지 않은 출력이라는 것을 표시하도록 영"0"으로 세팅된다.
예 D에서, SoP 및 EoP 신호 둘 다가 512 비트들 내에서 발견된다. SoP 및 EoP 신호 둘 다가 512 비트들 내에서 발견되지만, Valid_A만이 일"1"로 세팅된다. 이것은 EoP가 SoP 이후에 발견되기 때문인데, 이는 SoP 신호가 시작하는 동일 패킷에서 EoP가 종료한다는 것을 명확하게 나타낸다. 따라서, 패킷이 경로 내에서 종료했기 때문에, 출력 CRC_B는 유효하지 않고, 이에 따라 임의의 다른 CRC 유닛들로부터의 임의의 다른 CRC 값들과 결합되어선 안 된다. 예 E에서, 재차, SoP 및 EoP 신호 둘 다가 512 비트들에서 발견된다. 그러나 EoP 신호가 SoP 신호보다 앞서며, 이는 EoP 신호가 다른 CRC 유닛/경로로부터 연속되지만, 현재 경로 내에서 종료한 패킷에 대한 것인 반면에, SoP 신호는 새로운 패킷의 시작에 대한 것임을 표시한다. 따라서, Valid_A는 CRC_A(경로 내에서 종료하는 패킷들에 대한 CRC 값)이 유효하다는 것을 표시하기 위해 일"1"로 세팅된다. 마찬가지로, Valid_B는 CRC_B(유닛을 통해 연속되거나 그 유닛에서 시작하는 패킷들에 대한 CRC 값)가 또한 유효하다는 것을 표시하기 위해 일"1"로 세팅된다.
이제 도 4와 함께 도 1을 참조하여, 회로(100)의 데이터 버스는 3개의 512-비트 경로들로 분할되는 1536-비트 워드를 포함할 수 있다. 일 예로서, 가장 앞선 경로(경로 N)가 도 4의 예 B에서 도시된 바와 같이 512 비트들을 포함하고, 중간 경로(경로 B)는 예 E의 512 비트들을 포함하고, 마지막 경로(경로 A)는 예 C의 512 비트들을 포함한다. 따라서, 경로 N의 CRC 유닛(110N)은 CRC_A 및 CRC_B를 생성하기 위해 데이터 경로 상의 비트들을 프로세싱한다. 또한, Valid_A는 영"0"으로 세팅되고 Valid_B는 일"1"로 세팅된다. 이에 따라, CRC 유닛(110N)에 의해 출력된 CRC_A가 이용되지 않아야 한다. 선택 유닛(140)의 목적은 출력 포트들(180A-180N) 상에서 하나 이상의 최종 CRC 값들로서 출력될 유효한 CRC 값들을 선택하기 위한 것이다. 따라서, 영"0"인, 즉 유효하지 않은 경로 N에 대한 Valid_A 신호/플래그에 기초하여, 선택 유닛(140)은, CRC 유닛(110N)의 CRC_A으로서 출력되는 CRC 값을 무시하거나 최종 CRC 값으로서 출력되도록 선택하지 않을 수 있다. 포워딩 유닛들(120B 및 120N)의 목적은 패킷이 종료하는 다른 경로/CRC 유닛으로부터의 중간 CRC 값과 결합되도록 현재 경로 내에서 종료하지 않는 패킷에 대한 중간 CRC 값들을 포워딩하는 것이다. 따라서, Valid_B가 "1"로 세팅되기 때문에, 즉 유효하기 때문에, 포워딩 유닛(120N)은 다른 CRC 유닛들의 출력들과 결합되도록 CRC_B를 출력/송신할 수 있다.
포워딩 유닛(120N)은 물론, 포워딩 유닛들(120B 및 120X)은 도 2 및 도 3에서 도시된 포워딩 유닛들과 유사한 방식으로 기능한다는 것이 주의되어야 한다. 따라서, 예를 들어, 포워딩 유닛(120N)이 하나의 레인만큼(예를 들어, 레인 B으로) CRC_B를 포워딩하는 경우, 그것은 512 비트들(목적지 레인까지의 비트들의 거리)에 기초하여 포워딩할 것이고, 2개의 레인들(예를 들어, 레인 A로)을 포워딩하는 경우, 그것은 1024 비트들에 기초하여 포워딩할 것이다.
경로 N 상에서 프로세싱이 발생하는 것과 동시에, 경로 B의 CRC 유닛(110B)은 도 4의 예 E에서 도시된 바와 같이 512 비트들을 프로세싱한다. CRC 유닛(110B)은 중간 CRC 값들로서 출력하기 위한 CRC 값들(CRC_A 및 CRC_B)을 생성한다. 또한, EoP 신호가 발견되고 이어서 SoP 신호가 발견된다. 따라서, Valid_A 및 Valid_B 둘 다는 일"1"로 세팅된다. 명백히, 포워딩 유닛(120N)은 경로 N으로부터 경로 B로 CRC_B를 출력/송신할 것이다(위에서 설명된 바와 같이, CRC 유닛(110N)/경로 N에 대해 Valid_B =1임). 따라서, CRC 유닛(110N)으로부터의 CRC_B는 예를 들어, 배타적-or 연산을 실행하는 결합기(190)에서 CRC 유닛(110B)으로부터의 CRC_A와 결합된다. 결합된 CRC 값은 이어서 언롤 유닛(130B) 및 선택 유닛(140)에 의해 수신된다. 또한, 선택 유닛(140)은 최종 CRC 값으로서 출력되도록 경로 B 상의 결합된 CRC 값을 선택할 것이다. 예를 들어, 선택 유닛(140)은 경로 B에 대한 Valid_A 신호를 고려하며, 이 신호는 패킷이 경로 B를 따라 또는 현재 CRC 유닛(110B) 내에서 종료했다는 것을 표시하기 위해 "1"로 세팅된다.
또한, 새로운 패킷이 또한 경로 B 상의 데이터 내에서 시작한다. Valid_B가 일"1"로 또한 세팅되었기 때문에, 포워딩 유닛(120B)은 도 1에서 표시된 연결들을 따라 CRC_B를 포워딩한다.
CRC 유닛(110A)에서, 도 4의 예 C의 512 비트들이 프로세싱되고 CRC_A 및 CRC_B가 출력된다. EoP 신호는 경로 A 상의 데이터 내에서 발견된다. 따라서, Valid_A = 1인 반면에 Valid_B = 0이다. CRC 유닛(110A)의 CRC_A의 값은 예를 들어, 배타적-or 연산을 실행하는 결합기(190)에서 CRC 유닛(110B)으로부터의 CRC_B 값과 결합된다. 결합된 CRC 값은 이어서 언롤 유닛(130A) 및 선택 유닛(140)에 의해 수신된다. Valid_A = 1이므로, 선택 유닛(140)은 경로 A를 따라 결합된 CRC 값이 최종 CRC 값으로서 출력되도록 허용할 것이다. 명백히, 이 예에서, 2개의 CRC 값들은, 단일 1536-비트 워드에 대해 선택 유닛(140)에 의한 최종 CRC 값들로서 병렬로 출력된다.
위의 예가 본 실시예들의 몇 개의 특징들 및 이점들을 예시하지만, 몇몇 예들에서, 패킷은 다수의 워드들에 스패닝할 수 있다는 것이 또한 주의되어야 한다. 이러한 상황을 참작하기 위해, CRC 회로에서 마지막 경로(예를 들어, 도 1의 CRC 회로(100)의 경로 A)의 출력은 추후의 사이클에서 프로세싱될 다음 데이터 워드에 대한 시드 CRC 값으로서 이용된다. 도 1에서 도시된 바와 같이, 값(CRC_accum_new(170))은 CRC_accum 레지스터(160)에 대한 입력을 포함한다. 따라서, 예를 들어, CRC 회로(100)의 경로 B에서 시작하고 다음 데이터 워드 내에서 종료하는 패킷에 대해, 포워딩 유닛(120B)은 CRC 유닛(110A)의 CRC_A 및 CRC_B 둘 다와 결합되도록 CRC 유닛(110B)으로부터의 CRC_B 값을 포워딩할 것이다. 위의 경로 B로부터의 CRC_B는 유닛(110A)의 CRC_A와 결합된다. 그러나 패킷이 경로 A 상에서 종료하지 않기 때문에, CRC 유닛(110A)의 CRC_A는 유효하지 않을 것이고(Valid_A=0) 선택 유닛(140)은 이 결합된 CRC 값을 단순히 무시한다. 한편, 유닛(110B)로부터의 CRC_B는 (예를 들어, 배타적-or를 통해) 유닛(110A)으로부터의 CRC_B와 결합되고, 이 결합된 CRC 값은 유효하고, 다음 데이터 워드에 대한 시드 CRC 값(CRC_accum_new(170))이다.
특정한 CRC 유닛/경로에 대해 Valid_B = 1인 경우, 경로의 포워딩 유닛은 1개 초과의 다른 경로로 CRC_B 값을 포워딩할 것이란 점이 또한 주의되어야 한다. 예를 들어, 포워딩 유닛(120N)은 CRC 유닛(110N)의 CRC_B 값을 양자의 경로들(B 및 A)에 포워딩할 수 있다. 그러나 경로 N 상에서 연속되거나 시작하는 패킷은 경로 A가 아니라 경로 B 상에서 종료할 수 있다. 결과적으로, 경로 N의 CRC_B 값은 경로 B의 유닛(110B)의 출력 CRC_A 값과만 결합되어야 하고 경로 A 상에서 무시되어야 한다. 이 목적을 달성하기 위해, 일 실시예에서, CRC 회로(100)는 추가로 인접한 검사 회로를 포함할 수 있다.
도 5는 패킷이 인접한 경로들/CRC 유닛 간에서 인접한지를 검사하기 위한 검사 회로(500)의 예를 예시한다. 도 5에서 도시된 바와 같이, 경로들(A 및 B)에 각각 2개의 인접한 CRC 유닛들(510A 및 510B)이 있다. 검사 유닛(530)은 포워딩 유닛(520B)의 출력과 목적지 레인(A) 간에 로케이팅된다. 일 실시예에서, 검사 유닛은 멀티플렉서를 포함한다. 일 실시예에서, 검사 유닛(530)에 대한 입력들 중 하나는 포워딩 유닛(520B)의 출력을 포함하고, 다른 입력은 접지(예를 들어, 영"0")를 포함한다. 또한, 일 실시예에서, 검사 유닛(530)은 "패킷 연속" 제어 신호(Pkt_cont (j-1, i+1))에 의해 제어된다.
포워딩된 CRC_accum 또는 CRC_B는 패킷이 유닛 i를 넘어서 종료하는 경우 유닛 i의 CRC_A와 결합되지 않을 수 있다. 예를 들어, 유닛 j로부터 포워딩된 CRC_B는, 패킷이 유닛(j-1)과 유닛(i+1) 사이에서 인접한 경우 유닛 i의 CRC_A와 결합될 것이다. 또한, 포워딩된 CRC_accum은, 패킷이 최상위 유닛과 유닛(i+1) 사이에서 인접한 경우 유닛 i의 CRC_A와 결합될 것이다. 유사하게, 포워딩된 CRC_accum 또는 CRC_B는 패킷이 현재 데이터 워드 내에서 종료하는 경우 새로운 CRC_accum를 생성하는데 이용되지 않을 것이다. 예를 들어, 유닛 j로부터의 포워딩된 CRC_B는 패킷이 유닛(j-1)과 유닛(0) 사이에서 인접한 경우 누적을 위해 이용될 것이다. (마지막 데이터 워드로부터의) 포워딩된 CRC_accum은 또한 패킷이 최상위 유닛과 유닛(0) 사이에서 인접한 경우 누적을 위해 이용될 것이다. 일 실시예에서, 패킷이 유닛들 간에 SoP 및 EoP 비트들을 조사함으로써 패킷이 그것들 사이에서 인접한지 여부가 결정된다. 이에 따라, 도 5에서 도시된 바와 같이, 검사 유닛(530)은 포워딩된 CRC(CRC_B)가 전달되어야 하는지를 결정하며, 여기서 Pkt_cont(j-1, i+1)는, 패킷이 유닛(j-1)과 (i+1) 사이에서(예를 들어, 각각 유닛(510A)과 유닛(510B) 사이에서) 인접한지를 표시하기 위해 SoP 및 EoP 신호들에 기초하여 생성된 신호이다. 다수의 유사한 검사 유닛들이 유사한 방식으로 상이한 연속성 검사를 수행하기 위해 상이한 경로들 사이에 로케이팅될 수 있다는 것이 주의되어야 한다.
포워딩된 CRC가 유닛으로 전달되어야 하는지를 결정하는 것은 물론, 일 실시예에서, 유닛이 포워딩된 CRC(들)를 수락하기를 원하는지 결정하는 것이 또한 필수적이다. 패킷이 동일한 유닛 내에서 시작하고 끝나는 경우, 이 유닛의 CRC_A는 임의의 포워딩된 CRC와 결합될 필요가 없다. 도 6은 포워딩된 CRC 값이 수락되어야 하는지에 관한 결정 및 CRC 유닛을 통해 및/또는 경로 상에서 프로세싱되는 비트들에 대한 몇 개의 예시적인 시나리오와 관련된 타이밍도(600)를 예시한다. 일 실시예에서, 경로 내에서 존재할 수 있는 SoP 및 EoP 신호들은 유닛/경로가 상위 유닛들로부터 그리고 CRC_accum 레지스터로부터 포워딩된 CRC들을 수락되어야 하는지를 결정할 수 있다. 여기서 "*"는 "돈 캐어(don't care)"를 의미하는데, 그 이유는 이 경우들에서 유닛의 CRC_A 출력은 유효하지 않기 때문이다. 일 실시예에서, "수락 포워드(accept forward)" Accept_Fwd 신호는 도 5의 검사 유닛(530)에 대한 부가적인 제어 신호로서 이용될 수 있는 단일 비트를 포함한다. 다른 실시예에서, 별개의 제어 로직이 Accept_Fwd 신호에 따른 포워딩 또는 차단을 달성하도록 동일한 경로에 안착될 수 있다.
도 7은 순환 중복 검사를 수행하기 위한 방법(700)의 블록도를 예시한다. 예를 들어, 방법(700)은 위에서 설명된 실시예들 중 임의의 하나 이상에 따른 회로/디바이스에 의해 수행될 수 있다. 일 실시예에서, 본 개시에 따른 컴퓨터-판독 가능한 매체는 프로그래밍 가능 디바이스가 방법(700)의 단계들, 기능들 또는 동작들을 수행하도록 프로그래밍되게 하는 일련의 명령들을 저장한다. 이 방법은 단계(702)에서 시작하고 단계(710)로 진행된다.
단계(710)에서, 방법(700)은 입력 데이터 워드를 수신한다. 예를 들어, 방법은 1024-비트 폭 또는 그 초과의 데이터 버스를 통해 병렬 데이터를 수신할 수 있다.
단계(720)에서, 방법(700)은 입력 데이터 워드를 복수의 경로들로 분할한다. 예를 들어, 방법은 데이터 워드를 병렬 프로세싱을 위해 몇 개의 동일한 크기의 경로들로 분할할 수 있다. 일 실시예에서, 경로들 각각은 512 비트폭이다.
단계(730)에서, 방법(700)은 경로들 각각을 예를 들어, 병렬 방식으로 프로세싱한다. 일 실시예에서, 각각의 경로를 프로세싱하는 것은 경로 내에서 종료하는 패킷에 대한 순환 중복 검사(CRC) 값을 계산하는 것 및 경로 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 계산하는 것을 포함한다.
일 실시예에서, 각각의 경로에 대해, 프로세싱은 경로를 복수의 레인들로 분할하는 것을 포함한다. 예를 들어, 레인들 각각은 경로로부터 동일한 수의 순차적인 바이트들을 포함할 수 있다. 일 실시예에서, 각각의 레인에 대해, 방법은 부분적인 CRC 값을 컴퓨팅하고 부분적인 CRC 값을 "아래의" 레인들(대략 다른 레인들)로 포워딩한다. 일 실시예에서, 포워딩은 현재의 레인으로부터 목적지 레인까지의 거리에 따라 부분적인 CRC 값의 행렬 변환을 포함한다. 일 실시예에서, 각각의 레인에 대해, 방법은 추가로, 예를 들어, 배타적-or 연산을 이용하여, 그 레인에 대해 계산된 CRC 값을 "위의" 임의의 레인들(대략 다른 레인들)로부터 레인에 포워딩된 임의의 CRC 값(들)과 결합한다. 마지막으로서, 방법은 특정한 레인에서 검출될 수 있는 패킷의 끝 신호에 기초하여 경로 내에서 종료하는 패킷에 대한 CRC 값으로서 출력하도록 레인들 중 하나로부터의 결합된 CRC 값을 선택할 수 있다. 마찬가지로, 이 방법은 (예를 들어, 레인들 중 어떠한 레인에서도 패킷의 시작 신호가 검출되지 않는 경우, 패킷이 경로에서 시작하지 않고 위의 임의의 경로에서 또는 이전의 데이터 워드에서 시작했다고 가정되는 경우) 디폴트 조건에 기초하여 또는 레인들 중 하나 내에서 패킷의 시작 신호의 검출에 기초하여 출력을 위해 경로를 통해 연속하거나 시작하는 패킷에 대한 결합된 CRC 값을 선택할 수 있다.
단계(740)에서, 방법은 적어도 제 1 경로로부터 적어도 제 2 경로로 CRC 값을 포워딩한다. 예를 들어, 패킷은 제 1 경로에서 시작하거나 연속될 수 있다. 따라서, 경로 내에서 시작하거나 연속되는 패킷에 대한 부분적인 CRC 값은 "아래의" 하나 이상의 경로들(예를 들어, 패킷이 종료하는 경로)에 대한 다른 부분적인 CRC 값들과 결합된다. 일 실시예에서, 포워딩은 목적지 경로에 따라 부분적인 CRC 값의 행렬 변환을 포함한다. 예를 들어, 목적지 경로가 현재 경로보다 2개의 경로들 앞에 있는 경우, 행렬 변환은 경로 당 비트들의 수의 2배에 기초할 수 있다. 일 실시예에서, 단계(740)는 다수의 경로들로부터 다수의 상이한 목적지 경로들로 CRC 값들을 포워딩하는 것을 포함한다는 것이 주의되어야 한다. 또한, 일 실시예에서, 이전의 데이터 워드로부터 누적된 CRC 값은 또한 단계(740)에서 경로들 중 하나 이상에 포워딩될 수 있다.
단계(750)에서, 방법(700)은 적어도 제 1 경로 내에서 시작하거나 진행중인 패킷에 대한 적어도 제 1 CRC 값을 적어도 제 2 경로 내에서 종료하는 패킷에 대한 제 2 CRC 값과 결합한다. 일 실시예에서, 결합은 2개의 CRC 값들 상에서의 배타적-or 연산을 수행하는 것을 포함한다. 일 실시예에서, 단계(750)는 패킷이 2개의 경로들 간에 연속되는지를 먼저 검사하는 것을 포함한다. 예를 들어, 동일한 패킷이 제 1 경로 상에서 시작하고 제 2 경로 상에서 종료할 수 있다. 따라서, 2개의 경로들로부터의 CRC 값들이 결합된다. 그러나 2개의 경로들에 걸쳐 동일한 패킷의 연속성이 없는 경우, CRC 값들이 결합되어선 안 된다. 대안적으로 또는 부가적으로, 일 실시예에서, 단계(750)는 이전의 데이터 워드로부터의 누적된 CRC 값을, 현재의 데이터 워드의 하나 이상의 경로들로부터의 하나 이상의 CRC 값들과 결합하는 것을 포함할 수 있다.
선택적인 단계(760)에서, 방법(700)은 누적된 CRC 값을 출력한다. 예를 들어, 패킷이 데이터 워드의 마지막 경로에서 진행중이거나 연속되는 경우 그리고 패킷이 현재의 데이터 워드 내에서 종료하지 않는 경우, 누적된 CRC 값은 (패킷 데이터가 종료할 수 있는) 다음 데이터 워드에 관하여 방법(700)의 후속 반복을 위해 출력되고 저장되어야 한다.
단계(770)에서, 방법(700)은 적어도 하나의 CRC 값을 언롤한다. 예를 들어, 패킷은 레인 내의 임의의 포지션에서 종료할 수 있다. 따라서, CRC 값은 패킷의 끝과 레인의 끝 및/또는 경로의 끝 간에 임의의 엠프티 비트들을 참작하도록 조정될 필요가 있을 수 있다. 예를 들어, 일 실시예에서, 언롤하는 것은 생성 함수/다항식 및 다수의 엠프티 비트들에 따른 CRC 값의 행렬 변환을 포함한다. 일 실시예에서, 단계(700)는 2개 이상의 CRC 값들을 언롤하는 것을 포함한다. 예를 들어, 2개 이상의 패킷들은 본 실시예에서 동일한 데이터 워드 내에서 종료할 수 있다. 따라서, 별개의 언롤 동작은 엠프티 비트들의 각각의 수에 기초하여 CRC 값들 각각에 관하여 단계(770)에서 수행될 수 있다.
단계(780)에서, 방법은 하나 이상의 CRC 값들을 선택하고 최종 CRC 값들로서 CRC 값들을 출력한다. 예를 들어, 1, 2, 또는 몇 개의 패킷들이 동일한 데이터 워드 내에서 모두 종료할 수 있다. 예를 들어, 워드 크기가 N인 경우, 경로 크기는 512이고, 최소 패킷 크기 또한 512이고, 동일한 워드 내에서 잠재적으로 종료하는 패킷들의 수는 n=N/512이다. N = 1536인 경우, 3개의 경로들 및 잠재적으로 워드에서 종료하는 3개의 패킷들이 있다. 그러나 경로들 각각이 CRC 출력들을 갖더라도, 출력들 모두가 반드시 유효한 최종 CRC 값들인 것은 아니다. 예를 들어, 패킷은 제 1 경로 내에서 그리고 마지막 경로 내에서 종료하지만 중간 경로에서 종료하지 않을 수 있다. 따라서, 단계(780)에서, 방법(700)은 최종 CRC 값들로서 출력하도록 이러한 유효한 CRC 값들만 선택할 수 있다.
단계(780)에 이어, 방법(700)은 방법이 종료하는 단계(795)로 진행된다.
특별히 특정되지 않지만, 방법(700)의 하나 이상의 단계들 또는 동작들은 특정한 애플리케이션에 대해 요구될 때 저장하고, 디스플레이하고 및/또는 출력하는 단계를 포함할 수 있다는 것이 주의되어야 한다. 즉, 방법에서 논의된 임의의 데이터, 레코드들, 필드들, 테이블들 및/또는 중간 결과들은 특정한 애플리케이션에 대해 요구될 때 저장되고, 디스플레이되고 및/또는 다른 디바이스로 출력될 수 있다. 또한, 결정 동작을 인용하거나 판단을 포함하는 도 7의 단계들, 동작들 또는 블록들은, 반드시 결정 동작의 양 브랜치들이 실시되도록 요구하는 것은 아니다. 즉, 결정 동작의 브랜치들 중 하나는 선택적인 단계로서 간주될 수 있다.
도 8은 본 명세서에서 설명된 기능들 중 일부 또는 모두 다를 수행하는데 이용하기에 적합한 범용 컴퓨터, 컴퓨팅 디바이스 또는 컴퓨팅 시스템(800)의 고레벨 블록도를 도시한다. 도 8에서 도시된 바와 같이, 시스템(800)은 프로세서 엘리먼트(802)(예를 들어, CPU), 메모리(804), 예를 들어, 랜덤 액세스 메모리(random access memory; RAM) 및/또는 판독 전용 메모리(read only memory; ROM), 순환 중복 검사를 수행하기 위한 모듈(805), 및 다양한 입력/출력 디바이스들(806)(예를 들어, 메모리 디바이스를 포함하는(그러나 이것으로 제한되지 않음) 저장 디바이스들, 테이프 드라이브, 플로피 드라이브, 하드 디스크 드라이브, 또는 컴팩트 디스크 드라이브, 수신기, 전송기, 스피커, 디스플레이, 음성 합성기, 출력 포트, 및 사용자 입력 디바이스(예컨대, 키보드, 키패드, 마우스 등))을 포함한다.
본 개시의 실시예들은 예를 들어, 주문형 집적 회로(application specific integrated circuits; ASIC), FPGA와 같은 PLD, 범용 컴퓨터 또는 마이크로프로세서들과 같은 임의의 다른 하드웨어 등가물들을 이용하여 하드웨어 및 소프트웨어의 결합으로 구현될 수 있다. 일 실시예에서, 순환 중복 검사를 수행하기 위한 본 모듈 또는 프로세스는 위에서 논의된 바와 같은 기능들을 구현하도록 메모리(804)에 로딩되고 프로세서(802)에 의해 실행될 수 있다. 따라서, 본 개시의 실시예들의 (연관된 데이터 구조들을 포함하는) 순환 중복 검사를 수행하기 위한 본 모듈 또는 프로세스(805)는 비-일시적인 컴퓨터 판독 가능한 저장 매체, 예를 들어, RAM 메모리, 자기 또는 광학 드라이브 또는 디스켓 등 상에 저장될 수 있다.
본 개시의 실시예들은 또한 전체적으로 또는 부분적으로, 튜닝 가능한 IC, 예를 들어, PLD 및/또는 FPGA에 의해 구현될 수 있다. 보다 구체적으로, 프로그래밍 가능 로직 디바이스(programmable logic device; PLD)는 다양한 선택된 기능들을 구현하도록 사용자에 의해 프로그래밍될 수 있는 범용 디바이스이다. 하나의 타입의 PLD는 통상적으로 구성 가능한 로직 블록들(configurable logic blocks; CLB)의 어레이 및 복수의 입력/출력 블록들(input/output blocks; lOB)을 포함하는 필드 프로그래밍 가능 게이트 어레이(Field Programmable Gate Array; FPGA)이다. CLB들은 개별적으로 프로그래밍 가능하고 몇 개의 입력 신호들 상에서 다양한 로직 기능들을 수행하도록 구성될 수 있다. IOB들은 CLB들로부터 FPGA의 외부 핀들로 출력 신호들을 구동하고 및/또는 외부 FPGA 핀들로부터 입력 신호들을 수신하도록 구성될 수 있다. FPGA는 또한 다수의 입력 신호들의 보다 복잡한 기능들을 생성하기 위해 다양한 CLB들 및 IOB들 간에 신호들을 선택적으로 라우팅하도록 프로그래밍될 수 있는 프로그래밍 가능 상호연결 구조를 포함한다. CLB들, IOB들 및 프로그래밍 가능 상호연결 구조는 FPGA에서 사용자 설계를 구현하기 위해 구성 데이터에 의해 특정된 로직 및 라우팅 기능들을 구현하도록 CLB, IOB들 및 상호연결 구조 내에서 다양한 스위치들 및 멀티플렉서들을 제어하는 (예를 들어, 범용 컴퓨터(800)로부터의) 구성 데이터를 연관된 메모리 셀들로 로딩함으로써 프로그래밍된다. FPGA는 또한 다른 프로그래밍 가능 및 프로그래밍 불가능 자원들을 포함할 수 있다. 따라서, 도 1 내지 도 3과 관련하여 위에서 도시된 회로들은 도 1 내지 도 3의 회로들 중 임의의 하나 이상의 회로들의 임의의 하나 이상의 컴포넌트들의 등가의 로직 동작들을 수행하는 복수의 CLB들에서 구현될 수 있다. 예를 들어, 1536-비트 폭 데이터 버스 상에서 수신되는 패킷들 상에서 CRC들을 수행하기 위한 본 개시의 실시예들은 대략 15,000개의 룩업 테이블들(look up table; LUT), 3,000개의 레지스터들 및 4,500개의 슬라이스들을 이용하여 FPGA 상에서 구현된다.
위의 내용은 본 개시의 하나 이상의 양상들에 따른 예시적인 실시예(들)를 설명하지만, 본 개시의 하나 이상의 양상들에 따른 다른 및 추가의 실시예(들)는 하기의 청구항(들) 및 그의 등가물들에 의해 결정되는 본 발명의 범위로부터 벗어남 없이 창안될 수 있다. 단계들을 나열하는 청구항(들)은 단계들의 임의의 순서를 암시하진 않는다. 상표들은 그 각각의 소유자의 재산이다.

Claims (15)

  1. 데이터 패킷에 CRC(Cyclic Redundancy Code)를 첨부하기 위한 디바이스로서,
    데이터 워드를 복수의 경로들로 분할하기 위한 분할기로서, 상기 데이터 워드는 하나 이상의 패킷을 포함하는 것인, 분할기; 및
    복수의 순환 중복 검사 유닛들을 포함하고,
    상기 순환 중복 검사 유닛들의 각각은 상기 경로들의 각각의 경로를 프로세싱하기 위한 것이며,
    상기 순환 중복 검사 유닛들의 각각은,
    순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 1 출력 포트; 및
    상기 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 출력하기 위한 제 2 출력 포트를 포함하는 것인, 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  2. 제 1 항에 있어서,
    상기 복수의 순환 중복 검사 유닛들 중 제 1 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 제 1 순환 중복 검사 값을, 상기 복수의 순환 중복 검사 유닛들 중 제 2 순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 제 2 순환 중복 검사 값과 결합하기 위한 적어도 하나의 결합기를 더 포함하는 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  3. 제 2 항에 있어서,
    상기 복수의 순환 중복 검사 유닛들 중 제 1 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷 및 상기 복수의 순환 중복 검사 유닛들 중 제 2 순환 중복 검사 유닛 내에서 종료하는 패킷은 동일한 패킷인 것인 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  4. 제 2 항 또는 제 3 항에 있어서,
    상기 복수의 순환 중복 검사 유닛들 중 적어도 2개에 의해 프로세싱되는 적어도 하나의 패킷이 상기 복수의 순환 중복 검사 유닛들 중 상기 적어도 2개 사이에서 연속적인지를 검사하기 위한 적어도 하나의 검사 회로를 더 포함하는 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  5. 제 4 항에 있어서,
    상기 검사 회로는,
    패킷의 시작(start-of-packet) 신호가 2개의 순환 중복 검사 유닛들 중 제 1 순환 중복 검사 유닛과 연관된 제 1 경로에서 발견되거나 또는 상기 패킷이 상기 제 1 경로에서 진행중일 때 그리고 패킷의 끝(end-of-packet) 신호가 상기 2개의 순환 중복 검사 유닛들 중 제 2 순환 중복 검사 유닛과 연관된 제 2 경로에서 발견될 때 상기 패킷이 상기 2개의 순환 중복 검사 유닛들 사이에서 연속적이라고 결정하는 것인 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  6. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 순환 중복 검사 유닛들의 각각은,
    상기 경로들 중 하나를 복수의 레인(lane)들로 분할하기 위한 분할기 회로; 및
    상기 복수의 레인들의 각각의 레인의 패킷의 비트들의 부분적 순환 중복 검사 값을 계산하기 위한 복수의 순환 중복 검사 모듈들을 더 포함하는 것인, 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  7. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    상기 순환 중복 검사 유닛들의 각각은,
    상기 순환 중복 검사 유닛 내에서 종료하는 패킷에 대한 순환 중복 검사 값으로서 출력하기 위한 순환 중복 검사 값을 선택하기 위한 선택 모듈을 더 포함하는 것인 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  8. 제 6 항에 있어서,
    상기 순환 중복 검사 유닛들의 각각은,
    상기 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값으로서 출력하기 위한 순환 중복 검사 값을 선택하기 위한 선택 모듈을 더 포함하고,
    상기 선택 모듈은 복수의 레인들 중 하나의 레인 내의 패킷의 시작 신호에 기초하여 또는 레인들 중 어느 것에도 패킷의 시작 신호가 없는 경우 디폴트 조건에 기초하여 순환 중복 검사 유닛 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값으로서 출력하기 위한 순환 중복 검사 값을 선택하기 위한 것인 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  9. 제 6 항에 있어서,
    상기 순환 중복 검사 유닛들의 각각은,
    제 2 순환 중복 검사 모듈과 연관된 복수의 레인들의 각각의 레인에 대한 순환 중복 검사 값을 출력하기 위해 적어도 제 1 순환 중복 검사 모듈로부터의 부분적인 순환 중복 검사 값 및 적어도 제 2 순환 중복 검사 모듈로부터의 부분적인 순환 중복 검사 값을 결합하기 위한 적어도 하나의 결합기를 더 포함하는 것인, 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  10. 제 6 항에 있어서,
    상기 순환 중복 검사 유닛들의 각각은,
    적어도 하나의 포워딩 모듈의 레인과 목적지 레인 간의 비트들의 수에 기초하여 적어도 하나의 부분적인 순환 중복 검사 값을 비트-포워딩(bit-forwarding)하기 위한 적어도 하나의 포워딩 모듈을 더 포함하는 것인 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  11. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    이전의 데이터 워드로부터 누적된 순환 중복 검사 값을 수신하기 위한 입력 포트; 또는
    다음 데이터 워드에 대한 누적된 순환 중복 검사 값을 출력하기 위한 출력 포트를 더 포함하는 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  12. 제 11 항에 있어서,
    상기 누적된 순환 중복 검사 값을 상기 순환 중복 검사 유닛들 중 적어도 하나 내에서 종료하는 패킷에 대한 적어도 하나의 순환 중복 검사 값과 결합하기 위한 적어도 하나의 결합기를 더 포함하고,
    상기 복수의 순환 중복 검사 유닛들에 의해 프로세싱되는 패킷들의 크기는 적어도 경로들의 각각의 경로 크기인 것인, 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  13. 제 1 항 내지 제 3 항 중 어느 한 항에 있어서,
    적어도 하나의 포워딩 유닛의 각각의 경로와 목적지 경로 간의 비트들의 수에 기초하여 적어도 하나의 순환 중복 검사 값을 비트-포워딩하기 위한 적어도 하나의 포워딩 유닛을 더 포함하는 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  14. 제 6 항에 있어서,
    패킷의 끝과 레인의 끝 간의 또는 패킷의 끝과 경로의 끝 간의 엠프티 비트들(empty bits)의 수에 기초하여 적어도 하나의 순환 중복 검사 값의 행렬 변환(matrix transformation)을 수행하기 위한 적어도 하나의 언롤(unroll) 유닛을 더 포함하는 데이터 패킷에 CRC를 첨부하기 위한 디바이스.
  15. 데이터 패킷에 CRC를 첨부하기 위한 방법으로서,
    데이터 워드를 복수의 경로들로 분할하는 단계로서, 상기 데이터 워드는 하나 이상의 패킷을 포함하는 것인, 분할하는 단계; 및
    상기 경로들의 각각을 병렬로 프로세싱하는 단계를 포함하고,
    각각의 경로에 대해, 상기 프로세싱하는 단계는,
    상기 경로 내에서 종료하는 패킷에 대한 순환 중복 검사 값을 계산하는 단계; 및
    상기 경로 내에서 시작하거나 진행중인 패킷에 대한 순환 중복 검사 값을 계산하는 단계를 포함하는 것인 데이터 패킷에 CRC를 첨부하기 위한 방법.
KR1020157028911A 2013-03-15 2014-03-14 모듈식 및 스케일러블 순환 중복 검사 계산 회로 KR102068384B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US13/841,574 2013-03-15
US13/841,574 US9350385B2 (en) 2013-03-15 2013-03-15 Modular and scalable cyclic redundancy check computation circuit
PCT/US2014/029554 WO2014144941A1 (en) 2013-03-15 2014-03-14 Modular and scalable cyclic redundancy check computation circuit

Publications (2)

Publication Number Publication Date
KR20150130494A KR20150130494A (ko) 2015-11-23
KR102068384B1 true KR102068384B1 (ko) 2020-01-20

Family

ID=50442744

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020157028911A KR102068384B1 (ko) 2013-03-15 2014-03-14 모듈식 및 스케일러블 순환 중복 검사 계산 회로

Country Status (6)

Country Link
US (1) US9350385B2 (ko)
EP (1) EP2974036B1 (ko)
JP (1) JP6220045B2 (ko)
KR (1) KR102068384B1 (ko)
CN (1) CN105103454B (ko)
WO (1) WO2014144941A1 (ko)

Families Citing this family (14)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US9542261B2 (en) * 2013-07-01 2017-01-10 Ixia Methods, systems, and computer readable media for multi-packet cyclic redundancy check engine
US9684580B2 (en) 2013-11-05 2017-06-20 Ixia Methods, systems, and computer readable media for efficient scrambling of data for line rate transmission in high speed communications networks
US9471416B2 (en) * 2014-02-28 2016-10-18 Cavium, Inc. Partitioned error code computation
US9787434B2 (en) * 2014-12-11 2017-10-10 Mediatek Inc. Cyclic redundancy check device and method
DE102015004580A1 (de) * 2015-04-14 2016-10-20 Airbus Defence and Space GmbH Übertragungsverfahren und Vorrichtungen zur Übertragung
CN105099466B (zh) * 2015-08-17 2018-04-17 中国航天科技集团公司第九研究院第七七一研究所 一种用于128位并行数据的crc校验矩阵生成方法
DE102017208826A1 (de) * 2017-05-24 2018-11-29 Wago Verwaltungsgesellschaft Mbh Eingebettete zyklische Redundanzprüfungswerte
US10812103B1 (en) 2018-02-23 2020-10-20 Xilinx, Inc. Cyclic redundancy check engine and method therefor
US10652162B2 (en) 2018-06-30 2020-05-12 Intel Corporation Scalable packet processing
IT201900007371A1 (it) * 2019-05-27 2020-11-27 St Microelectronics Srl Circuito di Cyclic Redundancy Check, dispositivo e procedimento corrispondenti
CN110377452A (zh) * 2019-07-19 2019-10-25 上海燧原智能科技有限公司 一种循环冗余校验数据的处理方法、循环冗余校验电路及存储介质
CN111082810B (zh) * 2020-01-07 2023-03-31 西安电子科技大学 一种基于fpga低开销并行循环冗余校验方法及应用
FR3108812B1 (fr) * 2020-03-30 2022-03-18 Kalray Circuit de calcul de CRC rapide utilisant un polynôme réducteur reconfigurable au vol
CN117271201B (zh) * 2023-11-22 2024-03-19 北京紫光芯能科技有限公司 循环冗余校验装置及循环冗余校验方法

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090282322A1 (en) 2007-07-18 2009-11-12 Foundry Networks, Inc. Techniques for segmented crc design in high speed networks

Family Cites Families (15)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP3269415B2 (ja) * 1997-01-22 2002-03-25 日本電気株式会社 Crc演算回路
US6029186A (en) 1998-01-20 2000-02-22 3Com Corporation High speed calculation of cyclical redundancy check sums
JP2001285076A (ja) * 2000-03-31 2001-10-12 Ando Electric Co Ltd Crc符号演算回路、及びcrc符号演算方法
US6810501B1 (en) * 2001-01-03 2004-10-26 Juniper Networks, Inc. Single cycle cyclic redundancy checker/generator
JP3546959B2 (ja) * 2001-05-31 2004-07-28 日本電気株式会社 Crc演算装置
JP3554715B2 (ja) * 2001-07-31 2004-08-18 アンリツ株式会社 誤り検出装置
CN1193294C (zh) * 2003-01-27 2005-03-16 西安电子科技大学 一种多通道多位并行计算crc码的方法
US7249306B2 (en) * 2004-02-20 2007-07-24 Nvidia Corporation System and method for generating 128-bit cyclic redundancy check values with 32-bit granularity
KR100645388B1 (ko) * 2005-11-30 2006-11-14 한국전자통신연구원 임의의 크기의 병렬 처리가 가능한 병렬 crc 생성 장치및 방법
CN101296053A (zh) * 2007-04-25 2008-10-29 财团法人工业技术研究院 计算循环冗余校验码之方法及系统
US8095846B2 (en) * 2007-06-08 2012-01-10 Cortina Systems, Inc. Data coding apparatus and methods
JP4831018B2 (ja) 2007-08-28 2011-12-07 日本電気株式会社 並列巡回符号生成装置および並列巡回符号検査装置
JP5550413B2 (ja) * 2010-03-29 2014-07-16 三菱電機株式会社 Crc演算回路
CN102571266B (zh) * 2011-01-04 2015-11-25 华为技术有限公司 一种传输块循环冗余校验的方法及装置
US8468439B2 (en) * 2011-06-02 2013-06-18 Nexus Technology, Inc. Speed-optimized computation of cyclic redundancy check codes

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090282322A1 (en) 2007-07-18 2009-11-12 Foundry Networks, Inc. Techniques for segmented crc design in high speed networks

Also Published As

Publication number Publication date
EP2974036A1 (en) 2016-01-20
US20140281844A1 (en) 2014-09-18
KR20150130494A (ko) 2015-11-23
JP2016518750A (ja) 2016-06-23
EP2974036B1 (en) 2018-05-09
WO2014144941A1 (en) 2014-09-18
US9350385B2 (en) 2016-05-24
CN105103454B (zh) 2019-03-29
JP6220045B2 (ja) 2017-10-25
CN105103454A (zh) 2015-11-25

Similar Documents

Publication Publication Date Title
KR102068384B1 (ko) 모듈식 및 스케일러블 순환 중복 검사 계산 회로
US8468439B2 (en) Speed-optimized computation of cyclic redundancy check codes
US7613991B1 (en) Method and apparatus for concurrent calculation of cyclic redundancy checks
KR101354288B1 (ko) 통신 시스템에서 에러 검출 방법 및 장치
US8271850B2 (en) Fast low-density parity-check code encoder
JP4764973B2 (ja) Crc値の算出装置
JP4831018B2 (ja) 並列巡回符号生成装置および並列巡回符号検査装置
US8976816B1 (en) Self-synchronous scrambler/descrambler and method for operating same
US10763895B2 (en) Circuitry and method for dual mode reed-solomon-forward error correction decoder
US7886210B2 (en) Apparatus for pipelined cyclic redundancy check circuit with multiple intermediate outputs
US8539326B1 (en) Method and implementation of cyclic redundancy check for wide databus
US7434150B1 (en) Methods, circuits, architectures, software and systems for determining a data transmission error and/or checking or confirming such error determinations
US9639416B1 (en) CRC circuits with extended cycles
US9246491B2 (en) Method and apparatus for performing pipelined operations on parallel input data with feedback
US9542261B2 (en) Methods, systems, and computer readable media for multi-packet cyclic redundancy check engine
US7320101B1 (en) Fast parallel calculation of cyclic redundancy checks
US11804855B2 (en) Pipelined forward error correction for vector signaling code channel
US10171108B1 (en) Parallel CRC calculation for multiple packets without requiring a shifter
US7225391B1 (en) Method and apparatus for parallel computation of linear block codes
CN105356966A (zh) 循环冗余校验实现方法、装置和网络设备
US11309994B2 (en) Highly parallel and scalable cyclic redundancy check
US9312883B1 (en) Hierarchical cyclic redundancy check circuitry
Murade et al. The Design and Implementation of a Programmable Cyclic Redundancy Check (CRC) Computation Circuit Architecture Using FPGA
EP1981171B1 (en) Apparatus and method for the parallel generation of cyclic redundancy check (CRC) codes
Qin et al. Implementation of 10-Gb/s parallel BCH decoder based on Virtex-5 FPGA

Legal Events

Date Code Title Description
A302 Request for accelerated examination
E902 Notification of reason for refusal
E701 Decision to grant or registration of patent right
GRNT Written decision to grant