KR20110069108A - 어드레스 생성 - Google Patents

어드레스 생성 Download PDF

Info

Publication number
KR20110069108A
KR20110069108A KR1020117008803A KR20117008803A KR20110069108A KR 20110069108 A KR20110069108 A KR 20110069108A KR 1020117008803 A KR1020117008803 A KR 1020117008803A KR 20117008803 A KR20117008803 A KR 20117008803A KR 20110069108 A KR20110069108 A KR 20110069108A
Authority
KR
South Korea
Prior art keywords
value
address
sum value
output
sequence
Prior art date
Application number
KR1020117008803A
Other languages
English (en)
Other versions
KR101263152B1 (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 KR20110069108A publication Critical patent/KR20110069108A/ko
Application granted granted Critical
Publication of KR101263152B1 publication Critical patent/KR101263152B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/345Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results
    • G06F9/3455Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes of multiple operands or results using stride
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/34Addressing or accessing the instruction operand or the result ; Formation of operand address; Addressing modes
    • G06F9/355Indexed addressing
    • G06F9/3552Indexed addressing using wraparound, e.g. modulo or circular addressing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/30Arrangements for executing machine instructions, e.g. instruction decode
    • G06F9/38Concurrent instruction execution, e.g. pipeline or look ahead
    • G06F9/3867Concurrent instruction execution, e.g. pipeline or look ahead using instruction pipelines
    • G06F9/3875Pipelining a single stage, e.g. superpipelining
    • 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/27Coding, 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 using interleaving techniques
    • H03M13/2739Permutation polynomial interleaver, e.g. quadratic permutation polynomial [QPP] interleaver and quadratic congruence interleaver

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Software Systems (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Mathematical Physics (AREA)
  • Probability & Statistics with Applications (AREA)
  • Error Detection And Correction (AREA)
  • Logic Circuits (AREA)
  • Executing Machine-Instructions (AREA)
  • Detection And Prevention Of Errors In Transmission (AREA)

Abstract

집적 회로(100)에 의한 어드레스 생성이 설명된다. 양태는 일반적으로 제1 및 제2 프로세싱 유닛들(310, 320)을 갖는 어드레스 생성기(220)에 관한 것이다. 제2 프로세싱 유닛(320)은 제1 프로세싱 유닛(310)으로부터의 스테이지 출력을 수신하도록 결합되고, 어드레스 출력을 제공하도록 구성된다. 스테이지 출력은 제1 범위에 있고, 어드레스 출력은 제2 범위에 있다. 제1 범위는 K의 블럭 크기에 대해 -K에서부터 -1까지이고, 제2 범위는 0에서부터 K-1까지이다.

Description

어드레스 생성{ADDRESS GENERATION}
기술분야 본 발명은 집적 회로 디바이스(IC)에 관한 것이다. 보다 구체적으로, 본 발명은 IC에 의한 어드레스 생성에 관한 것이다.
프로그램가능 논리 디바이스(Programmable logic device; "PLD")는 특정한 논리 기능을 수행하도록 프로그램될 수 있는 잘 알려져 있는 유형의 집적 회로이다. 하나의 유형의 PLD, 즉 필드 프로그램가능 게이트 어레이(field programmable gate array; "FPGA")는 일반적으로 프로그램가능 타일들의 어레이를 포함한다. 이러한 프로그램가능 타일들에는, 예컨대, 입력/출력 블럭(input/output block; "lOB"), 구성가능 논리 블럭(configurable logic block; "CLB"), 전용 랜덤 액세스 메모리 블럭(dedicated random access memory block; "BRAM"), 승산기, 디지털 신호 프로세싱 블럭(digital signal processing block; "DSP"), 프로세서, 클럭 관리기, 지연 로크 루프(delay lock loop; "DLL") 등이 포함된다. 본 명세서에서 이용된, "포함된"과 "포함하는"은 한정을 갖지않고 포함한다는 것을 의미한다.
각각의 프로그램가능 타일은 일반적으로 프로그램가능 상호접속부와 프로그램가능 로직 모두를 포함한다. 프로그램가능 상호접속부는 일반적으로 프로그램가능 상호접속점(programmable interconnect point; "PIP")에 의해 상호연결된 다양한 길이의 방대한 갯수의 상호접속 라인들을 포함한다. 프로그램가능 로직은 예컨대, 함수 생성기, 레지스터, 연산논리장치 등을 포함할 수 있는 프로그램가능 엘리먼트들을 이용하여 사용자 설계의 로직을 구현한다.
프로그램가능 상호접속부 및 프로그램가능 로직은 일반적으로 구성 데이터의 스트림을 내부 구성 메모리 셀들에 로딩시킴으로써 프로그램되며, 이 내부 구성 메모리 셀들은 프로그램가능 엘리먼트들 구성시키는 방법을 정의한다. 구성 데이터는 메모리(예컨대, 외부 PROM)으로부터 판독될 수 있거나, 또는 외부 디바이스에 의해 FPGA내로 기입될 수 있다. 그런 후 개별적인 메모리 셀들의 총체적 상태들은 FPGA의 기능을 결정한다.
또다른 유형의 PLD는 복합 프로그램가능 로직 디바이스(Complex Programmable Logic Device; CPLD)이다. CPLD는 상호접속 스위치 매트릭스에 의해 입력/출력(input/output; "I/O") 자원들에 함께 연결된 두 개 이상의 "기능 블럭들"을 포함한다. CPLD의 각각의 기능 블럭에는 프로그램가능 논리 어레이(PLA) 및 프로그램가능 어레이 로직(PAL) 디바이스들에서 이용된 것과 유사한 투 레벨(two-level) AND/OR 구조가 포함될 수 있다. CPLD에서, 구성 데이터는 일반적으로 비휘발성 메모리내 온 칩에 저장된다. 몇몇 CPLD들에서, 구성 데이터는 비휘발성 메모리내 온 칩에 저장되고, 그런 후 초기 구성(프로그래밍) 시퀀스의 일부로서 휘발성 메모리에 다운로딩된다.
이러한 프로그램가능 로직 디바이스들 모두의 경우, 디바이스의 기능은 이러한 제어 목적으로 디바이스에 제공된 데이터 비트들에 의해 제어될 수 있다. 데이터 비트들은 휘발성 메모리(예컨대, FPGA 및 몇몇의 CPLD와 같은, 정적 메모리 셀), 비휘발성 메모리(예컨대, 몇몇의 CPLD와 같은, FLASH 메모리), 또는 이와 다른 임의의 유형의 메모리 셀내에 저장될 수 있다.
다른 PLD들은 디바이스상에서 다양한 엘리먼트들을 프로그램가능하게 상호연결해주는, 금속층과 같은, 프로세싱층을 적용시킴으로써 프로그램된다. 이러한 PLD는 마스크 프로그램가능 디바이스로서 알려져 있다. PLD는 또한 예컨대 퓨즈 또는 안티퓨즈 기술을 이용하여 다른 방법들로 구현될 수 있다. 용어 "PLD" 및 "프로그램가능 로직 디바이스"에는, 비제한적인 예시로서, 이러한 예시적인 디바이스들이 포함될 수 있을 뿐만이 아니라, 오직 부분적으로 프로그램가능한 디바이스들이 망라될 수 있다. 예를 들어, 하나의 유형의 PLD에는 하드 코딩된 트랜지스터 로직을 프로그램가능하게 상호연결한 프로그램가능 스위치 패브릭 및 하드 코딩된 트랜지스터 로직의 조합이 포함된다.
통상적으로 터보 채널 코드가 데이터를 코딩하는데 이용된다. 터보 코드는 데이터를 수신된 순서와 인터리빙된 순서로 이용한다. 따라서 오리지날 데이터는 두 번 이용된다. 터보 채널 코드에 의해, 이것은 콘볼루션 코드를 의미한다. 데이터는 인터리버를 이용하여 섞여지고, 이와 같은 인터리버는 인코더, 디코더, 또는 인코더/디코더("코덱)의 일부일 수 있다.
데이터는 인코딩되기 전에 인터리빙되고, 그런 후 디코딩을 위해 디인터리빙될 수 있다. 인코딩 및 디코딩 중 어느 하나 또는 이 모두를 포함한, 몇몇 코딩에서, 시스템은 병렬 프로세싱을 통해 달성된 높은 처리량을 갖는다. 일반적으로 데이터는 인코더에 의해 인터리빙되고, 디코더에 의해 디인터리빙된다. 디코딩은 인코딩보다 더 연산집약적이기 때문에, 높은 총체적 시스템 처리량을 달성하기 위해, 디코더에서 디인터리빙은 병렬로 구현될 수 있어야 한다.
제3세대 파트너쉽 프로젝트(3rd Generation Partnership Project; "3GPP")에서, 무경쟁 어드레싱을 촉진시키기 위해 이차 순열 다항식(quadratic permutation polynomial; "QPP") 인터리버가 제안된 롱 텀 에볼루션(Long Term Evolution; "LTE") 3GPP 규정에서 호출된다. 3GPP LTE와 관련된 추가적인 세부사항들은 http://www.3gpp.org에서 찾을 수 있다. 구체적으로, 2008년 5월날짜의 3GPP TS 36.212 버젼 8.3.0 기술 규정은 섹션 5에서 채널 코딩, 멀티플렉싱, 및 인터리빙을 개시하고 있으며, 특히 서브 섹션들 5.1.3, 5.1.4.1.1, 및 5.2.2.8에서는 채널 인터리버를 설명하고 있다.
QPP 인터리버를 이용하는 것은 개별적인 데이터 블럭들이 다중 쓰레드로 분할되고 병렬로 프로세싱될 수 있도록 해준다. 만약 다수의 독립적인 데이터 블럭들 각각이 각자의 쓰레드들을 프로세싱하게 하였다면, 이와 같은 데이터 블럭들 모두의 이러한 쓰레드들을 병렬로 프로세싱하는 것은 QPP 인터리버를 교체하는 것을 수반한다. 따라서, QPP 인터리버를 구현하는데 이용된 인터리버 회로의 크기 및 성능은 인코딩 및 디코딩 터보 채널 코드들의 효율성 모두에 영향을 미친다는 것을 이해해야 한다.
어드레스 생성기의 실시예는 제1 프로세싱 유닛과, 상기 제1 프로세싱 유닛으로부터의 스테이지 출력을 수신하도록 결합되고, 어드레스 출력을 제공하도록 구성된 제2 프로세싱 유닛을 포함한다. 스테이지 출력은 K의 블럭 크기에 대해 -K 내지 -1의 제1 범위에 있고, 어드레스 출력은 0 내지 K-1의 제2 범위에 있다.
이 실시예에서, 어드레스 생성기는 인코더, 디코더, 및 코덱으로 구성된 그룹으로부터 선택된 코딩 디바이스의 일부일 수 있으며, 어드레스 생성기는 이차 순열 다항식 인터리버에 대한 어드레스 출력을 제공한다. 어드레스 출력은 다중 어드레스 시퀀스들을 포함할 수 있다. 제1 프로세싱 유닛 및 제2 프로세싱 유닛은 각각 제1 초기화값 또는 제2 초기화값으로 초기화될 수 있다. 제1 초기화값은 다중 어드레스 시퀀스들의 제1 시퀀스를 위한 것일 수 있고, 제2 초기화값은 다중 어드레스 시퀀스들의 제2 시퀀스를 위한 것일 수 있다. 어드레스 출력은 0 내지 K-1로부터의 어드레스 시퀀스의 적어도 일부분을 위한 것일 수 있다.
제1 프로세싱 유닛은 제1 초기화값 및 제2 초기화값으로 초기화될 수 있고; 제2 프로세싱 유닛은 제3 초기화값 및 제4 초기화값으로 초기화될 수 있다.
이 실시예에서, 제1 프로세싱 유닛은, 제1 가산기; 상기 제1 가산기에 결합된 제1 레지스터; 상기 제1 레지스터에 결합된 제1 멀티플렉서; 상기 제1 멀티플렉서 및 상기 제1 레지스터에 결합된 제1 감산기; 및 스테이지 출력을 출력하기 위해, 상기 제1 감산기에 결합된 제2 레지스터를 포함하며, 상기 스테이지 출력은 제1 가산기에 피드백된다. 제1 레지스터는 제1 시퀀스를 프로세싱할 수 있고, 이와 동시에 제2 레지스터는 제2 시퀀스를 프로세싱할 수 있다. 제2 프로세싱 유닛은, 스테이지 출력을 수신하기 위한 제2 가산기; 상기 제2 가산기에 결합된 제3 레지스터; 상기 제3 레지스터에 결합된 제2 멀티플렉서; 상기 제2 멀티플렉서 및 상기 제3 레지스터에 결합된 제3 가산기; 및 어드레스 출력을 출력하기 위해, 상기 제3 가산기에 결합된 제4 레지스터를 포함하며, 어드레스 출력은 제2 가산기의 입력에 피드백될 수 있다.
어드레스를 생성하기 위한 방법의 실시예는, 스텝 크기 및 블럭 크기를 획득하는 단계; 제1 초기화값 및 제2 초기화값을 획득하는 단계; 제1 합산값을 제공하기 위해 차분값에 스텝 크기를 가산하는 단계; 제1 합산값의 신호 비트에 응답하여 제1 합산값으로부터 널(null) 값 또는 블럭 크기 중 하나를 감산하여 또다른 차분값을 제공하는 단계 - 여기서, 상기 또다른 차분값은 K의 블럭 크기에 대해 -K 내지 -1의 범위에 있음 -; 제1 합산값 또는 또다른 차분값을 레지스터링(registering)하는 단계; 또다른 차분값을 스텝 크기에 가산시키기 위해 또다른 차분값을 피드백하는 단계를 포함한다.
이 실시예에서, 본 방법은, 또다른 차분값을 제3 합산값에 가산시킴으로써 제2 합산값을 생성하는 단계; 제2 합산값의 신호 비트에 응답하여 제2 합산값에 널(null) 값 또는 블럭 크기 중 하나를 가산시켜 또다른 제3 합산값을 제공하는 단계 - 여기서, 상기 또다른 제3 합산값은 0 내지 K-1의 범위에 있음 -; 제2 합산값 또는 또다른 제3 합산값을 레지스터링하는 단계; 제2 합산값를 제공하기 위한 가산 단계의 또다른 반복을 위해 또다른 제3 합산값를 피드백하는 단계를 더 포함한다. 제1 합산값 또는 또다른 차분값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 또다른 차분값을 레지스터링하는 단계를 포함할 수 있으며, 제2 합산값 또는 또다른 제3 합산값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 또다른 제3 합산값을 레지스터링하는 단계를 포함할 수 있다. 제1 합산값 또는 또다른 차분값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 제1 합산값을 레지스터링하는 단계를 포함할 수 있으며, 제2 합산값 또는 또다른 제3 합산값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 제2 합산값을 레지스터링하는 단계를 포함할 수 있다. 제1 합산값을 제공하기 위해 스텝 크기를 차분값에 가산하는 단계는 제3 합산값에 대한 또다른 차분값의 가산에 의해 제2 합산값을 제공하기 위한 가산 단계와 동시적으로 수행될 수 있다. 본 방법은 이차 순열 다항식 인터리빙에 대한 또다른 제3 합산값을 제공하는 단계를 더 포함한다.
집적 회로에 의한 어드레스 생성이 제공될 수 있다.
첨부 도면(들)은 본 발명의 하나 이상의 양태들에 따른 예시적인 실시예(들)을 도시하지만, 첨부 도면(들)은 본 발명을 도시된 실시예(들)로 한정시키는 것으로서 받아들여져서는 안되며, 단지 설명과 이해를 위한 것으로서 받아들여져야한다.
도 1은 본 발명의 하나 이상의 양태들이 구현될 수 있는 기둥형(columnar) 필드 프로그램가능 게이트 어레이("FPGA") 아키텍쳐의 예시적인 실시예를 도시하는 단순화된 블럭도이다.
도 2는 인터리버의 예시적인 실시예를 도시하는 블럭도이다.
도 3는 도 2의 인터리버의 어드레스 생성기의 예시적인 실시예를 도시하는 회로도이다.
도 4는 도 3의 어드레스 생성기의 어드레스 생성 흐름의 예시적인 실시예를 도시하는 흐름도이다.
도 5는 어드레스 생성 흐름의 예시적인 실시예를 도시하는 의사 코드 리스트이다.
이하의 설명에서는, 본 발명의 특정 실시예들의 보다 완전한 설명을 제공하기 위해 수 많은 특정 상세한 설명들이 기술된다. 하지만, 본 발명은 아래에서 주어진 모든 특정 상세한 설명들없이 실시될 수 있다는 것이 본 발명분야의 당업자에게 분명해져야한다. 다른 경우들에, 본 발명을 애매모호하게 하지 않도록 하기 위해, 잘 알려진 특징들은 상세한 설명에서는 기술되지 않았다. 용이한 설명을 위해, 여러 도면들에서 동일한 항목들을 가리키기 위해 동일한 번호 라벨들이 이용되지만, 대안적인 실시예들에서는 항목들이 달라질 수 있다.
상기한 바와 같이, 진보된 FPGA는 어레이내에 여러가지 상이한 유형들의 프로그램가능 로직 블럭들을 포함할 수 있다. 예를 들어, 도 1은 멀티 기가비트 트랜스시버(multi-gigabit transceiver; "MGT")(101), 구성가능 로직 블럭(configurable logic block; "CLB")(102), 랜덤 액세스 메모리 블럭(random access memory block; "BRAM")(103), 입력/출력 블럭(input/output block; "lOB")(104), 구성 및 클럭 로직(configuration and clocking logic; "CONFIG/CLOCKS")(105), 디지털 신호 프로세싱 블럭(digital signal processing block; "DSP")(106), (예컨대, 구성 포트 및 클럭 포트와 같은) 특수화된 입력/출력 블럭(input/output block; "I/O")(107), 및 디지털 클럭 관리기, 아날로그-디지털 컨버터, 시스템 모니터링 로직 등과 같은 기타 프로그램가능 로직(108)을 포함한 방대한 갯수의 상이한 프로그램가능 타일들을 포함한 FPGA 아키텍쳐(100)를 도시한다. 몇몇의 FPGA는 또한 전용 프로세서 블럭("PROC")(110)을 포함한다.
몇몇의 FPGA에서, 각각의 프로그램가능 타일에는 각각의 인접한 타일내의 대응하는 상호접속 엘리먼트에 대한 표준화된 접속부들을 갖는 프로그램가능 상호접속 엘리먼트("INT")(111)가 포함된다. 그러므로, 취해진 프로그램가능 상호접속 엘리먼트들은 도시된 FPGA에 대한 프로그램가능 상호접속 구조를 함께 구현한다. 도 1의 상단부에 포함된 예시들에 의해 도시된 바와 같이, 프로그램가능 상호접속 엘리먼트(111)는 또한 동일 타일내의 프로그램가능 로직 엘리먼트에 대한 접속부들을 포함한다.
예를 들어, CLB(102)는 사용자 로직을 구현하도록 프로그램될 수 있는 구성가능 로직 엘리먼트("CLE")(112) 및 단일 프로그램가능 상호접속 엘리먼트("INT")(111)를 포함할 수 있다. BRAM(103)은 하나 이상의 프로그램가능 상호접속 엘리먼트들에 더하여 BRAM 로직 엘리먼트("BRL")(113)를 포함할 수 있다. 일반적으로, 타일내에 포함된 상호접속 엘리먼트들의 갯수는 타일의 높이에 좌우된다. 도시된 실시예에서, BRAM 타일은 다섯 개의 CLB와 동일한 높이를 가지지만, 다른 갯수들(예컨대, 네 개)이 또한 이용될 수 있다. DSP 타일(106)은 적절한 갯수의 프로그램가능 상호접속 엘리먼트들에 더하여 DSP 로직 엘리먼트("DSPL")(114)를 포함할 수 있다. IOB(104)는, 예컨대 프로그램가능 상호접속 엘리먼트들(111)의 하나의 인스턴스에 더하여 입력/출력 로직 엘리먼트("IOL")(115)의 두 개의 인스턴스를 포함할 수 있다. 본 발명분야의 당업자에게 자명한 바와 같이, 일반적으로 I/O 로직 엘리먼트(115)에 연결된 실제의 I/O 패드들은 입력/출력 로직 엘리먼트(115)의 영역으로 한정되지 않는다.
도시된 실시예에서, (도 1에서 도시된) 다이의 중심 근처의 기둥형 영역은 구성 로직, 클럭 로직, 및 기타 제어 로직을 위해 이용된다. 이러한 컬럼(column)으로부터 연장하는 가로형 영역(109)은 FPGA의 폭에 걸쳐 클럭 및 구성 신호들을 분배하는데 이용된다.
도 1에서 도시된 아키텍쳐를 활용한 몇몇의 FPGA들은 FPGA의 대부분을 구성하는 정규의 기둥형 구조를 분열시키는 추가적인 로직 블럭들을 포함한다. 추가적인 로직 블럭들은 프로그램가능 블럭들 및/또는 전용 로직일 수 있다. 예를 들어, 프로세서 블럭(110)은 CLB 및 BRAM의 여러 컬럼들에 뻗쳐있다.
도 1은 단지 예시적인 FPGA 아키텍쳐를 도시하려고 의도한 것임을 주목하라. 예를 들어, 컬럼내의 로직 블럭들의 갯수, 컬럼들의 상대적 폭, 컬럼들의 갯수 및 배열, 컬럼들내에 포함된 로직 블럭들의 유형, 로직 블럭들의 상대적 크기, 및 도 1의 상단부에 포함된 상호접속/로직 구현부들은 단순한 예시에 불과하다. 예를 들어, 실제의 FPGA에서는, 일반적으로 사용자 로직의 효율적인 구현을 촉진시키기 위해, CLB가 나타나는 곳이라면 어디라도 하나 보다 많은 인접 CLB 컬럼이 포함되지만, 인접 CLB 컬럼들의 갯수는 FPGA의 총체적인 크기에 따라 달라진다.
전술한 바와 같이, QPP 인터리버는 LTE 3GPP 규정에서 규정되어 있으며, 이와 같은 QPP 인터리버는 이차 등식 모듈로(modulo) 블럭 크기, K로서 공식화될 수 있다. 규정된 QPP 인터리빙 프로세스의 직접적 구현은 복잡한 승산 연산과 복잡한 모듈로 연산들을 수반할 것인데, 이것은 하드웨어로 구현하기에는 매우 비효율적이다. 보다 효율적인 하드웨어 구현이, "Address Generation for Quadratic Permutation Polynomial Interleaving"의 제목으로 2008년 3월 31일에 출원된, 동시출원중인 Ben J. Jones 등에 의한 미국 특허 출원 제12/059,731호(변호사 관리번호 X-2726 US)[이하에서는 "Jones"로서 칭한다]에서 설명되어 있다. Jones는 가산기, 감산기, 및 멀티플렉서와 같은, 선택 회로를 이용하여 구현될 수 있는 회로를 생산하기 위해 이차 공식이 어떻게 감축될 수 있는지를 도시하고 설명하고 있다. 추가적인 상세한 설명에서 후술하는 바와 같이, Jones와 관련된 선택 연산들을 제거하고 Jones의 가산기와 감산기의 갯수를 감축시킴으로써 인터리빙용 어드레스 생성을 위한 훨씬 더 단순화된 회로가 획득될 수 있다. 뿐만 아니라, 이와 같은 회로의 감축은 이어서 Jones와 비교하여 레지스터 카운트를 감축시키되, 아래의 설명으로부터 이해될 바와 같이, 이와 같은 단순화된 어드레스 생성기는 Jones의 어드레스 생성기와 동일한 성능를 갖거나 이에 필적한 성능을 갖는다. Jones와 비교한 또다른 감축은 제1 스테이지와 제2 스테이지들간의 레지스터들의 제거이며, 이것은 아래의 추가적인 상세 설명에서 설명되는 바와 같이 초기화 값들이 동시적으로 적용될 수 있기 때문에, 제어 로직이 한층 단순화될 수 있도록 해준다.
아래의 설명은 LTE 3GPP QPP 인터리버 및 이를 위한 어드레스 시퀀스의 용어로 설명되지만, 다른 어드레스 시퀀스들이 이용될 수 있다는 것을 이해해야 한다. LTE 3GPP QPP 인터리버는,
[수학식 1]
Figure pct00001
에 의해 정의된 어드레스 시퀀스를 가지며, 여기서 f1과 f2는 다항식의 계수들이며, x는 0부터 K-1까지의 선형 시퀀스에서의 증분이며, K는 블럭 크기이다. x번째 인터리빙된 어드레스는 [수학식 1]을 이용함으로써 획득될 수 있으며, 여기서 f1과 f2는 임의의 정수 블럭 크기, K에 대한 고정된 계수들이다. 따라서, x의 증분에 대한 어드레스들의 시퀀스는 x에 대한 교환된 순서로 0부터 K-1까지이다. 시퀀스가 0에서 K-1까지 진행하는 것으로서 설명되지만, 시퀀스는 0에서 시작할 필요가 없으며, 항상 K-1까지 갈 필요는 없다는 것, 즉 모든 K 증분들에 대한 시퀀스의 각각의 선형 증분을 처음부터 끝까지 밟을 필요가 없다는 것을 이해해야 한다. 뿐만 아니라, 시퀀스를 생성하기 위한 선형 증분을 스킵하기 위한 스킵 값이 존재할 수 있다. 다시, 아래의 추가적인 상세한 설명에서 설명되는 바와 같이 데이터 블럭은 병렬로 프로세싱하기 위한 다중 쓰레드들 또는 스트림들로 분해될 수 있다는 것을 알아야 한다.
Jones에서 나타난 바와 같이, [수학식 1]의 제1 유도식은,
[수학식 2]
Figure pct00002
이며, [수학식 1]의 제2 유도식은,
[수학식 3]
Figure pct00003
이다.
[수학식 2]와 [수학식 3]에서, n은 0보다 큰 임의의 정수값일 수 있는 스킵 값이다. 따라서, 예를 들어, 만약 n이 1과 동일하면, 스킵은 없으며, 0, 1 , 2,...,에서부터, K-1보다 클 수 있는 몇몇의 숫자까지의 시퀀스의 각각의 선형 증분이 이러한 시퀀스를 위한 많아야 K개의 인터리빙된 어드레스들을 제공하기 위해 프로세싱된다. 따라서, 스킵 값, n은 생성된 인터리빙된 어드레스 시퀀스에서의 보폭 또는 점프를 결정하는데 이용될 수 있다.
다시, n이 1로 설정될 때에는, K개의 어드레스들의 완전한 시퀀스가 생성될 수 있지만, 만약 n이 1보다 큰 정수값으로 설정되면, 시퀀스의 어드레스들의 서브세트가 생성될 수 있다. 예를 들어, 만약 n이 2와 동일하게 설정되면, 0부터 시작하여, 시퀀스내의 어드레스가 두 개마다 한번꼴로(즉, 0, 2, 4,..., K-2) 생성될 수 있다. [수학식 2]와 [수학식 3]에서의 연속적인 항들간의 차이는 각각 선형 함수이고 상수이기 때문에, 시퀀스의 어드레스들을 생성하기 위한, 추가적인 상세 설명에서 아래에서 설명되는 바와 같이, 회로는 단지 가산, 감산, 및 선택 연산들을 이용하여 구현될 수 있다.
추가적으로, 파이프라인화 다중 시퀀스들, 즉 다중 쓰레드들 또는 스트림들(여기서, 다중 스트림들 서로가 프로세싱된다)을 위해, 레지스터링(registering) 연산과 같은, 임시적인 저장 연산이 추가될 수 있다. 따라서, 아래의 설명으로부터 이해되는 바와 같이, 인터리빙된 어드레스들을 생성하기 위한 처리량을 높이기 위해 어드레스 생성기의 회로 구현에서 다중 페이즈 또는 시퀀스가 파이프라인화될 수 있다. 이와 달리, 터보 코드 프로세싱 블럭들의 병렬적 성질에 따라, 데이터의 단일 또는 다중 블럭들의 여러 쓰레드들을 위한 인터리빙된 어드레스 시퀀스들을 교호적 방식으로 생성하는데 파이프라인화가 이용될 수 있다. 따라서, 수 많은 상이한 시퀀스들이 점들, 즉 x에 대한 수 많은 상이한 시작점들에서 시작하며, 및/또는 다양한 데이터 블럭들에 대해 스킵 값들, n이 지원될 수 있다는 것을 이해해야 한다. 초기화 값들은, 시퀀스를 위한 어드레스 생성의 초기화를 위해 미리결정될 수 있고 메모리에 저장될 수 있다.
도 2는 인터리버(200)의 예시적인 실시예를 도시하는 블럭도이다. 인터리버(200)는 디코더, 인코더, 또는 코덱의 일부일 수 있다. 보다 구체적으로, 인터리버(200)는 QPP 인터리빙을 위한 터보 채널 코드와 같은, 컨볼루션 코드와 연관될 수 있다. 블럭 크기(210)가 저장소(210)에 입력될 수 있고, 저장소(210)는 인터리버(200)의 일부이거나 또는 인터리버(200)로부터 분리될 수 있다. 저장소(210)는 룩업 테이블, 랜덤 액세스 메모리, 또는 다른 형태의 저장소일 수 있다. 추가적으로, 블럭 크기(201)는 어드레스 생성기(220)에 입력될 수 있다. 저장소(210)로의 또다른 입력은 스킵 값(202)일 수 있다. 블럭 크기(201)와 스킵 값(202)을 통해, 어드레스 생성기(220)에 제공하기 위한 초기화 값들(203) 및 스텝 크기(204)가 저장소(210)로부터 획득될 수 있다. 어드레스 생성기(220)는 어드레스들의 하나 이상의 시퀀스들을 제공하기 위해 어드레스들(221)을 생성한다.
도 3은 도 2의 어드레스 생성기(220)의 실시예를 도시하는 회로도이다. 어드레스 생성기(220)는 제1 스테이지 어드레스 엔진(310)과 제2 스테이지 어드레스 엔진(320)을 포함한다. 제1 스테이지 어드레스 엔진(310)은 어드레스 생성을 위한 초기 스테이지이며, 스테이지 출력(302)을 생성한다. 어드레스들(221)의 적어도 하나의 시퀀스를 생성하기 위해 스테이지 출력(302)은 제1 스테이지 어드레스 엔진(320)에 제공된다.
제1 스테이지 어드레스 엔진(310)은 가산기(311), 감산기(312), 및 멀티플렉서(313)와 같은, 선택 회로를 포함한다. 이 예시적인 실시예의 경우에서, 제1 스테이지 어드레스 엔진(310)은 레지스터들(314, 315)을 포함한다. 단일 스트림/시퀀스의 경우, 오직 하나의 레지스터, 즉 레지스터들(314, 315) 중 어느 하나의 레지스터가 제1 스테이지 어드레스 엔진(310)의 피드백 루프내에 구현될 수 있다. 반복 동안의 동일한 시점에서 스테이지 출력(302)으로부터 가산기(321)로의 입력에서 특정한 스트림/시퀀스 값들이 일치할 것을 보장하기 위해, 제1 스테이지 어드레스 엔진(310)에서의 레지스터들의 셋업은 제2 스테이지 어드레스 엔진(320)의 레지스터들의 셋업을 미러링(mirror)한다. 하지만, 처리량을 높이기 위해 파이프라인화가 이용될 수 있다. 추가적으로, 레지스터들(314, 315) 각각을 적어도 하나씩 가짐으로써, 두 개의 어드레스들의 시퀀스들, 즉 두 개의 쓰레드들 또는 스트림들이 함께 생성될 수 있다. 뿐만 아니라, 레지스터들(314, 315) 각각이 단하나씩있는 것으로 예시로서 도시되지만, 레지스터들(314, 315) 각각은 하나 보다 많은 갯수로 구현될 수 있다는 것을 알아야 한다. 예를 들어, 각각의 레지스터들(314, 315)이 두개씩 존재한다면, 네 개만큼의 쓰레드들 또는 스트림들의 시퀀스가 파이프라인된 동시성을 갖고 생성될 수 있다. 교호적인 클럭 싸이클들로 스트림들이 생성된다는 것을 이해해야 한다. 뿐만 아니라, 교호적인 엣지들상에서 스트림들을 생성하기 위해 엣지 트리거링 플립 플롭이 이용될 수 있다. 비제한적인 예시를 통한 명확화를 목적으로, 각각의 레지스터들(314, 315)은 단하나씩 존재하는 것으로 가정한다.
전술한 바와 같이, 초기화 값들(203)은 저장소(210)로부터 획득될 수 있다. 이러한 초기화 값들은 초기화 값 l(x)(203-1)과 초기화 값 A(x)(203-2)으로서 표시된다.
제2 스테이지 어드레스 엔진(320)은 가산기(321), 감산기(322), 및 멀티플렉서(323)와 같은, 선택 회로를 포함한다. 추가적으로, 만약 파이프라인화가 이용되면, 제2 스테이지 어드레스 엔진(320)은 적어도 하나의 레지스터(324)와 적어도 하나의 레지스터(325)를 포함할 수 있다. 다시, 레지스터들(314, 315)과 관련하여 전술한 바와 같이, 적어도 하나의 레지스터들(324, 325)이 존재할 수 있거나, 레지스터들(324, 325) 각각이 여러개씩 존재할 수 있다. 다시, 하지만, 비제한적인 예시를 통한 명확화를 목적으로, 각각의 레지스터들(324, 325)은 하나씩 존재하는 것으로 가정한다. 이 점에서, 어드레스 엔진들(310, 320)은 세 개의 가산기들, 하나의 감산기, 및 두 개의 선택 회로들로 구현될 수 있다는 것을 이해해야 한다.
초기화 값 l(x)(203-1)은 로딩가능 가산기(311)에 대한 로딩가능 입력으로서 제공된다. 레지스터들(314, 315, 324, 325) 각각의 클럭부에 제공되는, 클럭 신호(301)의 초기 클럭 싸이클상에서, 가산기(311)의 출력은 시퀀스를 위한 자신의 초기 유효 출력으로서 초기화 값 l(x)(203-1)을 이용한다. 마찬가지로, 초기 시퀀스 싸이클 동안에, 로딩가능 가산기(321)에 대한 로딩가능 입력으로서 제공되는, 초기화 값 A(x)(203-2)이 초기 유효 출력을 위해 이용된다.
스텝 크기(204)가 가산기(311)에 대한 데이터 입력으로서 제공된다. 가산기(311)에 대한 또다른 데이터 입력은 스테이지 출력(302)이며, 이것은 피드백 입력으로서 제공된다. 따라서, 초기화 값 l(x)(203-1)이 이와 같은 가산기로부터 출력된 후, 스텝 크기(204)가 출력용 초기 스테이지 출력(302)과 함께 가산될 수 있다. 보다 구체적으로, 도 3의 예시적인 실시예의 경우에서, 레지스터들(314, 315)이 존재하기 때문에, 가산기(311)에서 인가된 제1 초기화 값은, 두 개의 클럭 싸이클들 이후 때(즉, 제3 싸이클)(이 때, 스텝 값(204)이 가산기(311)에 가산되어야 함)까지 피드백(302)으로서 가산기(311)에 피드백되지 않는다. 두번째 싸이클에서, 피드백 루프내에 두 개의 레지스터들/파이프 스테이지들이 존재할 때에 지원되는 두번째 시퀀스/스트림에 대해 추가적인 초기화 값이 인가될 수 있다.
가산기(311)의 출력은 레지스터(314)의 데이터 입력 포트에 제공된다. 가산기(314)의 출력은 감산기(312)의 플러스 포트(즉, + 포드)에 제공된다. 추가적으로, 최상위 비트("MSB")(316)와 같은, 신호 비트가 멀티플렉서(313)의 제어 선택 신호로서 레지스터(314)의 출력으로부터 획득된다. 레지스터(314)로부터의 MSB 출력은 또한 감산기(312)의 플러스 포트에 제공된다는 것을 이해해야 한다.
멀티플렉서(313)의 논리 0 포트는 블럭 크기(201)를 수신하도록 결합되고, 멀티플렉서(313)의 논리 1 포트는 논리 0(330)을 수신하도록 결합된다. 만약 MSB 비트(316)가 음의 값을 나타내는 논리 1이면, 멀티플렉서(313)는 논리 0(330), 즉 널(null) 값을 출력한다. 하지만, 만약 MSB 비트(316)가, 레지스터(314)의 출력이 양의 값이라는 것을 나타내는 논리 0이라면, 멀티플렉서(313)는 블럭 크기(201)를 출력한다.
멀티플렉서(313)의 출력은, 감산기(312)의 플러스 포트에 대한 데이터 입력으로부터 감산하기 위해, 감산기(312)의 마이너스 포트(즉, - 포트)에 제공된다. 이와 달리, 조합형태의 멀티플렉서(313)와 감산기(312)가 로딩가능 가산기로서 간주될 수 있으며, 여기서는 로딩될 값은 감산처리될 후보이며(즉, 플러스 입력 포트에 연결됨), 로딩 제어 비트는 이 값의 MSB이다. 따라서, 만약 레지스터(314)로부터의 출력이 양이면, 블럭 크기(201), 즉 -K의 감산은 감산기(312)의 출력이 음이 되도록 하며, 즉 -k 내지 -1의 범위에 있도록 한다. 만약 레지스터(314)의 출력이 이미 음이면, 이와 같은 출력에 논리 0(330)을 가산시키는 것은 아무런 효과가 없으며, 이에 따라 감산기(312)의 출력은 레지스터(314)의 음의 출력이다. 따라서, 감산기(312)의 출력은 레지스터(315)의 데이터 포트로의 입력에 대해 -K 내지 -1의 범위에 있다. 레지스터(315)의 출력은 스테이지 출력(302)이다. 따라서, 스테이지 출력(302)은 K의 블럭 크기(201)에 대해 -K 내지 -1의 범위에 있을 것이다. 이에 따라, 제1 스테이지 어드레스 엔진(310)은 범위를 음의 값들, 즉 -K의 이동으로 쉬프트시킨다.
제1 스테이지 어드레스 엔진(310)으로부터의 스테이지 출력(302)은 어드레스(221)와의 가산을 위해 가산기(321)의 데이터 포트에 제공된다. 어드레스(221)는 레지스터(325)로부터의 어드레스 출력이며, 이것은 피드백 어드레스로서 제공된다. 연산 동안에 어드레스들(221)의 시퀀스는 다수의 클럭 싸이클들로부터 생성된다는 것을 이해해야 한다. 유효 데이터가 어드레스 생성기(220)로부터 출력되는 클럭 싸이클상에서, 어드레스(221)는 어드레스 시퀀스의 일부를 형성하는 어드레스 출력을 구성한다.
초기 초기화 값 A(x)(203-2)를 출력한 후, 로딩가능 가산기(321)는 피드백 어드레스(221)와 스테이지 출력(302)의 합산값을 출력할 수 있다. 다음 싸이클상에서, 로딩가능 가산기(311)를 언급하면서 이전에 설명했던, 또다른 시퀀스를 위한 또다른 초기화 값이 출력되는데, 여기서는 명료화를 위해 이에 대한 설명을 반복하지 않는다. 로딩가능 가산기(321)로부터의 출력은 레지스터(324)의 데이터 포트에 제공된다. 레지스터(324)의 출력은 가산기(322)의 데이터 포트에 제공되고, MSB 비트(326)와 같은 신호 비트, 레지스터(324)로부터의 출력은 제어 선택 신호로서 멀티플렉서(323)에 제공될 뿐만이 아니라 가산기(322)의 데이터 포트에 제공된다.
멀티플렉서(323)의 논리 0 포트는 논리 0(330)을 수신하도록 결합되고, 멀티플렉서(323)의 논리 1 포트는 블럭 크기(201)를 수신하도록 결합된다. MSB 비트(326)가 논리 0인 경우, 즉 레지스터(324)의 출력이 양이라는 것을 나타내는 경우, 멀티플렉서(323)는 출력을 위한 논리 0(330)을 선택한다. 하지만, 만약 MSB 비트(326)가, 레지스터(324)의 출력이 음의 값이라는 것을 나타내는 논리 1이라면, 멀티플렉서(323)는 출력을 위한 블럭 크기(201)를 선택한다.
멀티플렉서(323)의 출력은 가산기(322)의 데이터 입력 포트에 제공된다. 가산기(322)는 레지스터(324)로부터의 출력을 멀티플렉서(323)로부터의 출력과 함께 가산한다. 이에 따라, 가산기(322)의 출력은 양의 범위, 즉 0부터 K-1의 범위에 있다는 것을 이해해야 한다. 다시 말하면, K를 어드레스 엔진(320)에서 다시 가산시킴으로써, 어드레스 엔진(310)에서 -K만큼의 값들의 쉬프트 또는 이동은 효과적으로 중립화되며, 즉 계산에 대해 어떠한 순 영향을 미치지 않는다.
0 내지 K-1의 범위에 있는 가산기(322)의 출력은 레지스터(325)의 데이터 입력 포트에 제공된다. 레지스터(325)의 출력은 어드레스(221)이며, 이것은 가산기(321)에 피드백되고, 어드레스 시퀀스의 일부로서 이용된다.
제1 스테이지 어드레스 엔진(310)과 제2 스테이지 어드레스 엔진(320)은 도 1의 FPGA(100)의 각각의 DSP(106) 및 CLB(102)로 구현될 수 있다. 이와 달리, 오직 CLB(102)만이 엔진들(310, 320)을 구현하는데 이용될 수 있다. 어드레스 엔진 스테이지를 CLB 및 DSP 각각 하나씩 이용하여 구현시킴으로써 다중 어드레스 엔진들이 병렬로 동작하도록 구현하는 것이 촉진되며, 따라서 각각의 어드레스 엔진 스테이지에 의해 극소수의 자원들이 소모된다. 다시 말하면, 극소수의 회로 컴포넌트들이 어드레스 생성기(220)를 제공하는데 이용될 수 있기 때문에, FPGA내에 다중 어드레스 생성기들을 구현할 기회가 많아진다.
도 3의 예시적인 실시예에서, 어드레스 엔진들(310, 320)은 직렬로 결합되고 이에 따라 순차적 동작을 갖는다. 하지만, 시퀀스를 프로세싱하기 위해 어드레스 엔진들(310, 320)은 동시적으로 동작한다는 것을 이해해야 한다. 따라서, 유효 어드레스(221)에 앞서 네 개의 싸이클 레이턴시를 갖기 보다는, 레지스터들(314, 315, 324, 325)을 갖는 예시적인 실시예의 경우에는 어드레스 시퀀스(321)의 일부로서 출력되기 때문에, 오직 두 개의 싸이클 레이턴시가 존재한다. 이것은 도 4를 참조하여 추가적인 상세한 설명에서 설명되는데, 도 4에서는 도 3의 어드레스 생성기(220)의 어드레스 생성 흐름(400)의 예시적인 실시예를 도시하는 흐름도가 도시된다. 도 3과 도 4를 동시에 참조하여 흐름도(400)를 보다 자세하게 설명한다.
단계 401에서, 블럭 크기(201)와 스킵 크기(202)와 같은, 블럭 크기와 스킵 크기가 획득된다. 단계 402에서, 단계 401에서 획득된 값들에 응답하여, 초기화 값 l(x)(203-1)과, 초기화 값 A(x)(203-2)과 같은 초기화 값들, 및 스텝 크기(204)와 같은 스텝 크기가 저장소로부터 획득된다.
단계 403에서, 전술한 바와 같이, 가산기(311)에 의해, 합산값이 생성된다. 단계 404에서, 전술한 바와 같이, 가산기(321)에 의해, 합산값이 생성된다. 단계들(403, 404)에서 생성된 합산값들은 동시적으로, 즉 병렬적으로 생성된다는 것을 이해해야 한다.
단계 405에서, 단계 403에서 생성된 합산값은 감산기(312)에 의해, 차분값을 생성하는데 이용된다. 다시, 이러한 차분값은 -K 내지 -1의 범위에 있다. 단계 405에서 생성된 차분값은 다음 싸이클상의 단계 404에서 또다른 합산값을 생성하기 위해 제공된다.
단계 406에서, 단계 404에서 생성된 합산값을 이용하여, 가산기(322)에 의해, 합산값이 생성된다. 다시, 단계 405에서의 차분값의 생성 및 단계 406에서의 합산값의 생성은 도 3을 참조하여 이전에 설명되었으며, 여기서는 명료화를 위해 이에 대한 설명을 반복하지 않는다. 다시, 단계 406에서 생성된 합산값의 범위는 0 내지 K-1이다. 뿐만 아니라, 어드레스(221)와 같은, 어드레스가 단계 406에서 출력될 수 있다.
시퀀스가 완료되지 않은 경우, 단계 406에서의 어드레스 출력은 단계 404에서의 또다른 합산값을 생성하기 위해 피드백된다. 또한, 시퀀스가 완료되지 않은 경우, 단계 405에서 생성된 차분값은 단계 403에서의 또다른 합산값을 생성하기 위해 피드백된다.
단계 406에서의 출력으로부터, 단계 407에서 시퀀스가 증분될 것인지 여부를 결정할 수 있다. 하드웨어 구현의 경우, 클럭 신호(301)를 수신하도록 결합된 카운터(미도시)는 스텝 크기(204) 및/또는 블럭 크기(201)에 응답하여 선형 시퀀스에 대해 사전세팅될 수 있다. 하지만, 펌웨어를 비롯한, 소프트웨어로의 구현의 경우, 결정이 행해질 수 있다. 만약 시퀀스가 증분될 경우라면, 단계 408에서 시퀀스가 증분되는데, 즉 후술하는 바와 같이 다음 클럭 싸이클상에서 단계 403 및 단계 404에서 다른 합산값들을 생성하기 위해, x 또는 i가 증분된다. 이에 따라, 연산들의 시퀀스는 하드웨어, 소프트웨어, 또는 하드웨어와 소프트웨어의 조합으로 구현될 수 있다.
만약 단계 407에서, 시퀀스가 증분되지 않을 것이라고 결정된 경우, 단계 409에서, 프로세싱될 또다른 시퀀스가 존재하는지 여부를 결정할 수 있다. 만약 단계 409에서, 또다른 시퀀스가 프로세싱될 것이라고 결정된 경우, 흐름(400)은 이러한 또다른 시퀀스를 위한 블럭 크기와 스킵 크기를 획득하기 위해 단계 401로 복귀한다. 만약 프로세싱될 추가적인 시퀀스가 존재하지 않으면, 흐름(400)은 단계 499에서 종료한다.
도 5는 어드레스 생성 흐름(500)의 예시적인 실시예를 도시하는 의사 코드 리스트이다. 루프(502)의 경우, 단계 501에서 일반적으로 표시된 바와 같이 값들이 세팅되고 초기화된다.
도 5의 경우, 터보 코드를 위해 블럭 크기 K는 256과 동일하며, 스킵 값 n은 2와 동일한 것으로 가정하는데, 즉 단계 503에서 블럭 크기와 스킵 크기를 세팅하기 위해 두 개의 페이즈들 또는 두 개의 시퀀스들이 동시적으로 프로세싱된다. 이 예시적인 실시예의 경우에서, 시퀀스들은 홀수 시퀀스와 짝수 시퀀스이다. 짝수 시퀀스의 경우, x는 0에서 시작하고, 홀수 시퀀스의 경우, x는 1에서 시작한다. 이에 따라, 짝수 시퀀스의 경우, 초기화 값("A_cand[x]")[203-2(짝수)]는 x가 0과 동일한 [수학식 1]이다. 뿐만 아니라, 짝수 시퀀스의 경우, 초기화 값("l_cand[x]")[203-1(짝수)]는 x가 0과 동일하도록 세팅된 [수학식 2]이다. 짝수 시퀀스에서, f1과 f2 계수들은 상수들이기 때문에, 양쪽 초기화 값들(203-1, 203-2)은 각각의 상수들로 감축된다는 것을 이해해야 한다.
홀수 시퀀스의 경우, x는 1에서 시작하고, 이에 따라 [수학식 1]에서 1과 동일한 x를 감산하는 것은 초기화 값[203-2(홀수)]을 산출시키고, [수학식 2]에서 1과 동일한 x를 감산하는 것은 초기화 값[203-1(홀수)]을 산출시킨다. 마찬가지로, 홀수 시퀀스의 경우 초기화 값들(203-1, 203-2)은 각각 상수들로 감축된다는 것을 이해해야 한다.
[수학식 3]에서 나타난 바와 같이 스텝 크기(204)는 x에 의존하지 않으며, 이에 따라 스텝 크기("s")(204)는 상수값이다. 홀수 및 짝수 시퀀스들의 경우에서 초기화 값들(203-1, 203-2)과 관련된 상수값들뿐만이 아니라 스텝 크기(204)에 의해, 이것들은 데이터 블럭의 하나 이상의 시퀀스들에 대한 상수들이라는 것을 이해해야 한다. 이 예시에서는, 두 개의 쓰레드들 또는 스트림들이 존재하지만, 두 개 보다 많은 쓰레드들이 구현될 수 있다. x가 선형 시퀀스의 일부로서 증분함에 따라, 초기화 어드레스 후보("A_cand[x]") 및 증분 후보("l_cand[x]")는 x에서의 각각의 증가마다 진행한다. 따라서, 첫번째 페이즈에서, 즉 이 예시에서 짝수 시퀀스에서, x는 시퀀스 0, 2, 4,...,K-2를 가지며, 이 예시적인 실시예의 경우, 두번째 페이즈에서는, x는 1, 3, 5,...,K-1의 진행을 갖는다.
어드레스 후보는 시퀀스에 대한 첫번째 반복에서 양이며, 이에 따라 어드레스 후보는 바로 출력될 수 있다. 뿐만 아니라, 증분 후보는 시퀀스에 대한 첫번째 반복에서 양이며, 이에 따라 이로부터 블럭 크기를 감산한다. 따라서, x가 0과 동일한 경우, 짝수 시퀀스에서의 첫번째 어드레스 값 출력은 초기화 값[203-2(짝수)], 즉 0이며, 이와 같은 첫번째 반복에서의 초기 스테이지 출력은 초기화 값[203-1(짝수)] 마이너스 K이다. 첫번째 반복에 의해, 전술한 바와 같이 일부의 싸이클 레이턴시가 있을 수 있으며, 이에 따라 첫번째 반복은 첫번째 유효한 출력을 의미한다는 것을 이해해야 한다. 두번째 반복의 경우, 즉 두번째 유효한 출력이지만 홀수 시퀀스에서의 첫번째 반복은 아닌 경우, 어드레스 후보는 양이며, 이에 따라 어드레스 후보는 바로 출력될 수 있고, 즉 K의 추가 없이 출력될 수 있으며, 증분 후보는 두번째 반복에서 양이고, 이로써 이로부터 블럭 크기를 감산한다. 따라서, 두번째 반복에서, 초기화 값[203-2(홀수)]가 도 3의 어드레스(221)로서 출력되며, 초기화 값[203-1(홀수)] 마이너스 K가 스테이지 출력(302)으로서 출력된다. 다시, 스텝 크기(204)는 짝수 페이즈 및 홀수 페이즈 모두에서 스킵 값 n에만 의존하는 바에 따라 초기화될 수 있는 상수이다. 다시 말하면, 짝수 페이즈와 홀수 페이즈 모두는 동일한 스텝 크기들을 갖는다.
n이 2와 동일한 경우에 대해 스킵 값을 세팅하는 것은 불필요하다. 다시 말하면, 보다 큰 스킵 값들이 이용될 수 있거나 또는 스킵 값 n은 1과 동일하게 세팅될 수 있다. 뿐만 아니라, 비제한적인 예시에 의한 명확화를 위해 K의 블럭 크기가 256과 동일한 것을 설명하였지만, 256보다 크거나 작은 블럭 크기가 이용될 수 있다는 것을 이해해야 한다. 뿐만 아니라, 비제한적인 예시에 의한 명확화를 위해 고정된 블럭 크기가 이용되었지만, 가변적인 블럭 크기가 이용될 수 있다는 것을 이해해야 한다. 따라서, 홀수 및 짝수 시퀀스를 이용할 필요는 없거나, 또는 심지어 스킵 값을 이용하여 다수의 시퀀스들간에 교대할 필요는 없다. 예를 들어, 스킵 값은 블럭 크기의 일부분으로 세팅될 수 있다. 선형 시퀀스에서 0부터 K-1까지 전부 진행할 필요는 없고, 시퀀스의 일부분이 프로세싱될 수 있다. 하지만, 비제한적인 예시를 통한 명확화를 목적으로, 0부터 K-1까지의 전체 시퀀스가 루프(502)에서 프로세싱되는 것으로 가정한다.
x는 스킵 값에 대응하는 초기 값들을 가질 필요는 없다. 예를 들어, x는 블럭 크기의 일부분에서 재초기화될 수 있다. K가 256과 동일한 위 예시에 계속하여, 만약 x가 K의 절반에서 다시 초기화되었다면, 이와 같은 프로세싱에서 초기화 값들(203-2, 203-1)을 각각 생성하기 위해 128과 동일한 x는 [수학식 1]과 [수학식 2]내로 대입될 것이다. 하지만, 첫번째 값, 즉 이 시퀀스에서 0과 동일한 x는 전술한 바와 같을 것이다.
단계 511에서, 루프(502)에서 증분 i는 0에서 K-1까지 진행하는 것으로서 세팅된다. 만약 어드레스 후보가 음이면, 단계 512에서 표시된 바와 같이 블럭 크기 K는 어드레스 후보에 합산된다. 만약 증분 후보가 양이면, 단계 513에서 표시된 바와 같이 블럭 크기 K가 감산된다.
단계 514에서, 현재의 페이지 이후에 대한 다음 어드레스 후보가 계산된다. 단계 515에서, 현재의 페이지 이후에 대한 다음 증분 후보가 계산된다. 단계 516에서, 현재의 페이지에 대한 어드레스가 출력된다. 이 예시에서 루프(502)는 1씩 증분하는 0에서 K-1까지의 i에 대한 것이며, 단계 516 후에 i가 K-1과 동일할때, 루프(502)는 단계 517에서 종료한다.
어드레스 생성 흐름(500)을 다수의 쓰레드들 또는 시퀀스들에 대하여 설명하였지만, 이와 같은 흐름은 단일 시퀀스로 감축될 수 있다는 것을 이해해야 하며, 이 경우 오직 하나의 어드레스 및 증분 후보 세트가 획득될 것이다. 뿐만이 아니라, 두 개 보다 많은 어드레스 및 증분 후보 세트들이 두 개 보다 많은 쓰레드들 또는 페이즈들에 대해 증분될 수 있다는 것을 이해해야 한다.
전술한 것은 본 발명의 하나 이상의 양태들에 따른 예시적인 실시예(들)을 설명한 것이지만, 본 발명의 하나 이상의 양태들에 따른 이와 다른 실시예(들) 및 추가적인 실시예(들)이 본 발명의 범위로부터 이탈하지 않고서 고안될 수 있으며, 본 발명의 범위는 아래의 청구항(들) 및 이것의 등가물에 의해 결정된다. 예를 들어, 각각의 엔진에서 초기화는 임의의 레지스터 이전에 발생할 수 있으므로, 위 설명은 각 엔진의 초기 레지스터의 바로 전 또는 앞에 위치한 로직을 이용한 초기화를 가정한다. 다시 말하면, 예시적인 실시예들은 단지 도 3의 레지스터들(314, 324) 각각 이전에 로딩가능 가산기들(311, 321)에서의 초기화를 보여주기 위해 발생한다. 가산기들(311, 321)은 각각의 멀티플렉서들을 수반하지 않으므로 이러한 가산기들은 덜 복잡하기 때문에 초기화는 가산기들(311, 321)에서 발생하는 것으로 가정하였다. 하지만, 초기화는 로딩가능 감산기(312) 및 로딩가능 가산기(322)에서 발생할 수 있다. 양쪽 스트림들은 순차적으로 초기화되기 보다는 한번에 초기화될 수 있다. 따라서, 가산기(311)로부터의 합산값과 가산기(321)로부터의 합산값이 제2 시퀀스에서 초기화되는 것과 동일한 시간에 감산기(312)로부터의 차분값과 가산기(322)로부터의 합산값은 제1 시퀀스에서 초기화될 수 있다. 또한, 하나 이상의 부가적인 스트림들을 허용하기 위해 부가적인 레지스터들이 삽입될 때, 이러한 레지스터들 앞에는 어떠한 로직이 존재하지 않을 수 있고, 이에 따라 이러한 레지스터들은 초기화를 위해 이용될 수 있다.
뿐만 아니라, 제1 스트림/시퀀스가 제1 및 제3 초기화 값들을 이용하였고, 제2 스트림/시퀀스가 제2 및 제4 초기화 값들을 이용하였다면, 이러한 제1 및 제2 스트림들/시퀀스들은 서로 완전히 독립적일 수 있고, 각각은 블럭에서 임의의 시점에서 시작될 수 있으며 이에 따라 양쪽 스트림들/시퀀스들은 동일한 시작점을 갖지 않을 수 있다는 것을 이해해야 한다. 하지만, 제1 스트림/시퀀스는 제2 스트림/시퀀스 전 또는 후에 반드시 초기화될 필요는 없다. 뿐만 아니라, 제3 초기화 값은 제1 초기화 값과 동일한 스트림/시퀀스에 대응하며, 제3 초기화 값은 제2 프로세싱 엔진을 초기화하는 경우, 0과 K-1(포함됨) 사이의 특정한 시작 위치를 갖는 동일한 스트림/시퀀스에 대해 제1 초기화 값은 제1 프로세싱 엔진을 초기화하는데 이용될 수 있다. 마찬가지로, 제2 초기화 값 및 제4 초기화 값은 동일한 스트림/시퀀스에 대응할 수 있다.
본 발명을 특정한 실시예들을 참조하여 설명하였지만, 본 발명의 사상으로부터 벗어나지 않고서 설명한 실시예에 대한 변형들이 취해질 수 있다는 것이 본 발명분야의 당업자에게는 자명할 것이다. 따라서, 본 발명의 범위는 상술한 설명에 의해서가 아닌 첨부된 청구항들에 의해서 정의될 것이다. 단계들을 나열한 청구항들은 단계들의 어떠한 순서를 암시하지 않으며, 상표들은 각자의 소유자의 재산이라는 것을 유념한다.
109: 구성/클럭 분배, 110: 프로세서
108: 기타 프로그램가능 로직, 105: 구성/클럭 로직
200: 인터리버, 210: 저장소
220: 어드레스 생성기

Claims (15)

  1. 어드레스 생성기에 있어서,
    제1 프로세싱 유닛과;
    상기 제1 프로세싱 유닛으로부터의 스테이지 출력을 수신하도록 결합되고, 어드레스 출력을 제공하도록 구성된 제2 프로세싱 유닛을 포함하며,
    상기 스테이지 출력은 K의 블럭 크기에 대해 -K 내지 -1의 제1 범위에 있고, 상기 어드레스 출력은 0 내지 K-1의 제2 범위에 있는 것인, 어드레스 생성기.
  2. 제1항에 있어서, 상기 어드레스 생성기는 인코더, 디코더, 및 코덱으로 구성된 그룹으로부터 선택된 코딩 디바이스의 일부이며,
    상기 어드레스 생성기는 이차 순열 다항식(quadratic permutation polynomial) 인터리빙에 대한 어드레스 출력을 제공하는 것인, 어드레스 생성기.
  3. 제2항에 있어서, 상기 어드레스 출력은 다중 어드레스 시퀀스들을 포함하는 것인, 어드레스 생성기.
  4. 제3항에 있어서, 상기 제1 프로세싱 유닛 및 상기 제2 프로세싱 유닛은 각각 제1 초기화 값 또는 제2 초기화 값으로 초기화되는 것인, 어드레스 생성기.
  5. 제4항에 있어서,
    상기 제1 초기화 값은 상기 다중 어드레스 시퀀스들의 제1 시퀀스를 위한 것이며;
    상기 제2 초기화 값은 상기 다중 어드레스 시퀀스들의 제2 시퀀스를 위한 것인, 어드레스 생성기.
  6. 제2항에 있어서,
    상기 어드레스 출력은 0에서부터 K-1까지의 어드레스 시퀀스의 적어도 일부분을 위한 것이며;
    상기 제1 프로세싱 유닛은 제1 초기화 값 및 제2 초기화 값으로 초기화되며;
    상기 제2 프로세싱 유닛은 제3 초기화 값 및 제4 초기화 값으로 초기화되는 것인, 어드레스 생성기.
  7. 제1항에 있어서, 상기 제1 프로세싱 유닛은,
    제1 가산기;
    상기 제1 가산기에 결합된 제1 레지스터;
    상기 제1 레지스터에 결합된 제1 멀티플렉서;
    상기 제1 멀티플렉서 및 상기 제1 레지스터에 결합된 제1 감산기; 및
    상기 스테이지 출력을 출력하기 위해, 상기 제1 감산기에 결합된 제2 레지스터를 포함하며,
    상기 스테이지 출력은 상기 제1 가산기에 피드백되는 것인, 어드레스 생성기.
  8. 제7항에 있어서, 상기 제1 레지스터는 제1 시퀀스를 프로세싱하고, 이와 동시에 상기 제2 레지스터는 제2 시퀀스를 프로세싱하는 것인, 어드레스 생성기.
  9. 제8항에 있어서, 상기 제2 프로세싱 유닛은,
    상기 스테이지 출력을 수신하기 위한 제2 가산기;
    상기 제2 가산기에 결합된 제3 레지스터;
    상기 제3 레지스터에 결합된 제2 멀티플렉서;
    상기 제2 멀티플렉서 및 상기 제3 레지스터에 결합된 제3 가산기; 및
    상기 어드레스 출력을 출력하기 위해, 상기 제3 가산기에 결합된 제4 레지스터
    를 포함하며,
    상기 어드레스 출력은 상기 제2 가산기의 입력에 피드백되는 것인, 어드레스 생성기.
  10. 어드레스를 생성하기 위한 방법에 있어서,
    스텝 크기 및 블럭 크기를 획득하는 단계;
    제1 초기화값 및 제2 초기화값을 획득하는 단계;
    제1 합산값을 제공하기 위해 차분값에 상기 스텝 크기를 가산하는 단계;
    상기 제1 합산값의 신호 비트에 응답하여 상기 제1 합산값으로부터 널 값(null value) 또는 상기 블럭 크기 중 하나를 감산하여 또다른 차분값을 제공하는 단계;
    - 상기 또다른 차분값은 K의 블럭 크기에 대해 -K 내지 -1의 범위에 있음 -,
    상기 제1 합산값 또는 상기 또다른 차분값을 레지스터링(registering)하는 단계; 및
    상기 또다른 차분값을 상기 스텝 크기에 가산시키기 위해 상기 또다른 차분값을 피드백하는 단계를 포함하는 것인, 어드레스를 생성하기 위한 방법.
  11. 제10항에 있어서, 상기 또다른 차분값을 제3 합산값에 가산시킴으로써 제2 합산값을 생성하는 단계;
    상기 제2 합산값의 신호 비트에 응답하여 상기 제2 합산값에 상기 널(null) 값 또는 상기 블럭 크기 중 하나를 가산시켜 또다른 제3 합산값을 제공하는 단계;
    - 상기 또다른 제3 합산값은 0 내지 K-1의 범위에 있음 -
    상기 제2 합산값 또는 상기 또다른 제3 합산값을 레지스터링하는 단계;
    상기 제2 합산값를 제공하기 위한 상기 가산 단계의 또다른 반복을 위해 상기 또다른 제3 합산값를 피드백하는 단계를 더 포함하는 것인, 어드레스를 생성하기 위한 방법.
  12. 제11항에 있어서, 상기 제1 합산값 또는 상기 또다른 차분값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 상기 또다른 차분값을 레지스터링하는 단계를 포함하며,
    상기 제2 합산값 또는 상기 또다른 제3 합산값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 상기 또다른 제3 합산값을 레지스터링하는 단계를 포함하는 것인, 어드레스를 생성하기 위한 방법.
  13. 제11항에 있어서, 상기 제1 합산값 또는 상기 또다른 차분값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 상기 제1 합산값을 레지스터링하는 단계를 포함하며,
    상기 제2 합산값 또는 상기 또다른 제3 합산값을 레지스터링하는 단계는 파이프라인화된 연산에 대한 각각의 피드백 루프들내에 상기 제2 합산값을 레지스터링하는 단계를 포함하는 것인, 어드레스를 생성하기 위한 방법.
  14. 제11항에 있어서, 상기 제1 합산값을 제공하기 위해 상기 스텝 크기를 상기 차분값에 가산시키는 단계는 상기 제3 합산값에 대한 상기 또다른 차분값의 가산에 의해 상기 제2 합산값을 제공하기 위한 상기 가산 단계와 동시적으로 수행되는 것인, 어드레스를 생성하기 위한 방법.
  15. 제11항에 있어서, 이차 순열 다항식 인터리빙에 대한 상기 또다른 제3 합산값을 제공하는 단계를 더 포함하는 것인, 어드레스를 생성하기 위한 방법.
KR1020117008803A 2008-09-18 2009-07-21 어드레스 생성 KR101263152B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US12/233,320 2008-09-18
US12/233,320 US8219782B2 (en) 2008-09-18 2008-09-18 Address generation
PCT/US2009/051224 WO2010033298A1 (en) 2008-09-18 2009-07-21 Address generation

Publications (2)

Publication Number Publication Date
KR20110069108A true KR20110069108A (ko) 2011-06-22
KR101263152B1 KR101263152B1 (ko) 2013-05-15

Family

ID=41278507

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020117008803A KR101263152B1 (ko) 2008-09-18 2009-07-21 어드레스 생성

Country Status (6)

Country Link
US (1) US8219782B2 (ko)
EP (1) EP2329362B1 (ko)
JP (1) JP5242796B2 (ko)
KR (1) KR101263152B1 (ko)
CN (1) CN102160032B (ko)
WO (1) WO2010033298A1 (ko)

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8959403B2 (en) * 2006-11-10 2015-02-17 Optis Wireless Technology, Llc QPP interleaver/de-interleaver for turbo codes
EP2433372B1 (en) * 2009-10-09 2018-11-14 LG Electronics Inc. Method and apparatus for transmitting encoded signals with frequency hopping environment
TW201209711A (en) * 2010-08-19 2012-03-01 Ind Tech Res Inst Address generation apparatus and method for quadratic permutation polynomial interleaver
US8848842B2 (en) 2012-08-16 2014-09-30 Xilinx, Inc. Recursion unit scheduling
US9965278B1 (en) * 2016-12-20 2018-05-08 Texas Instruments Incorporated Streaming engine with compressed encoding for loop circular buffer sizes
US10621132B1 (en) 2017-05-05 2020-04-14 Xilinx, Inc. Auto address generation for switch network
TWI709046B (zh) * 2019-09-09 2020-11-01 英業達股份有限公司 多地址響應的複雜可程式邏輯裝置及運作方法

Family Cites Families (32)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3883852A (en) * 1973-04-20 1975-05-13 Corning Glass Works Image scanning converter for automated slide analyzer
US4370732A (en) 1980-09-15 1983-01-25 Ibm Corporation Skewed matrix address generator
DE3371947D1 (en) * 1982-12-20 1987-07-09 Radiotechnique Sa Generator of random number sequences
SE465393B (sv) * 1990-01-16 1991-09-02 Ericsson Telefon Ab L M Adressprocessor foer en signalprocessor
US5687342A (en) * 1991-09-18 1997-11-11 Ncr Corporation Memory range detector and translator
JPH07253922A (ja) * 1994-03-14 1995-10-03 Texas Instr Japan Ltd アドレス生成回路
KR970011794B1 (ko) * 1994-11-23 1997-07-16 한국전자통신연구원 메모리 소자를 이용한 하다마드 변환기
KR100189539B1 (ko) 1996-09-06 1999-06-01 윤종용 인터리빙 및 디인터리빙 어드레스 생성기
KR100193846B1 (ko) * 1996-10-02 1999-06-15 윤종용 인터리브 리드 어드레스 생성기
KR100236536B1 (ko) * 1997-01-10 1999-12-15 윤종용 모듈로 주소발생기 및 그 방법
US6334197B1 (en) * 1998-08-17 2001-12-25 Hughes Electronics Corporation Turbo code interleaver with near optimal performance
US6871303B2 (en) * 1998-12-04 2005-03-22 Qualcomm Incorporated Random-access multi-directional CDMA2000 turbo code interleaver
KR100306282B1 (ko) * 1998-12-10 2001-11-02 윤종용 통신시스템의인터리빙/디인터리빙장치및방법
US6314534B1 (en) * 1999-03-31 2001-11-06 Qualcomm Incorporated Generalized address generation for bit reversed random interleaving
KR100480286B1 (ko) * 1999-04-02 2005-04-06 삼성전자주식회사 터보 인터리빙 어드레스 발생 장치 및 방법
US6782447B2 (en) * 1999-12-17 2004-08-24 Koninklijke Philips Electronics N.V. Circular address register
KR100393608B1 (ko) * 2000-09-29 2003-08-09 삼성전자주식회사 유.엠.티.에스시스템내 터보부호화기의 내부 인터리버 및인터리빙 수행 방법
AUPR679401A0 (en) * 2001-08-03 2001-08-30 Lucent Technologies Inc. High speed add-compare-select processing
JP2003091923A (ja) * 2001-09-18 2003-03-28 Sony Corp 再標本化アドレスジェネレータ回路
US7058874B2 (en) * 2002-05-24 2006-06-06 Lucent Technologies Inc. Interleaver address generator and method of generating an interleaver address
US6865660B2 (en) * 2002-06-28 2005-03-08 Micron Technology, Inc. Method and apparatus for generating deterministic, non-repeating, pseudo-random addresses
US6851039B2 (en) * 2002-09-30 2005-02-01 Lucent Technologies Inc. Method and apparatus for generating an interleaved address
US7262716B2 (en) * 2002-12-20 2007-08-28 Texas Instruments Incoporated Asynchronous sample rate converter and method
US20050044119A1 (en) * 2003-08-21 2005-02-24 Langin-Hooper Jerry Joe Pseudo-random number generator
US7552156B2 (en) * 2004-08-30 2009-06-23 Nunes Ryan J Random number generator
EP1746496B1 (en) * 2005-07-19 2010-05-05 Emma Mixed Signal C.V. Modulo arithmetic
US7502909B2 (en) * 2005-10-11 2009-03-10 Motorola, Inc. Memory address generation with non-harmonic indexing
EP1840734A1 (en) * 2006-03-24 2007-10-03 Telefonaktiebolaget LM Ericsson (publ) Processor with address generator
US8065588B2 (en) * 2007-01-17 2011-11-22 Broadcom Corporation Formulaic flexible collision-free memory accessing for parallel turbo decoding with quadratic polynomial permutation (QPP) interleave
US7873893B2 (en) * 2007-02-28 2011-01-18 Motorola Mobility, Inc. Method and apparatus for encoding and decoding data
WO2009014298A1 (en) * 2007-07-20 2009-01-29 Electronics And Telecommunications Research Institute Address generation apparatus and method of data interleaver/deinterleaver
US8140932B2 (en) * 2007-11-26 2012-03-20 Motorola Mobility, Inc. Data interleaving circuit and method for vectorized turbo decoder

Also Published As

Publication number Publication date
JP5242796B2 (ja) 2013-07-24
US8219782B2 (en) 2012-07-10
EP2329362A1 (en) 2011-06-08
CN102160032A (zh) 2011-08-17
EP2329362B1 (en) 2019-10-02
KR101263152B1 (ko) 2013-05-15
CN102160032B (zh) 2016-08-31
US20100070737A1 (en) 2010-03-18
WO2010033298A1 (en) 2010-03-25
JP2012503248A (ja) 2012-02-02

Similar Documents

Publication Publication Date Title
KR101263152B1 (ko) 어드레스 생성
US8145877B2 (en) Address generation for quadratic permutation polynomial interleaving
US7559007B1 (en) Encoding and decoding with puncturing
US7849119B2 (en) Digital signal processing circuit having a pattern detector circuit
JP3719509B2 (ja) シリアル演算パイプライン、演算装置、算術論理演算回路およびシリアル演算パイプラインによる演算方法
JP3984162B2 (ja) 畳み込み符号の復号化回路を生成するモジュール、関連方法及び回路
US9413390B1 (en) High throughput low-density parity-check (LDPC) decoder via rescheduling
CN108008932B (zh) 除法合成
Mahdi et al. A multirate fully parallel LDPC encoder for the IEEE 802.11 n/ac/ax QC-LDPC codes based on reduced complexity XOR trees
US10101969B1 (en) Montgomery multiplication devices
US9639416B1 (en) CRC circuits with extended cycles
KR100648178B1 (ko) 프로그램가능한 프로세서에서의 비트조작 연산회로 및 방법
Chen et al. Energy-efficient architecture for stride permutation on streaming data
US9244885B1 (en) Pipelined phase accumulator
US7552377B1 (en) Method of and circuit for interleaving data in a data coder
US8131788B1 (en) Determining sum of absolute differences in parallel
US10484021B1 (en) Log-likelihood ratio processing for linear block code decoding
US6925479B2 (en) General finite-field multiplier and method of the same
US10474390B1 (en) Systems and method for buffering data using a delayed write data signal and a memory receiving write addresses in a first order and read addresses in a second order
US8332735B1 (en) Generating a log-likelihood ratio for signal processing
Asghar et al. Towards radix-4, parallel interleaver design to support high-throughput turbo decoding for re-configurability
Liang et al. A CRT-based BCH encoding and FPGA implementation
Mihajloska Trpcheska et al. Programmable processing element for crypto-systems on FPGAs
Ciric et al. Configurable folded array for FIR filtering
Wang et al. Soft-core stream processor for sliding window applications

Legal Events

Date Code Title Description
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20160422

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20170424

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180424

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20190423

Year of fee payment: 7