KR20190007227A - 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 - Google Patents
버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 Download PDFInfo
- Publication number
- KR20190007227A KR20190007227A KR1020170088401A KR20170088401A KR20190007227A KR 20190007227 A KR20190007227 A KR 20190007227A KR 1020170088401 A KR1020170088401 A KR 1020170088401A KR 20170088401 A KR20170088401 A KR 20170088401A KR 20190007227 A KR20190007227 A KR 20190007227A
- Authority
- KR
- South Korea
- Prior art keywords
- code
- pointer
- clock signal
- address
- buffer
- Prior art date
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/38—Information transfer, e.g. on bus
- G06F13/42—Bus transfer protocol, e.g. handshake; Synchronisation
- G06F13/4204—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus
- G06F13/4234—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus
- G06F13/4243—Bus transfer protocol, e.g. handshake; Synchronisation on a parallel bus being a memory bus with synchronous protocol
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1078—Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F13/00—Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
- G06F13/14—Handling requests for interconnection or transfer
- G06F13/16—Handling requests for interconnection or transfer for access to memory bus
- G06F13/1668—Details of memory controller
- G06F13/1673—Details of memory controller using buffers
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F5/00—Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F5/06—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor
- G06F5/10—Methods or arrangements for data conversion without changing the order or content of the data handled for changing the speed of data flow, i.e. speed regularising or timing, e.g. delay lines, FIFO buffers; over- or underrun control therefor having a sequence of storage locations each being individually accessible for both enqueue and dequeue operations, e.g. using random access memory
- G06F5/12—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations
- G06F5/14—Means for monitoring the fill level; Means for resolving contention, i.e. conflicts between simultaneous enqueue and dequeue operations for overflow or underflow handling, e.g. full or empty flags
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C11/00—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor
- G11C11/21—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements
- G11C11/34—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices
- G11C11/40—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors
- G11C11/41—Digital stores characterised by the use of particular electric or magnetic storage elements; Storage elements therefor using electric elements using semiconductor devices using transistors forming static cells with positive feedback, i.e. cells not needing refreshing or charge regeneration, e.g. bistable multivibrator or Schmitt trigger
- G11C11/413—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction
- G11C11/417—Auxiliary circuits, e.g. for addressing, decoding, driving, writing, sensing, timing or power reduction for memory cells of the field-effect type
- G11C11/418—Address circuits
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/10—Input/output [I/O] data interface arrangements, e.g. I/O data control circuits, I/O data buffers
- G11C7/1078—Data input circuits, e.g. write amplifiers, data input buffers, data input registers, data input level conversion circuits
- G11C7/1084—Data input buffers, e.g. comprising level conversion circuits, circuits for adapting load
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/22—Read-write [R-W] timing or clocking circuits; Read-write [R-W] control signal generators or management
- G11C7/222—Clock generating, synchronizing or distributing circuits within memory device
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/22—Read-write [R-W] timing or clocking circuits; Read-write [R-W] control signal generators or management
- G11C7/225—Clock input buffers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/04—Arrangements for selecting an address in a digital store using a sequential addressing device, e.g. shift register, counter
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/06—Address interface arrangements, e.g. address buffers
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C8/00—Arrangements for selecting an address in a digital store
- G11C8/10—Decoders
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/14—Conversion to or from non-weighted codes
- H03M7/16—Conversion to or from unit-distance codes, e.g. Gray code, reflected binary code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F2205/00—Indexing scheme relating to group G06F5/00; Methods or arrangements for data conversion without changing the order or content of the data handled
- G06F2205/12—Indexing scheme relating to groups G06F5/12 - G06F5/14
- G06F2205/126—Monitoring of intermediate fill level, i.e. with additional means for monitoring the fill level, e.g. half full flag, almost empty flag
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C2207/00—Indexing scheme relating to arrangements for writing information into, or reading information out from, a digital store
- G11C2207/007—Register arrays
-
- G—PHYSICS
- G11—INFORMATION STORAGE
- G11C—STATIC STORES
- G11C7/00—Arrangements for writing information into, or reading information out from, a digital store
- G11C7/22—Read-write [R-W] timing or clocking circuits; Read-write [R-W] control signal generators or management
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Microelectronics & Electronic Packaging (AREA)
- Computer Hardware Design (AREA)
- Information Transfer Systems (AREA)
- Synchronisation In Digital Transmission Systems (AREA)
Abstract
본 발명의 일 실시예에 따른 버퍼 컨트롤러는, 제1 클럭 신호에 따라 동작하며, 버퍼의 제1 주소를 제1 코드로 인코딩하여 제1 포인터를 생성하는 포인터 생성기, 상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기에 따라, 상기 제1 코드와 다른 제2 코드 및 제3 코드 중 하나로 상기 제1 포인터를 변환하여 제1 전송 포인터를 생성하는 코드 변환기, 상기 제1 전송 포인터를 상기 제1 클럭 신호와 다른 제2 클럭 신호에 동기화하는 동기화기, 및 상기 제2 클럭 신호에 동기화된 상기 제1 전송 포인터를, 상기 제1 코드로 복원하여 제1 비교 포인터를 생성하는 코드 복원기, 및 상기 버퍼의 제2 주소를 상기 제1 코드로 정의하는 제2 포인터와, 상기 제1 비교 포인터를 비교하는 비교기를 포함한다
Description
본 발명은 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치에 관한 것이다.
집적회로 장치가 다른 집적회로 장치로부터 데이터를 수신할 때, 데이터를 수신하는 집적회로 장치와 데이터를 송신하는 집적회로 장치 각각은 서로 다른 소스로부터 생성되는 클럭 신호를 이용하여 데이터를 받거나 보낼 수 있다. 이러한 클럭 신호들의 주파수 차이를 보상하기 위해, 집적회로 장치에는 버퍼가 마련될 수 있다. 버퍼에는 수신한 데이터의 적어도 일부가 송신측 클럭 신호에 따라 저장되고 버퍼에 저장된 데이터는 수신측 클럭 신호에 따라 출력될 수 있다. 따라서, 버퍼에 데이터를 저장하는 쓰기 회로와 버퍼에 저장된 데이터를 읽어오는 읽기 회로가 서로 다른 클럭 신호에 따라서 동작할 수 있으며, 데이터를 저장할 주소를 지정하는 포인터와, 읽어올 데이터가 저장된 주소를 지정하는 포인터를 서로 동기화하기 위한 수단이 필요할 수 있다.
본 발명의 기술적 사상이 이루고자 하는 과제 중 하나는, 서로 다른 클럭 신호에 따라 데이터가 저장되고, 저장된 데이터가 출력되는 버퍼에 있어서, 데이터를 저장할 주소를 가리키는 포인터와, 읽어올 데이터가 저장된 주소를 가리키는 포인터를 동기화할 수 있는 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치를 제공하고자 하는 데에 있다.
본 발명의 일 실시예에 따른 버퍼 컨트롤러는, 제1 클럭 신호에 따라 동작하며, 버퍼의 제1 주소를 제1 코드로 인코딩하여 제1 포인터를 생성하는 포인터 생성기, 상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기에 따라, 상기 제1 코드와 다른 제2 코드 및 제3 코드 중 하나로 상기 제1 포인터를 변환하여 제1 전송 포인터를 생성하는 코드 변환기, 상기 제1 전송 포인터를 상기 제1 클럭 신호와 다른 제2 클럭 신호에 동기화하는 동기화기, 및 상기 제2 클럭 신호에 동기화된 상기 제1 전송 포인터를, 상기 제1 코드로 복원하여 제1 비교 포인터를 생성하는 코드 복원기, 및 상기 버퍼의 제2 주소를 상기 제1 코드로 정의하는 제2 포인터와, 상기 제1 비교 포인터를 비교하는 비교기를 포함한다.
본 발명의 일 실시예에 따른 메모리 장치는, 버퍼, 제1 클럭 신호에 따라 동작하며, 상기 버퍼의 제1 주소를 제1 코드로 인코딩하여 제1 포인터를 생성하는 제1 포인터 생성기, 상기 제1 주소에 대응하는 상기 버퍼의 저장 공간에 제1 데이터를 저장하는 쓰기 회로, 상기 제1 클럭 신호와 다른 제2 클럭 신호에 따라 동작하며, 상기 버퍼의 제2 주소를 상기 제1 코드로 인코딩하여 제2 포인터를 생성하는 제2 포인터 생성기, 상기 제2 주소에 대응하는 상기 버퍼의 저장 공간에 저장된 제2 데이터를 읽어오는 읽기 회로, 및 상기 제1 포인터를 상기 제1 코드와 다른 전송 코드로 변환한 후 상기 제2 클럭 신호에 동기화하며, 상기 제2 클럭 신호에 동기화된 상기 제1 포인터를 상기 제1 코드로 복원하여 상기 제2 포인터와 비교하는 포인터 동기화기를 포함하며, 상기 전송 코드는, 상기 제1 클럭 신호의 주기마다 하나의 비트만이 변하는 코드이다.
본 발명의 일 실시예에 따른 집적회로 장치는, 제1 클럭 신호에 따라 동작하는 제1 회로, 상기 제1 클럭 신호와 다른 제2 클럭 신호에 따라 동작하는 제2 회로, 및 상기 제1 회로가 입력하는 제1 데이터를 상기 제1 클럭 신호에 따라 제1 주소에 저장하고, 제2 주소에 저장된 제2 데이터를 상기 제2 클럭 신호에 따라 상기 제2 회로로 출력하는 메모리 장치를 포함하며, 상기 메모리 장치는 상기 제1 주소를 가리키는 제1 포인터를 전송 코드로 인코딩한 후 상기 제2 클럭 신호에 동기화시켜 상기 제2 주소를 가리키는 제2 포인터와 비교하고, 상기 제2 포인터를 상기 전송 코드로 인코딩한 후 상기 제1 클럭 신호에 동기화시켜 상기 제1 포인터와 비교하며, 상기 전송 코드는 상기 제1 클럭 신호에 동기화되어 상기 메모리 장치에 저장되는 상기 제1 데이터의 크기, 및 상기 제2 클럭 신호에 동기화되어 상기 메모리 장치가 출력하는 상기 제2 데이터의 크기에 무관하게 하나의 비트만이 변하는 코드이다.
본 발명의 일 실시예에 따르면, 데이터를 저장할 주소를 가리키는 포인터와, 출력할 데이터가 저장된 주소를 가리키는 포인터는 각각 소정의 전송 코드로 변환되어 하나의 클럭 신호에 동기화된 후 서로 비교될 수 있다. 상기 전송 코드는, 클럭 신호의 한 주기 동안 버퍼에 저장되거나 버퍼에서 출력되는 데이터의 크기에 관계없이 하나의 비트만이 변하는 코드일 수 있다. 따라서, 포인터들을 동기화하는 과정에서 준안정적인(meta-stable) 상태가 발생하는 것을 방지할 수 있으며, 버퍼의 오버플로우 및 언더플로우의 발생 여부 등을 정확히 판단할 수 있다.
본 발명의 다양하면서도 유익한 장점과 효과는 상술한 내용에 한정되지 않으며, 본 발명의 구체적인 실시 형태를 설명하는 과정에서 보다 쉽게 이해될 수 있을 것이다.
도 1은 본 발명의 일 실시예에 따른 전자 기기를 간단하게 나타낸 블록도이다.
도 2는 본 발명의 일 실시예에 따른 집적회로 장치의 동작을 설명하기 위해 제공되는 도면이다.
도 3은 본 발명의 일 실시예에 따른 메모리 장치를 간단하게 나타낸 블록도이다.
도 4는 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 타이밍 다이어그램이다.
도 5 내지 도 7은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 도면들이다.
도 8은 본 발명의 일 실시예에 따른 버퍼 컨트롤러를 간단하게 나타낸 회로도이다.
도 9 내지 도 15는 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 도면들이다.
도 16은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 흐름도이다.
도 2는 본 발명의 일 실시예에 따른 집적회로 장치의 동작을 설명하기 위해 제공되는 도면이다.
도 3은 본 발명의 일 실시예에 따른 메모리 장치를 간단하게 나타낸 블록도이다.
도 4는 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 타이밍 다이어그램이다.
도 5 내지 도 7은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 도면들이다.
도 8은 본 발명의 일 실시예에 따른 버퍼 컨트롤러를 간단하게 나타낸 회로도이다.
도 9 내지 도 15는 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 도면들이다.
도 16은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 흐름도이다.
이하, 첨부된 도면을 참조하여 본 발명의 바람직한 실시 형태들을 다음과 같이 설명한다.
도 1은 본 발명의 일 실시예에 따른 전자 기기를 간단하게 나타낸 블록도이다.
도 1을 참조하면, 본 발명의 일 실시예에 따른 전자 기기(1)는, 프로세서(2), 스토리지(3), 디스플레이(4), 통신부(5), 이미지 센서(6), 입출력 장치(7) 등을 포함할 수 있다. 전자 기기(1)는 스마트폰, 태블릿 PC, 랩톱 컴퓨터 등의 모바일 기기는 물론, 텔레비전, 데스크톱 컴퓨터 등을 포함할 수 있다. 프로세서(2), 스토리지(3), 디스플레이(4), 통신부(5), 이미지 센서(6), 입출력 장치(7) 등의 구성 요소는 버스(8)를 통해 서로 통신할 수 있다.
전자 기기(1)의 전체적인 동작은 프로세서(2)에 의해 제어될 수 있다. 프로세서(2)는 전자 기기(1)의 종류에 따라 여러 이름으로 명명될 수 있다. 일 실시예로, 전자 기기(1)가 태블릿 PC나 스마트폰인 경우, 프로세서(2)는 애플리케이션 프로세서일 수 있으며, 전자 기기(1)가 랩톱 컴퓨터나 데스크톱 컴퓨터인 경우 프로세서(2)는 중앙 처리 장치(Central Processing Unit, CPU)일 수 있다. 스토리지(3)는 데이터를 저장할 수 있는 장치로서, 플래시 메모리, DRAM, SRAM, 캐시 메모리 등을 포함할 수 있다. 디스플레이(4)는 화면을 출력하기 위한 장치로서, 액정 디스플레이(LCD), 유기발광다이오드(OLED) 디스플레이, 전자 종이 디스플레이, 또는 마이크로 전자 기계 시스템(MEMS) 디스플레이 등으로 구현될 수 있다.
통신부(5)는 전자 기기(1)와 다른 외부 전자 기기 사이의 통신을 중개하기 위한 장치일 수 있다. 통신부(5)는 다양한 통신 인터페이스, 예를 들어 USB, LAN, micro-USB 등과 같은 유선 통신 인터페이스나, Wifi, Bluetooth, NFC, 적외선 통신, 가시광 통신 등과 같은 무선 통신 인터페이스를 통해 외부 전자 기기와 데이터를 주고받을 수 있다. 이미지 센서(6)는 영상을 촬영하기 위한 장치로서 CMOS 이미지 센서 또는 CCD 이미지 센서 등을 포함할 수 있다. 입출력 장치(7)는 외부로부터 소정의 명령을 입력받거나, 음성, 진동 등을 출력하기 위한 장치들을 포함할 수 있다. 일 실시예에서 입출력 장치(7)는 오디오 출력부, 터치스크린, 기계식 키 등의 구성 요소들을 포함할 수 있다.
전자 기기(1)에 포함되는 각 구성 요소들(2-7)은 버스(8)를 통해 통신할 수 있다. 전자 기기(1)에 포함되는 구성 요소들(2-7) 중 적어도 일부는, 그 내부에 로컬(local) 클럭 신호 발생을 위한 클럭 생성 회로를 포함할 수 있다. 일 실시예에서, 상기 클럭 생성 회로는, 위상 고정 루프(Phase Locked Loop) 기반의 오실레이터 회로 등을 포함할 수 있다.
일 실시예에서, 프로세서(2) 내부에 마련된 클럭 생성 회로와, 통신부(5) 내부에 마련된 클럭 생성 회로는 동일한 주파수의 클럭 신호를 생성하도록 제어될 수 있다. 그러나 이상적인 경우를 제외하면, 서로 다른 구성 요소들(2-7) 내에 동일한 구조의 클럭 생성 회로가 마련된 경우에도 각 구성 요소들(2-7) 내에서 생성되는 클럭 신호들은 서로 다른 주파수를 가질 수 있다.
일 실시예로 통신부(5)가 외부 전자 기기로부터 수신한 데이터를 버스(8)를 통해 프로세서(2)에 송신하는 경우, 통신부(5)의 데이터 송신 속도는 통신부(5) 내에서 생성되는 클럭 신호의 주파수에 의해 결정될 수 있다. 반면, 프로세서(2)가 데이터를 받는 속도는 프로세서(2) 내에서 생성되는 클럭 신호의 주파수에 의해 결정될 수 있다. 이와 같은 데이터 송신와 데이터 수신의 오차를 보상하기 위해, 프로세서(2)를 비롯한 구성 요소들(2-7) 중 적어도 일부에는, 그 내부에 버퍼를 포함한 메모리 장치가 마련될 수 있다.
도 2는 본 발명의 일 실시예에 따른 집적회로 장치의 동작을 설명하기 위해 제공되는 도면이다.
도 2를 참조하면, 본 발명의 일 실시예에 따른 집적회로 장치들(10, 20)은 서로 소정의 통신 인터페이스에 따라 데이터를 주고받을 수 있다. 일 실시예에서, 제1 집적회로 장치(10)와 제2 집적회로 장치(20)는 직렬 통신 인터페이스를 통해 서로 데이터를 주고받을 수 있다.
제1 집적회로 장치(10)와 제2 집적회로 장치(20) 각각은 제1 회로(11, 21)와 제2 회로(12, 22)를 포함할 수 있으며, 클럭 신호를 생성하는 클럭 생성 회로(14, 24)를 포함할 수 있다. 제1 클럭 생성 회로(14)는 제1 클럭 신호를 생성하고, 제2 클럭 생성 회로(24)는 제2 클럭 신호를 생성할 수 있다. 이하, 설명의 편의를 위하여 제2 집적회로 장치(20)를 예시로 본 발명의 일 실시예에 따른 집적회로 장치의 동작을 설명하기로 한다. 다만, 본 발명의 일 실시예에 따른 집적회로 장치의 동작은, 제2 집적회로 장치(20)뿐 아니라 제1 집적회로 장치(10)에도 적용될 수 있다.
제2 집적회로 장치(20)의 제1 회로(21)는 제1 집적회로 장치(10)로부터 데이터를 수신할 수 있다. 제1 회로(21)가 수신한 데이터는 제1 클럭 생성 회로(14)가 생성한 제1 클럭 신호에 동기화되어 전송될 수 있으며, 제1 회로(21)는 제1 클럭 신호에 따라 동작할 수 있다. 반면, 제2 회로(22)는 제2 클럭 생성 회로(24)가 생성하는 제2 클럭 신호에 따라 동작할 수 있다.
일 실시예에서, 제1 클럭 신호와 제2 클럭 신호는 서로 다른 주파수를 가질 수 있다. 또는, 제1 클럭 신호와 제2 클럭 신호가 서로 같은 주파수를 갖도록 생성하는 경우에도, 여러 요인에 의해 제1 클럭 신호와 제2 클럭 신호의 주파수가 서로 달라질 수 있다. 제1 클럭 신호와 제2 클럭 신호의 주파수 차이를 보상하기 위해, 제1 회로(21)와 제2 회로(22) 사이에는 선입선출(First-In-First-Out) 방식으로 데이터를 저장 및 출력하는 메모리 장치(23)가 마련될 수 있다.
메모리 장치(23)는 데이터를 저장하기 위한 버퍼와, 심볼(Symbol) 단위로 버퍼에 데이터를 저장하는 쓰기 회로, 및 버퍼에 저장된 데이터를 심볼 단위로 읽어오는 읽기 회로 등을 포함할 수 있다. 일 실시예에서, 쓰기 회로는 제1 클럭 신호에 따라 동작할 수 있으며, 버퍼에 저장된 데이터를 읽어오는 읽기 회로는 제2 클럭 신호에 따라 동작할 수 있다. 또한, 쓰기 회로는 제1 클럭 신호와 제2 클럭 신호의 차이를 보상하기 위해 특정 조건에서 심볼을 버퍼에 저장하는 데이터에 추가하거나, 버퍼에 저장하는 데이터로부터 심볼을 제거할 수 있다. 상기와 같은 프로세스에 의해, 제1 클럭 신호와 제2 클럭 신호의 주파수 차이가 보상될 수 있다.
도 3은 본 발명의 일 실시예에 따른 메모리 장치를 간단하게 나타낸 블록도이다.
도 3을 참조하면, 본 발명의 일 실시예에 따른 메모리 장치(100)는 데이터를 저장 및 출력하는 버퍼(110)와, 버퍼 컨트롤러(120)를 포함할 수 있다. 버퍼 컨트롤러(120)는 버퍼(110)에 쓰기 회로(121), 제1 포인터 생성기(122), 읽기 회로(123), 제2 포인터 생성기(124), 및 포인터 동기화기(125) 등을 포함할 수 있다.
메모리 장치(100)는 제1 클럭 신호(CLK1)와 제2 클럭 신호(CLK2)의 주파수 차이를 보상하기 위한 목적으로 제공될 수 있다. 일 실시예에서 쓰기 회로(121)와 제1 포인터 생성기(122)는 제1 클럭 신호(CLK1)에 따라 동작하는 제1 클럭 도메인에 포함될 수 있으며, 읽기 회로(123)와 제2 포인터 생성기(124)는 제2 클럭 신호(CLK2)에 따라 동작하는 제2 클럭 도메인에 포함될 수 있다.
쓰기 회로(121)는 입력 데이터 및 제1 클럭 신호(CLK1)를 수신하고, 제1 데이터(DATA1)를 버퍼(110)에 저장할 수 있다. 입력 데이터는 직렬 통신 인터페이스를 통해 비트 스트림 형태로 전달되는 데이터일 수 있으며, 쓰기 회로는 입력 데이터에서 심볼들을 추출하기 위한 직병렬 변환기(Serial-to-Parallel Converter)를 포함할 수 있다.
일 실시예에서, 제1 데이터(DATA1)는 제1 클럭 신호(CLK1)의 한 주기 동안 버퍼(110)에 저장되는 데이터로서, 하나 또는 복수 개의 심볼을 포함할 수 있다. 제1 데이터(DATA1)가 복수 개의 심볼을 포함하는 경우, 버퍼(110)에 포함되는 저장 공간들 중 둘 이상의 저장 공간들에 동시에 데이터가 기록될 수 있다. 버퍼(110)에 포함되는 저장 공간들 각각은, 하나의 심볼을 저장할 수 있다. 복수 개의 심볼을 제1 클럭 신호(CLK1)의 한 주기 동안 버퍼(110)에 저장함으로써, 클럭의 주파수 증가 없이 집적회로 장치의 데이터 처리 속도를 높일 수 있으며, 집적회로 장치의 소모 전력을 줄일 수 있다.
일 실시예에서, 버퍼(110)가 2N개의 저장 공간들을 갖는 경우, 제1 포인터 생성기(122)는 버퍼(110)의 저장 공간들을 식별하기 위한 주소를 N개의 비트를 갖는 제1 코드로 인코딩하여 제1 포인터를 생성할 수 있다. 일 실시예에서 제1 코드는 바이너리(Binary) 코드일 수 있다. 쓰기 회로(121)는 제1 포인터가 가리키는 제1 주소에 대응하는 저장 공간에, 제1 데이터(DATA1)를 저장할 수 있다. 일 실시예로, 제1 데이터(DATA1)가 2개의 심볼들을 포함하는 경우, 제1 주소에 대응하는 저장 공간 및 제1 주소의 다음 주소에 대응하는 저장 공간에 제1 데이터(DATA1)에 포함되는 2개의 심볼들이 차례로 저장될 수 있다.
읽기 회로(123)는 제2 클럭 신호(CLK2)에 따라 동작하며, 버퍼(110)에 저장된 데이터를 읽어올 수 있다. 일 실시예에서 읽기 회로(123)는 버퍼(110)의 제2 주소에 대응하는 저장 공간에 저장된 제2 데이터(DATA2)를 읽어올 수 있다. 제2 데이터(DATA2)는 제2 클럭 신호(CLK2)의 한 주기 동안 읽기 회로(123)가 버퍼(110)로부터 읽어오는 데이터일 수 있다. 제2 주소는 제1 주소와 다를 수 있으며, 제2 포인터 생성기(124)가 생성하는 제2 포인터에 의해 제2 주소가 지정될 수 있다. 제2 포인터 생성기(124)가 제2 주소를 제1 코드로 인코딩하여 제2 포인터를 생성하며, 읽기 회로(123)는 제2 포인터를 이용하여 제2 데이터(DATA2)가 저장된 저장 공간을 특정할 수 있다.
제1 데이터(DATA1)와 마찬가지로, 제2 데이터(DATA2)는 복수의 심볼들을 포함할 수 있다. 일 실시예로 제2 데이터(DATA2)가 2개의 심볼들을 포함하면, 읽기 회로(123)는 제2 주소 및 그 다음 주소에 대응하는 저장 공간들에 저장된 심볼들을 제2 데이터(DATA2)로서 읽어올 수 있다.
버퍼(110)의 모든 저장 공간에 심볼이 저장된 상태에서 쓰기 회로(121)가 제1 데이터(DATA1)를 저장하거나, 심볼이 저장되지 않은 저장 공간을 제2 주소가 가리키는 경우 등이 발생하면, 버퍼 컨트롤러(120)가 버퍼(110)에 심볼을 저장하거나 읽어오는 과정에서 에러가 발생할 수 있다. 상기와 같은 에러를 방지하기 위해, 포인터 동기화기(125)는 제1 포인터와 제2 포인터를 모니터링하고 서로 비교하여 버퍼(110)의 상태를 판단할 수 있다.
일 실시예에서, 1 포인터 생성기(122)와 제2 포인터 생성기(124) 각각은, 포인터 동기화기(125)로부터 제1 포인터와 제2 포인터의 비교 결과를 수신하고, 이를 참조하여 제1 포인터 및 제2 포인터 각각이 가리키는 제1 주소 및 제2 주소를 결정할 수 있다. 또한, 포인터 동기화기(125)는 제1 포인터와 제2 포인터를 비교하여 버퍼(110)의 남은 저장 공간 등을 비롯한 버퍼(110)의 상태를 모니터링할 수 있다.
도 3을 참조하면, 제1 포인터는 제1 클럭 신호(CLK1)에 따라 동작하는 제1 포인터 생성기(122)에 의해 생성되고, 제2 포인터는 제2 클럭 신호(CLK2)에 따라 동작하는 제2 포인터 생성기(124)에 의해 생성될 수 있다. 따라서, 제1 포인터와 제2 포인터를 정확히 비교하기 위해서는 비동기적으로 생성되는 제1 클럭 신호(CLK1)와 제2 클럭 신호(CLK2)의 차이를 보상하기 위한 수단이 필요할 수 있다. 이하, 도 4를 함께 참조하여 설명하기로 한다.
도 4는 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 타이밍 다이어그램이다. 도 4를 참조하면, 제1 클럭 신호(CLK1)와 제2 클럭 신호(CLK2)는 서로 다를 수 있다. 쓰기 회로(121)가 제1 데이터(DATA1)를 저장할 저장 공간을 지정하는 제1 주소(ADDR1)는 제1 클럭 신호(CLK1)에 동기화되어 갱신될 수 있으며, 읽기 회로(123)가 제2 데이터(DATA2)를 읽어올 저장 공간을 지정하는 제2 주소(ADDR2)는 제2 클럭 신호(CLK2)에 동기화되어 갱신될 수 있다. 제1 포인터는 제1 주소(ADDR1)를 제1 코드로 인코딩한 값을 가지며, 제2 포인터는 제2 주소(ADDR2)를 제1 코드로 인코딩한 값을 가질 수 있다.
도 4를 참조하면, 제1 클럭 신호(CLK1)와 제2 클럭 신호(CLK2)의 차이로 인해, 제1 클럭 신호(CLK1)의 상승 엣지(rising edge)에서 제2 주소가 명확히 정의되지 못할 수 있다. 도 4의 시점 t1에서, 제1 주소(ADDR1)의 값은 10으로 명확히 판정될 수 있으나, 제2 주소(ADDR2)의 값은 0과 2 중 어느 하나로 명확히 판정되지 못할 수 있다. 따라서, 별도의 동기화 절차 없이 제1 포인터와 제2 포인터를 비교할 경우, 제2 포인터의 값이 명확히 확정되지 않기 때문에 정확한 비교가 수행되지 못할 수 있다.
상기와 같은 문제를 해결하기 위해, 포인터 동기화기(125)는 제1 포인터를 제2 클럭 신호(CLK2)에 동기화하거나, 또는 제2 포인터를 제1 클럭 신호(CLK1)에 동기화하기 위한 동기화기를 포함할 수 있다. 이하, 도 5 내지 도 7을 참조하여 설명하기로 한다.
도 5 내지 도 7은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 도면들이다.
앞서 설명한 바와 같이, 본 발명의 일 실시예에 따른 버퍼 컨트롤러는 제1 주소를 가리키는 제1 포인터를, 제2 주소를 가리키는 제2 포인터와 비교하는 포인터 동기화기를 포함할 수 있다. 제1 주소는 데이터를 저장할 버퍼의 저장 공간에 대응할 수 있으며, 제2 주소는 데이터를 읽어올 버퍼의 저장 공간에 대응할 수 있다. 제1 포인터는 제1 클럭 신호에 따라 동작하는 제1 클럭 도메인에서 생성될 수 있으며, 제2 포인터는 제2 클럭 신호에 따라 동작하는 제2 클럭 도메인에서 생성될 수 있다. 포인터 동기화기는 제1 포인터를 제2 클럭 신호에 동기화한 후 제2 포인터와 비교하거나, 제2 포인터를 제1 클럭 신호에 동기화한 후 제1 포인터와 비교할 수 있다.
도 5를 참조하면, 본 발명의 일 실시예에 따른 포인터 동기화기(200)는, 코드 변환기(210), 동기화기(220), 코드 복원기(230) 및 비교기(240) 등을 포함할 수 있다. 코드 변환기(210)는 제1 클럭 신호(CLK1)에 따라 동작하는 제1 클럭 도메인(CLK1 Domain)에 속할 수 있으며, 동기화기(220), 코드 복원기(230), 및 비교기(240)는 제2 클럭 도메인(CLK2 Domain)에서 제2 클럭 신호(CLK2)에 따라 동작할 수 있다.
제1 포인터는 제1 클럭 도메인(CLK1 Domain)에서 제1 포인터 생성기에 의해 생성되며, 버퍼의 제1 주소를 제1 코드로 인코딩한 값을 가질 수 있다. 일 실시예에서, 제1 코드는 바이너리(Binary) 코드일 수 있으며, 제1 주소는 쓰기 회로가 데이터를 기록할 버퍼의 저장 공간에 대응할 수 있다. 즉, 제1 포인터는 쓰기 회로가 데이터를 기록할 버퍼의 저장 공간을 가리킬 수 있다. 일 실시예에서, 버퍼가 데이터를 저장할 수 있는 총 16개의 저장 공간을 갖는 경우, 제1 주소는 0부터 15까지의 값들 중 하나일 수 있다.
코드 변환기(210)는 제1 코드를 제1 코드와 다른 전송 코드로 변환하여 제1 전송 포인터를 생성할 수 있다. 동기화기(220)는 제1 전송 포인터를 제2 클럭 신호(CLK2)에 동기화하며, 코드 복원기(230)는 제2 클럭 신호(CLK2)에 동기화된 제1 전송 포인터를 다시 제1 코드로 변환하여 제1 비교 포인터를 생성할 수 있다. 즉, 제1 비교 포인터는 제1 포인터와 같은 값을 가질 수 있으며, 제1 클럭 신호(CLK1)가 아닌 제2 클럭 신호(CLK2)에 동기화될 수 있다. 비교기(240)는 제2 클럭 도메인(CLK2 Domain)에서 제1 비교 포인터와 제2 포인터를 비교할 수 있다. 일 실시예에서, 제1 비교 포인터와 제2 포인터 각각의 값은 제1 주소 및 제2 주소를 바이너리 코드로 인코딩한 값일 수 있다.
일 실시예에서, 동기화기(220)는 2-FF 동기화기를 포함할 수 있다. 즉, 동기화기(220)는 서로 직렬로 연결된 복수의 플립플롭들을 포함할 수 있으며, 상기 복수의 플립플롭들 각각은 제2 클럭 신호(CLK2)에 따라 동작할 수 있다. 제1 클럭 신호(CLK1)와 제2 클럭 신호(CLK2) 사이에는 주파수 차이 또는 위상 차이 등이 존재할 수 있으므로, 제1 클럭 신호(CLK1)의 한 주기가 경과할 때 동기화기(220)에 입력되는 코드에서 2개 이상의 비트가 동시에 바뀌면, 동기화기(220)의 출력에서 준안정적인(meta-stable) 상태가 발생할 수 있다. 동기화기(220)에서 준안정적인 상태가 발생하는 것을 방지하기 위하여, 동기화기(220)는 제1 클럭 신호(CLK1)의 한 주기가 경과할 때마다 하나의 비트만이 변하는 전송 코드를 이용하여 상기 제1 전송 포인터를 생성할 수 있다.
한편 제1 포인터가 가리키는 제1 주소는, 제1 클럭 신호(CLK1)의 한 주기 동안 쓰기 회로가 버퍼에 저장하는 제1 데이터의 크기에 따라, 제1 클럭 신호(CLK1)의 주기마다 변할 수 있다. 일 실시예에서, 제1 데이터가 2개의 심볼을 포함하는 경우 제1 주소는 2씩 변할 수 있으며, 제1 데이터가 하나의 심볼을 포함하는 경우 제1 주소는 1씩 변할 수 있다.
제1 코드가 바이너리 코드이면, 제1 클럭 신호(CLK1)의 주기마다 제1 코드에 포함되는 비트들 중 2개 이상의 비트가 동시에 바뀔 수도 있다. 따라서, 코드 변환기(210) 없이 제1 포인터를 그대로 동기화기(220)에 입력할 경우, 동기화기(220)의 출력에서 준안정적인 상태가 발생할 수 있으며, 비교기(240)가 제1 포인터와 제2 포인터를 정확히 비교할 수 없다.
본 발명의 일 실시예에서는, 제1 코드를 전송 코드로 변환하여 제1 전송 포인터를 생성하고, 이를 동기화기(220)에 입력함으로써 상기와 같은 문제를 해결할 수 있다. 앞서 설명한 바와 같이, 전송 코드는 제1 클럭 신호(CLK1)의 한 주기가 경과할 때마다 하나의 비트만이 변하는 코드일 수 있다. 특히, 전송 코드는, 제1 클럭 신호(CLK1)의 한 주기 동안 버퍼에 저장되는 심볼의 개수에 관계없이, 제1 클럭 신호(CLK1)의 한 주기가 경과할 때마다 하나의 비트만이 변하는 코드일 수 있다. 따라서, 동작 조건에 따라 클럭의 한 주기 동안 버퍼에 저장되는 심볼의 개수가 변하는 경우에도, 코드 에러 없이 제1 포인터와 제2 포인터를 정확히 비교할 수 있다.
한편, 위에서 설명한 포인터 동기화기(200)의 동작은, 제2 포인터를 제1 클럭 신호(CLK1)에 동기화시켜 제1 포인터와 비교하는 경우에도 유사하게 적용될 수 있다. 즉, 제2 클럭 도메인(CLK2 Domain)에서 버퍼의 제2 주소를 제1 코드로 인코딩하여 제2 포인터가 생성되면, 제2 포인터를 전송 코드로 변환한 후 제1 클럭 신호(CLK1)에 동기화시킬 수 있다. 제1 클럭 신호(CLK1)에 동기화된 제2 포인터는 다시 제1 코드로 복원되어 제1 클럭 도메인(CLK1 Domain)에서 제1 포인터와 비교될 수 있다.
전송 코드는 그레이 코드로 버퍼의 주소를 정의하는 제2 코드, 및 제1 코드의 비트 일부와 제2 코드의 비트 일부를 조합하여 생성되는 제3 코드 중 어느 하나로 선택될 수 있다. 일 실시예에서, 제1 클럭 신호(CLK1)의 한 주기 동안 버퍼에 저장되는 심볼의 개수나, 제2 클럭 신호(CLK2)의 한 주기 동안 버퍼에서 읽어오는 심볼의 개수에 따라 전송 코드가 제2 코드 및 제3 코드 중 어느 하나로 선택될 수 있다. 상기와 같은 방법으로부터, 클럭 신호(CLK1, CLK2)의 한 주기 동안 버퍼에 저장되거나 버퍼로부터 읽어오는 심볼의 개수에 관계없이, 클럭 신호(CLK1, CLK2)의 한 주기가 경과할 때마다 하나의 비트만이 변하는 코드로 전송 코드를 생성할 수 있다.
도 6 및 도 7은 본 발명의 실시예들에 따른 코드 변환기(300, 400)를 간단하게 나타낸 도면일 수 있다. 도 6 및 도 7을 참조하여 설명하는 코드 변환기(300, 400)는 제2 포인터로부터 제2 전송 포인터를 생성하는 경우에도 유사하게 적용될 수 있다.
우선 도 6을 참조하면, 본 발명의 일 실시예에 따른 코드 변환기(300)는, 제2 코드 생성기(310), 제3 코드 생성기(320), 코드 선택기(330), 및 멀티플렉서(340) 등을 포함할 수 있다.
앞서 설명한 바와 같이, 제1 포인터는 쓰기 회로가 데이터를 저장할 버퍼의 저장 공간을 대응하는 제1 주소를 제1 코드로 인코딩한 값을 가질 수 있다. 제2 코드 생성기(310)는 제1 코드를 제2 코드로 변환할 수 있다. 일 실시예에서 제1 코드는 바이너리 코드, 제2 코드는 그레이 코드일 수 있으며, 제2 코드 생성기(310)는 하나 이상의 XOR 게이트들을 포함할 수 있다. 한편, 제3 코드 생성기(320)는 제1 코드와 제2 코드를 입력받으며, 제1 코드의 비트 일부와 제2 코드의 비트 일부를 조합하여 제3 코드를 생성할 수 있다. 일 실시예에서, 제1 코드 내지 제3 코드가 N개(N은 2보다 큰 자연수)의 비트를 포함하는 경우, 제3 코드의 상위 n개(n은 N보다 작은 자연수)의 비트는 제2 코드의 상위 n개의 비트일 수 있으며, 제3 코드의 하위 N-n개의 비트는 제1 코드의 하위 N-n개의 비트일 수 있다.
멀티플렉서(340)는 제2 코드와 제3 코드를 입력받으며, 코드 선택기(330)가 전송하는 명령에 따라 제2 코드와 제3 코드 중 하나를 제1 전송 포인터의 값으로 출력할 수 있다. 코드 선택기(330)는 쓰기 회로가 제1 클럭 신호의 한 주기 동안 버퍼에 저장하는 제1 데이터의 크기에 따라서 제2 코드와 제3 코드 중 어느 하나를 선택하는 명령을 생성할 수 있다.
일 실시예에서, 제1 데이터가 제1 크기를 갖는 경우 코드 선택기(330)는 제2 코드를 선택하는 명령을 생성하고, 제1 데이터가 제2 크기를 갖는 경우 코드 선택기(330)는 제3 코드를 선택하는 명령을 생성할 수 있다. 제2 크기는 제1 크기보다 더 클 수 있다. 일 실시예에서 제2 크기의 제1 데이터에 포함되는 심볼의 개수는, 제1 크기의 제1 데이터에 포함되는 심볼의 개수의 2배일 수 있다.
제1 크기는, 쓰기 회로가 버퍼의 언더플로우 및 오버플로우를 방지하기 위해 스킵 심볼을 추가하거나 삭제할 때, 처리하는 심볼의 개수에 의해 결정될 수 있다. 한편, 제2 크기는 스킵 심볼을 처리하지 않는 일반적인 경우에 쓰기 회로가 처리하는 심볼의 개수에 의해 결정될 수 있다. 클럭 신호의 주파수 증가 없이 소모 전력을 줄이면서 데이터 처리 속도를 높이기 위해, 쓰기 회로는 제1 클럭 신호의 한 주기 동안 복수 개의 심볼을 버퍼에 저장할 수 있으며, 따라서 제2 크기는 제1 크기보다 클 수 있다.
스킵 심볼의 처리 여부와 무관하게 버퍼에 저장되는 심볼의 개수가 일정한 경우를 가정하면, 제1 클럭 신호의 매 주기마다 갱신되는 제1 주소의 변화량이 일정할 수 있다. 일 실시예로, 쓰기 회로가 제1 클럭 신호의 매 주기마다 하나의 심볼을 버퍼에 저장하는 경우, 제1 클럭 신호의 매 주기마다 제1 주소는 1씩 변할 수 있다. 이 경우, 제1 주소를 그레이 코드로 인코딩하여 제1 전송 포인터를 생성함으로써, 동기화기에서 준안정적 상태가 발생하는 것을 방지할 수 있다.
그러나 집적회로 장치에 더 빠른 데이터 처리 속도 및 더 적은 소모 전력이 요구됨에 따라, 클럭 신호의 매 주기마다 쓰기 회로 및 읽기 회로가 처리하는 심볼의 개수가 증가할 수 있다. 이 경우, 스킵 심볼의 처리 여부에 따라 클럭 신호의 주기마다 갱신되는 주소의 변화량이 달라질 수 있다. 따라서 버퍼의 주소를 단순히 그레이 코드로 인코딩하는 경우, 그레이 코드에 포함되는 비트들 중 2개 이상이 동시에 변할 수 있다. 따라서, 동기화기에서 준안정적 상태가 발생할 수 있다.
본 발명의 일 실시예에서는, 스킵 심볼이 처리되는 경우와 그렇지 않은 경우를 구분하여 제2 코드 또는 제3 코드로 제1 전송 포인터를 생성함으로써, 동기화기에서 준안정적 상태가 발생하는 것을 방지할 수 있다. 도 5에 도시한 일 실시예에서, 스킵 심볼이 처리되는 경우에는 제2 코드로 제1 전송 포인터를 생성하고, 스킵 심볼이 처리되지 않는 경우에는 제3 코드로 제1 전송 포인터를 생성할 수 있다. 제2 코드는 스킵 심볼이 처리되는 경우에 하나의 비트만이 변하는 코드이며, 제3 코드는 스킵 심볼이 처리되지 않는 경우에 하나의 비트만이 변하는 코드일 수 있다.
다음으로 도 7을 참조하면, 본 발명의 일 실시예에 따른 코드 변환기(400)는, 제2 코드 생성기(410), 제1 하위 비트 추출기(420), 제2 하위 비트 추출기(430), 상위 비트 추출기(440), 코드 선택기(450), 멀티플렉서(460), 및 출력기(470) 등을 포함할 수 있다.
제2 코드 생성기(410)는 제1 코드로 버퍼의 주소를 정의하는 제1 포인터를, 제1 코드와 다른 제2 코드로 변환할 수 있다. 일 실시예에서, 제1 코드는 바이너리 코드이고, 제2 코드는 그레이 코드일 수 있다.
제1 하위 비트 추출기(420)는 제1 코드의 하위 비트 일부를 추출할 수 있으며, 제2 하위 비트 추출기(430)는 제2 코드의 하위 비트 일부를 추출할 수 있다. 제1 하위 비트 추출기(420)와 제2 하위 비트 추출기(430) 각각이 추출하는 비트의 개수는 서로 같으며, 주기적으로 전송되는 스킵 심볼의 크기에 따라 상기 비트의 개수가 결정될 수 있다. 일 실시예에서, 버퍼가 16개의 저장 공간을 갖는 경우를 가정하면, 제1 코드 및 제2 코드는 각각 4개의 비트들을 포함할 수 있다. 스킵 심볼의 크기가 1 바이트(byte)인 것을 가정하면, 제1 하위 비트 추출기(420)와 제2 하위 비트 추출기(430) 각각은 제1 코드와 제2 코드의 최하위 비트(LSB)를 추출할 수 있다.
상위 비트 추출기(440)는 제2 코드의 상위 비트 일부를 추출할 수 있다. 일 실시예에서, 제2 코드가 N개의 코드를 포함하고, 제2 하위 비트 추출기(430)가 제2 코드의 n개의 하위 비트를 추출하는 경우, 상위 비트 추출기(440)는 N-n개의 상위 비트를 추출할 수 있다. 상위 비트 추출기(440)가 추출한 상위 비트 일부는 출력기(470)에 입력될 수 있다.
멀티플렉서(460)는 제1 코드의 하위 비트 일부와 제2 코드의 하위 비트 일부 중 하나를 선택하여 출력기(470)에 전달할 수 있다. 멀티플렉서(460)의 동작은 코드 선택기(450)에 의해 제어될 수 있다. 일 실시예에서, 스킵 심볼이 처리되는 경우, 코드 선택기(450)는 멀티플렉서(460)가 제2 코드의 하위 비트 일부를 선택하도록 제어할 수 있다. 따라서, 스킵 심볼이 처리되는 경우, 코드 변환기(400)가 출력하는 제1 전송 포인터는, 버퍼의 주소를 제2 코드로 인코딩한 값을 가질 수 있다.
반면, 스킵 심볼이 처리되지 않는 일반적인 경우에서, 코드 선택기(450)는 멀티플렉서(460)가 제1 코드의 하위 비트 일부를 선택하도록 제어할 수 있다. 이 경우, 코드 변환기(400)가 출력하는 제1 전송 포인터는, 제1 코드의 비트 일부와 제2 코드의 비트 일부를 조합한 값을 가질 수 있다.
도 8은 본 발명의 일 실시예에 따른 버퍼 컨트롤러를 간단하게 나타낸 회로도이다.
도 8을 참조하면, 본 발명의 일 실시예에 따른 버퍼 컨트롤러(500)는, 제1 포인터 생성기(510), 코드 변환기(520), 동기화기(530), 코드 복원기(540), 및 비교기(550) 등을 포함할 수 있다.
제1 포인터 생성기(510)는 제1 클럭 신호(CLK1)에 따라 동작하며 제1 포인터를 생성할 수 있다. 제1 포인터는, 버퍼의 제1 주소를 제1 코드로 인코딩한 값을 가질 수 있다. 제1 주소는, 쓰기 회로가 버퍼에 데이터를 기록할 저장 공간을 가리키는 주소일 수 있다. 일 실시예에서, 제1 코드는 N개의 비트를 갖는 바이너리 코드일 수 있다.
코드 변환기(520)는 제1 포인터를 제1 코드와 다른 제2 코드 및 제3 코드 중 어느 하나로 변환할 수 있다. 일 실시예에서, 제1 코드가 N개의 비트를 갖는 바이너리 코드인 경우, 제2 코드는 N개의 비트를 갖는 그레이 코드일 수 있다. 제2 코드는, 코드 변환기(520)에 포함되는 N-1개의 XOR 게이트에 의해 생성될 수 있다.
한편, 코드 변환기(520)는 제1 멀티플렉서(522)를 포함할 수 있다. 제1 멀티플렉서(522)는 제1 코드의 최하위 비트와 제2 코드의 최하위 비트를 각각 입력받으며 그 중 하나를 선택하여 출력할 수 있다. 제1 멀티플렉서(522)의 출력은 코드 선택기(560)에 의해 결정될 수 있다. 제1 멀티플렉서(522)가 제2 코드의 최하위 비트를 선택하여 출력하면, 코드 변환기(520)의 출력은 제2 코드로 결정될 수 있다. 반면, 제1 멀티플렉서(522)가 제3 코드의 최하위 비트를 선택하여 출력하면, 코드 변환기(520)의 출력은 제3 코드로 결정될 수 있다. 즉, 제3 코드는, 제1 코드의 비트 일부와 제2 코드의 비트 일부를 조합하여 생성되는 코드일 수 있다.
코드 변환기(520)가 생성한 제2 코드 또는 제3 코드는, 동기화기(530)로 입력될 수 있다. 동기화기(530)는 N개의 비트들 각각에 대응하는 2-FF 동기화기를 포함할 수 있다. 동기화기(530)에 포함되는 플립플롭들(531)은 제2 클럭 신호(CLK2)에 따라 동작할 수 있다. 제2 클럭 신호(CLK2)는 제2 포인터를 생성하는 데에 이용되는 클럭 신호일 수 있다.
동기화기(530)에 의해 제2 클럭 신호(CLK2)에 동기화된 제2 코드 또는 제3 코드는, 코드 복원기(540)에 입력될 수 있다. 코드 복원기(540)는 N-1 개의 XOR 게이트(541)를 포함할 수 있으며, 제2 코드 또는 제3 코드를 제1 코드로 변환할 수 있다. 즉, 코드 복원기(540)의 출력은, 제2 클럭 신호(CLK2)에 동기화된 제1 포인터일 수 있다. 코드 복원기(540)는 제2 멀티플렉서(542)를 포함할 수 있으며, 제2 멀티플렉서(542)의 출력은 코드 선택기(560)에 의해 결정될 수 있다.
비교기(550)는 제2 클럭 신호(CLK2)에 동기화된 제1 포인터와, 제2 포인터를 비교할 수 있다. 제2 포인터는 제2 클럭 신호(CLK2)에 동기화되어 제2 포인터 생성기(570)로부터 생성되므로, 비교기(550)는 제1 포인터와 제2 포인터를 정확하게 비교할 수 있다. 비교기(550)는 제1 포인터와 제2 포인터로부터 버퍼의 오버플로우 및 언더플로우 발생 여부를 판단할 수 있다. 또한, 제1 포인터와 제2 포인터를 비교하여 쓰기 회로와 읽기 회로의 동작을 제어하기 위한 정보를 생성할 수도 있다.
버퍼의 모든 저장 공간에 심볼이 저장되면, 버퍼 컨트롤러는 스킵 심볼을 삭제하여 오버플로우를 방지할 수 있다. 한편, 버퍼의 모든 저장 공간이 비어 있으면, 버퍼 컨트롤러는 스킵 심볼을 추가하여 언더플로우를 방지할 수 있다. 이와 같이 스킵 심볼을 삭제 또는 추가하는 경우가 발생하면, 코드 선택기(560)는 코드 선택 명령(CODE_CHG)을 통해 제1 멀티플렉서(522)가 제1 코드의 최하위 비트를 출력하도록 제어할 수 있다. 따라서, 코드 변환기(520)는 제1 코드를 제3 코드로 변환할 수 있다. 또한, 스킵 심볼을 삭제 또는 추가하는 경우가 발생하면, 코드 선택기(560)는 제2 멀티플렉서(542)가 제3 코드의 최하위 비트를 출력하도록 제어할 수 있다.
요약하면, 스킵 심볼을 삭제 또는 추가하는 경우에 코드 변환기(520)는 제1 코드를 제3 코드로 변환할 수 있으며, 제2 클럭 신호(CLK2)에 동기화된 제3 코드는 코드 복원기(540)에 의해 다시 제1 코드로 변환될 수 있다. 한편, 스킵 심볼을 삭제 또는 추가하지 않는 경우에는, 제1 코드를 제2 코드로 변환할 수 있으며, 제2 클럭 신호(CLK2)에 동기화된 제2 코드는 코드 복원기(540)에 의해 다시 제1 코드로 변환될 수 있다. 도 8에 도시한 일 실시예에와 같이 버퍼 컨트롤러(500)를 구현함으로써, 스킵 심볼의 추가 또는 삭제와 관계없이, 동기화 과정에서 준안정적 상태가 발생하는 것을 방지하여 제1 포인터와 제2 포인터를 정확히 비교할 수 있다.
도 9 내지 도 16은 본 발명의 일 실시예에 따른 메모리 장치의 동작을 설명하기 위해 제공되는 도면들이다.
도 9에 도시한 일 실시예에서 버퍼는 총 16개의 저장 공간을 가질 수 있다. 버퍼 컨트롤러는 스킵 심볼을 하나씩 추가 또는 삭제할 수 있으며, 일반적인 동작에서 버퍼에 저장되는 제1 데이터 및 버퍼로부터 출력되는 제2 데이터 각각은 2개의 심볼들을 포함할 수 있다. 도 9를 참조하면 버퍼의 주소는 0부터 15로 정의되며, 제1 포인터 생성기는 버퍼의 주소를 4개의 비트를 갖는 제1 코드로 인코딩하여 제1 포인터를 생성할 수 있다. 도 9에 도시한 일 실시예에서 제1 코드는 바이너리 코드일 수 있다.
버퍼 컨트롤러에 포함되는 코드 변환기는, 제1 코드를 제2 코드 또는 제3 코드로 변환할 수 있다. 제2 코드는 바이너리 코드인 제1 코드로부터 생성되는 그레이 코드일 수 있다. 한편, 제3 코드는, 상위 3개의 비트는 제2 코드와 같고, 하위 1개의 비트는 제1 코드와 같은 코드일 수 있다. 도 9를 참조하면, 제2 코드는 버퍼의 주소가 하나씩 이동할 때마다 하나의 비트만이 변할 수 있다. 반면, 제3 코드는 버퍼의 주소가 둘씩 이동할 때마다 하나의 비트만이 변할 수 있다.
앞서 설명한 바와 같이, 버퍼 컨트롤러의 쓰기 동작에 필요한 주소를 지정하는 제1 포인터는 제1 클럭 신호에 동기화되어 생성되고, 읽기 동작에 필요한 주소를 지정하는 제2 포인터는 제2 클럭 신호에 동기화되어 생성될 수 있다. 버퍼 컨트롤러는 버퍼를 정확히 제어하기 위해 제1 포인터와 제2 포인터를 비교할 수 있으며, 정확한 비교를 위해 제1 포인터를 제2 클럭 신호에 동기화하거나, 제2 포인터를 제1 클럭 신호에 동기화하는 과정이 수반될 수 있다. 상기 동기화 과정에서 준안정적 상태가 발생하지 않도록, 제1 포인터와 제2 포인터 각각은, 클럭 신호의 매 주기마다 하나의 비트만이 변해야 한다.
버퍼 컨트롤러는 스킵 심볼을 처리해야 하는 경우 하나의 스킵 심볼만을 추가 또는 삭제할 수 있으며, 스킵 심볼과 무관한 동작에서는 2개의 심볼들을 동시에 저장하거나 읽어올 수 있다. 본 발명의 일 실시예에서는, 스킵 심볼을 처리하는 동작에서는 제1 포인터를 제2 코드로 변환하여 제2 클럭 신호에 동기화시키고, 스킵 심볼과 무관한 동작에서는 제1 포인터를 제3 코드로 변환하여 제2 클럭 신호에 동기화시킬 수 있다. 따라서, 동작 조건과 무관하게 버퍼의 주소를 나타내는 코드가 하나의 비트만 변하게 되므로, 동기화 과정에서 준안정적 상태가 발생하는 것을 방지할 수 있다.
도 10 및 도 11을 참조하면, 본 발명의 일 실시예에 따른 메모리 장치(600)는 버퍼(610), 쓰기 회로(620) 및 포인터 생성기(630) 등을 포함할 수 있다. 우선 도 10을 참조하면, 쓰기 회로(620)는 두 개의 심볼 A, B를 주소 0과 1이 가리키는 버퍼(610)의 저장 공간에 저장할 수 있다. 포인터 생성기(630)가 생성하는 제1 포인터는, 주소 0을 제1 코드로 인코딩한 값인 [0000]을 가질 수 있다. 심볼 A, B의 저장이 완료되면, 포인터 생성기(630)는 제1 포인터의 값을 [0010]으로 갱신할 수 있다. 상기 값은 쓰기 회로(620)가 제1 클럭 신호(CLK1)의 다음 주기에 심볼들을 저장해야 하는 주소 2를 제1 코드로 인코딩한 값일 수 있다.
도 10에 도시한 일 실시예와 같이 스킵 심볼을 처리하지 않는 동작에서는, 제1 포인터의 값이 제3 코드로 변환되어 동기화될 수 있다. 도 9를 다시 참조하면, 심볼 A, B가 저장되기 전에 제1 포인터가 가리키는 주소 0에 대응하는 제3 코드는 [0000]이며, 심볼 A, B가 저장된 후 제1 포인터가 가리키는 주소 2에 대응하는 제3 코드는 [0010]일 수 있다. 따라서, 심볼 A, B의 저장 전후에 제3 코드의 비트들 중에서 하나의 값만 변하므로, 2-FF 동기화기를 이용한 동기화 과정에서 준안정적 상태가 발생하지 않을 수 있다.
도 11에 도시한 일 실시예는, 스킵 심볼을 처리하는 동작에 해당할 수 있다. 도 11을 참조하면, 쓰기 회로(620)는 스킵 심볼(SKIP)을 버퍼(610)의 주소 5에 저장할 수 있다. 도 9를 다시 참조하면, 스킵 심볼(SKIP)이 저장될 저장 공간에 대응하는 주소 5를 제3 코드로 인코딩한 값은 [0111]이며, 스킵 심볼(SKIP)이 저장된 후에 제1 포인터가 가리키는 주소 6에 대응하는 제3 코드는 [0100]일 수 있다. 따라서, 도 11에 도시한 일 실시예에서 제1 포인터의 값을 제3 코드로 변환한 후 제2 클럭 신호에 동기화하면, 동기화 과정에서 준안정적 상태가 발생할 수 있다.
본 발명에서는 이러한 문제를 해결하기 위해, 스킵 심볼(SKIP)을 처리하는 경우에는 제1 포인터의 값을 제2 코드로 변환한 후 제2 클럭 신호에 동기화할 수 있다. 도 9를 참조하면, 스킵 심볼(SKIP)을 저장할 주소 5를 제2 코드로 인코딩한 값은 [0111]이며, 스킵 심볼(SKIP)이 저장된 후에 제1 포인터가 가리키는 주소 6에 대응하는 제2 코드는 [0101]일 수 있다. 따라서, 스킵 심볼(SKIP)의 저장 전후에 제2 코드의 비트들 중 하나의 값만 변하므로, 2-FF 동기화기를 이용한 동기화 과정에서 준안정적 상태가 발생하지 않을 수 있다.
다음으로 도 12를 참조하면, 도 12에 도시한 일 실시에에서 버퍼는 총 16개의 저장 공간을 가질 수 있다. 버퍼 컨트롤러는 스킵 심볼을 두 개씩 추가 또는 삭제할 수 있으며, 일반적인 동작에서 버퍼에 저장되는 제1 데이터 및 버퍼로부터 출력되는 제2 데이터 각각은 네 개의 심볼들을 포함할 수 있다. 도 9를 참조하면 버퍼의 저장 공간들을 식별하기 위한 주소는 0부터 15로 정의되며, 제1 포인터 생성기는 버퍼의 주소를 4개의 비트를 갖는 제1 코드로 인코딩하여 제1 포인터를 생성할 수 있다. 도 12에 도시한 일 실시예에서 제1 코드는 바이너리 코드일 수 있다.
버퍼 컨트롤러에 포함되는 코드 변환기는, 제1 코드를 제2 코드 또는 제3 코드로 변환할 수 있다. 제2 코드는 도 9에 도시한 일 실시예의 제3 코드와 같은 방식으로 생성될 수 있다. 즉, 도 12에 도시한 일 실시예에서, 제2 코드의 최하위 비트는 제1 코드의 최하위 비트와 같고, 제2 코드의 상위 3개의 비트들은 제1 코드로부터 생성된 그레이 코드의 상위 3개의 비트들과 같을 수 있다. 한편 도 12에 도시한 일 실시예에서, 제3 코드의 하위 2개의 비트들은 제1 코드의 하위 2개의 비트들과 같을 수 있다. 또한, 제3 코드의 상위 2개의 비트들은 제1 코드로부터 생성된 그레이 코드의 상위 2개의 비트들과 같을 수 있다
도 12에 도시한 일 실시예에서는 버퍼 컨트롤러가 스킵 심볼을 처리하는 경우에 두 개의 심볼들이 버퍼에 저장될 수 있으며, 스킵 심볼과 무관한 동작에서는 네 개의 심볼들이 클럭 신호의 한 주기 동안 버퍼에 저장되거나, 버퍼로부터 출력될 수 있다. 도 12에 도시한 일 실시예에서, 스킵 심볼을 처리하는 경우에는 제1 포인터의 값을 제2 코드로 변환하여 제2 클럭 신호에 동기화하고, 스킵 심볼과 무관한 동작에서는 제1 포인터의 값을 제3 코드로 변환하여 제2 클럭 신호에 동기화할 수 있다. 따라서, 스킵 심볼의 처리 여부와 관계없이 버퍼의 주소를 나타내는 코드가 클럭 신호의 매 주기마다 하나의 비트만 변하게 되므로, 동기화 과정에서 준안정적 상태가 발생하는 것을 방지할 수 있다.
도 13 및 도 14를 참조하면, 본 발명의 일 실시예에 따른 메모리 장치(700)는 버퍼(710), 쓰기 회로(720) 및 포인터 생성기(730) 등을 포함할 수 있다. 도 13은 스킵 심볼을 처리하지 않는 일반적인 경우에 메모리 장치(700)의 동작을 나타낸 일 실시예이며, 도 14는 스킵 심볼을 처리하는 경우에 메모리 장치(700)의 동작을 나타낸 일 실시예일 수 있다.
먼저 도 13을 참조하면, 쓰기 회로(720)는 네 개의 심볼 A, B, C, D 각각을 주소 0, 1, 2, 3이 가리키는 버퍼(710)의 저장 공간에 저장할 수 있다. 포인터 생성기(730)가 생성하는 제1 포인터는, 네 개의 심볼 A, B, C, D를 저장하기 위한 저장 공간들 중, 첫 저장 공간에 대응하는 주소 0을 제1 코드로 인코딩한 값인 [0000]을 가질 수 있다. 심볼 A, B, C, D의 저장이 완료되면, 포인터 생성기(730)는 제1 포인터의 값을 [0100]으로 갱신할 수 있다. 제1 포인터의 갱신된 값은 쓰기 회로(720)가 제1 클럭 신호(CLK1)의 다음 주기에 심볼들을 저장할 저장 공간들 중에서, 첫 저장 공간에 대응하는 주소 4를 제1 코드로 인코딩한 값일 수 있다.
도 13에 도시한 일 실시예와 같이 스킵 심볼을 처리하지 않는 경우에는, 제1 포인터의 값이 제3 코드로 변환되어 제2 클럭 신호에 동기화될 수 있다. 심볼 A, B, C, D가 저장되기 전에 제1 포인터가 가리키는 주소 0에 대응하는 제3 코드는 [0000]이며, 심볼 A, B, C, D가 저장된 후 제1 포인터가 가리키는 주소 4에 대응하는 제3 코드는 [0100]일 수 있다. 제1 클럭 신호(CLK1)의 한 주기 동안 4개의 저장 공간에 4개의 심볼을 저장하므로 버퍼의 주소는 제1 클럭 신호(CLK1)의 매 주기마다 4씩 변할 수 있다. 도 12를 참조하면, 제3 코드는 버퍼의 주소가 4씩 변할 때마다 하나의 비트만이 변하는 특성을 가질 수 있다. 따라서, 버퍼의 주소를 제3 코드로 인코딩하고 제2 클럭 신호에 동기화함으로써, 동기화 과정에서 준안정적 상태가 발생하지 않을 수 있다.
도 14에 도시한 일 실시예는, 스킵 심볼을 처리하는 동작에 해당할 수 있다. 도 14를 참조하면, 쓰기 회로(720)는 스킵 심볼들(SKIP1, SKIP2)을 버퍼(710)의 주소 6, 7이 가리키는 저장 공간들에 저장할 수 있다. 도 12를 참조하면, 스킵 심볼들(SKIP1, SKIP2)이 저장되기 전에 제1 포인터가 가리키는 주소 6을 나타내는 제3 코드는 [0110]이며, 스킵 심볼들(SKIP1, SKIP2)이 저장된 후에 제1 포인터가 가리키는 주소 8을 나타내는 제3 코드는 [1100]일 수 있다. 따라서, 도 14에 도시한 일 실시예에서 제1 포인터의 값을 제3 코드로 변환한 후 제2 클럭 신호에 동기화하면, 동기화 과정에서 준안정적 상태가 발생할 수 있다.
본 발명에서는 이러한 문제를 해결하기 위해, 스킵 심볼들(SKIP1, SKIP2)을 처리하는 경우에는 제1 포인터의 값을 제2 코드로 변환한 후 제2 클럭 신호에 동기화할 수 있다. 도 12를 참조하면, 스킵 심볼들(SKIP1, SKIP2)이 저장되기 전에 제1 포인터가 가리키는 주소 6을 나타내는 제2 코드는 [0100]이며, 스킵 심볼들(SKIP1, SKIP2)이 저장된 후에 제1 포인터가 가리키는 주소 8을 나타내는 제2 코드는 [1100]일 수 있다. 따라서, 스킵 심볼(SKIP)의 저장 전후에 제2 코드의 비트들 중 하나의 값만 변하므로, 동기화 과정에서 준안정적 상태가 발생하지 않을 수 있다.
도 15에 도시한 일 실시예에서는, 버퍼가 32개의 저장 공간을 포함하고, 버퍼 컨트롤러가 제1 클럭 신호(CLK1)의 한 주기 동안 8개의 심볼들을 동시에 저장하며, 제2 클럭 신호(CLK2)의 한 주기 동안 8개의 심볼들을 동시에 읽어올 수 있다. 한편, 도 15에 도시한 일 실시예에서 스킵 심볼들을 처리해야 하는 경우, 버퍼 컨트롤러는 4개의 스킵 심볼들을 동시에 추가 또는 삭제할 수 있다.
제1 코드는 버퍼의 주소를 가리키는 제1 포인터의 값이며, 제1 포인터의 값은 제1 클럭 신호에 따라 갱신될 수 있다. 제2 코드와 제3 코드는 제1 코드로부터 생성되는 코드이며, 제1 포인터를 상기 제1 클럭 신호와 다른 제2 클럭 신호에 동기화하는 과정에서 이용될 수 있다. 일 실시예에서, 버퍼 컨트롤러는 제1 포인터의 값을 제2 코드 또는 제3 코드로 변환한 후 상기 제2 클럭 신호에 동기화시킬 수 있다.
버퍼 컨트롤러가 스킵 심볼들을 추가 또는 삭제하는 경우, 버퍼 컨트롤러는 버퍼의 주소를 가리키는 제1 포인터의 값(제1 코드)을 제2 코드로 변환하여 상기 제2 클럭 신호에 동기화시킬 수 있다. 앞서 설명한 바와 같이 도 15에 도시한 일 실시예에서 스킵 심볼들은 4개씩 추가 또는 삭제될 수 있다. 제2 코드는 버퍼의 주소가 4씩 변할 때 하나의 비트만이 변하는 특성을 가질 수 있다. 따라서, 스킵 심볼들을 추가 또는 삭제해야 할 때, 제1 포인터의 값을 제2 코드로 변환하고 상기 제2 클럭 신호에 동기화시킴으로써, 동기화 과정에서 준안정적 상태가 발생하는 것을 방지할 수 있다.
한편 버퍼 컨트롤러가 스킵 심볼들을 처리하지 않는 경우, 버퍼 컨트롤러는 버퍼의 주소를 가리키는 제1 포인터의 값(제1 코드)을 제3 코드로 변환하여 상기 제2 클럭 신호에 동기화시킬 수 있다. 앞서 설명한 바와 같이 도 15에 도시한 일 실시예에서 일반적인 데이터를 포함하는 심볼들은 8개씩 버퍼에 저장되거나, 버퍼로부터 출력될 수 있다. 제3 코드는 버퍼의 주소가 8씩 변할 때 하나의 비트만이 변하는 특성을 가질 수 있다. 따라서, 스킵 심볼을 처리하지 않는 일반적인 동작 조건에서, 제1 포인터의 값을 제3 코드로 변환하고 상기 제2 클럭 신호에 동기화시킴으로써, 동기화 과정에서 준안정적 상태가 발생하는 것을 방지할 수 있다.
도 16은 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작을 설명하기 위해 제공되는 흐름도이다.
도 16을 참조하면, 본 발명의 일 실시예에 따른 버퍼 컨트롤러의 동작은, 버퍼 컨트롤러가 입력 데이터를 수신하는 것으로 시작될 수 있다(S10). S10 단계에서 수신하는 입력 데이터는 직렬 통신 인터페이스를 통해 비트 스트림 형태로 전송되는 데이터일 수 있다. 버퍼 컨트롤러는 직병렬 변환기를 이용하여 입력 데이터로부터 복수의 심볼들을 추출하는 한편, 입력 데이터를 전송하는 데에 이용된 제1 클럭 신호를 복원할 수 있다.
버퍼 컨트롤러는 제1 클럭 신호에 동기화되어 생성되는 제1 포인터를 생성할 수 있다(S20). 제1 포인터는, 버퍼 컨트롤러가 심볼들을 저장할 버퍼의 저장 공간의 주소를 가리키는 파라미터일 수 있다. 일 실시예에서 제1 포인터는, 버퍼의 저장 공간의 주소를 제1 코드로 인코딩한 값을 가질 수 있다.
다음으로 버퍼 컨트롤러는, 입력 데이터에서 추출한 심볼들을 제1 데이터로서 버퍼에 저장할 수 있다(S30). 제1 데이터는 제1 클럭 신호에 동기화되어 버퍼에 저장될 수 있으며, 일 실시예로 제1 포인터가 가리키는 주소에 대응하는 저장 공간에 제1 데이터가 저장될 수 있다. 제1 클럭 신호의 한 주기 동안 버퍼에 저장되는 제1 데이터는 복수의 심볼들을 포함할 수 있다.
심볼들이 버퍼에 저장되면, 버퍼 컨트롤러는 제1 포인터를 갱신할 수 있다(S30). 제1 클럭 신호의 제1 주기 동안 심볼들이 저장되면, 제1 주기 다음에 도래하는 제2 주기 동안 심볼들이 저장될 저장 공간의 주소를 가리키도록, 제1 포인터가 갱신될 수 있다. 따라서, 제1 데이터를 저장하는 프로세스와 마찬가지로, 제1 포인터를 갱신하는 프로세스 역시 제1 클럭 신호에 동기화되어 수행될 수 있다.
버퍼 컨트롤러는 제1 포인터를 전송 코드로 인코딩하여 제1 전송 포인터를 생성할 수 있다(S40). 제1 전송 포인터는 제1 클럭 신호와 다른 제2 클럭 신호에 동기화되어 제2 포인터와 비교될 수 있다(S50). 버퍼 컨트롤러는, 제1 포인터와 제2 포인터의 비교 결과에 기초하여 버퍼의 상태를 판단할 수 있다(S60).
본 발명의 일 실시예에서, 제1 클럭 신호와 제2 클럭 신호는 각각 버퍼에 데이터를 저장하거나 버퍼로부터 데이터를 읽어오는 동작에 필요한 클럭 신호일 수 있다. 한편, 제1 포인터와 제2 포인터는 데이터를 저장하거나 데이터를 읽어올 버퍼의 저장 공간에 할당된 주소를 가리키는 값을 가질 수 있다. 버퍼 컨트롤러는 제1 포인터와 제2 포인터를 이용하여 버퍼의 상태를 판단할 수 있다.
버퍼 컨트롤러가 버퍼의 상태를 정확히 판단하기 위해서는, 제1 포인터와 제2 포인터의 정확한 비교가 필요할 수 있다. 그러나, 제1 포인터는 제1 클럭 신호에 동기화되어 생성되고, 제2 포인터는 제2 클럭 신호에 동기화되어 생성되므로, 제1 클럭 신호와 제2 클럭 신호가 다를 경우 제1 포인터와 제2 포인터가 정확히 비교될 수 없다. 이러한 문제를 해결하기 위해, 제1 포인터를 제2 클럭 신호에 동기화한 후 제2 포인터와 비교하거나, 제2 포인터를 제1 클럭 신호에 동기화한 후 제1 포인터와 비교하는 방법을 이용할 수 있다.
제1 포인터와 제2 포인터 각각의 값은 N개(N은 자연수)의 비트를 갖는 디지털 코드를 가질 수 있다. 제1 포인터를 제2 클럭 신호에 동기화하거나 제2 포이?를 제1 클럭 신호에 동기화할 때, 복수의 플립플롭이 직렬 연결된 동기화기를 이용할 수 있다. 클럭의 매 주기마다 제1 포인터나 제2 포인터에 포함되는 N개의 비트들 중에서 2개 이상의 비트들이 동시에 변할 경우, 동기화기에서 준안정적 상태가 발생하여 정확한 동기화가 수행되지 않을 수 있다.
도 16에 도시한 일 실시예에서는 S50 및 S60 단계에서 상기와 같은 문제를 해결할 수 있다. 클럭의 매 주기마다 전송 코드는 제1 포인터에 포함되는 N개의 비트들 중에서 하나의 비트만이 변하는 코드일 수 있다. 따라서, 제1 포인터의 값을 전송 코드로 인코딩하여 생성된 제1 전송 포인터를 제2 클럭 신호에 동기화시킴으로써, 동기화기에서 준안정석 상태가 발생하는 것을 방지할 수 있다. 마찬가지로, 제2 포인터 역시 전송 코드로 인코딩된 후 제1 클럭 신호에 동기화될 수 있다.
본 발명은 상술한 실시형태 및 첨부된 도면에 의해 한정되는 것이 아니며 첨부된 청구범위에 의해 한정하고자 한다. 따라서, 청구범위에 기재된 본 발명의 기술적 사상을 벗어나지 않는 범위 내에서 당 기술분야의 통상의 지식을 가진 자에 의해 다양한 형태의 치환, 변형 및 변경이 가능할 것이며, 이 또한 본 발명의 범위에 속한다고 할 것이다.
110: 버퍼
120, 200: 버퍼 컨트롤러
210: 코드 변환기
220: 동기화기
230: 코드 복원기
240: 비교기
120, 200: 버퍼 컨트롤러
210: 코드 변환기
220: 동기화기
230: 코드 복원기
240: 비교기
Claims (20)
- 제1 클럭 신호에 따라 동작하며, 버퍼의 제1 주소를 제1 코드로 인코딩하여 제1 포인터를 생성하는 포인터 생성기;
상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기에 따라, 상기 제1 코드와 다른 제2 코드 및 제3 코드 중 하나로 상기 제1 포인터를 변환하여 제1 전송 포인터를 생성하는 코드 변환기;
상기 제1 전송 포인터를 상기 제1 클럭 신호와 다른 제2 클럭 신호에 동기화하는 동기화기; 및
상기 제2 클럭 신호에 동기화된 상기 제1 전송 포인터를, 상기 제1 코드로 복원하여 제1 비교 포인터를 생성하는 코드 복원기; 및
상기 버퍼의 제2 주소를 상기 제1 코드로 정의하는 제2 포인터와, 상기 제1 비교 포인터를 비교하는 비교기; 를 포함하는 버퍼 컨트롤러.
- 제1항에 있어서,
상기 동기화기 및 상기 코드 복원기는 상기 제2 클럭 신호에 따라 동작하는 버퍼 컨트롤러.
- 제1항에 있어서,
상기 비교기는, 상기 제1 비교 포인터를 상기 제2 포인터와 비교하여 상기 버퍼에서 오버플로우 및 언더플로우 중 적어도 하나가 발생하는지 여부를 판단하는 버퍼 컨트롤러.
- 제1항에 있어서,
상기 제1 코드는 바이너리 코드이며, 상기 제2 코드는 상기 제1 코드로부터 생성되는 그레이 코드이고, 상기 제3 코드는 상기 제1 코드의 일부와 상기 제2 코드의 일부를 조합하여 생성되는 코드이며,
상기 제1 코드 내지 제3 코드 각각은 N개(N은 2보다 큰 자연수)의 비트를 포함하는 버퍼 컨트롤러.
- 제4항에 있어서,
상기 제1 클럭 신호의 한 주기 동안 상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기가 제1 크기이면, 상기 코드 변환기는 상기 제1 포인터를 상기 제2 코드로 변환하는 버퍼 컨트롤러.
- 제5항에 있어서,
상기 제1 클럭 신호의 한 주기 동안 상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기가 상기 제1 크기보다 큰 제2 크기이면, 상기 코드 변환기는 상기 제1 포인터를 상기 제3 코드로 변환하는 버퍼 컨트롤러.
- 제4항에 있어서,
상기 제3 코드의 상위 n개(n은 N보다 작은 자연수)의 비트는 상기 제2 코드의 상위 n개의 비트와 동일하며,
상기 제3 코드의 하위 N-n개의 비트는 상기 제1 코드의 하위 N-n개의 비트와 동일한 버퍼 컨트롤러.
- 제7항에 있어서,
상기 코드 변환기는,
상기 제1 코드를 상기 제2 코드로 변환하는 제2 코드 생성기;
상기 제1 코드의 일부와 상기 제2 코드의 일부를 조합하여 상기 제3 코드를 생성하는 제3 코드 생성기; 및
상기 제1 클럭 신호의 한 주기 동안 상기 제1 주소에 저장되거나 상기 제1 주소로부터 읽어오는 데이터의 크기에 기초하여, 상기 코드 변환기가 상기 제2 코드 및 상기 제3 코드 중 하나를 출력하도록 제어하는 코드 선택기; 를 포함하는 버퍼 컨트롤러.
- 제8항에 있어서,
상기 제2 코드 생성기는 N-1 개의 XOR 게이트를 포함하는 버퍼 컨트롤러.
- 제7항에 있어서,
상기 n은 상기 데이터에 추가되거나 상기 데이터로부터 삭제되는 스킵 심볼(Skip Symbol)의 크기에 따라 결정되는 버퍼 컨트롤러.
- 제7항에 있어서,
상기 코드 변환기는, 상기 제1 코드의 하위 N-n개 비트와 상기 제2 코드의 하위 N-n개 비트 중 어느 하나를 선택하는 멀티플렉서를 포함하는 버퍼 컨트롤러.
- 제1항에 있어서,
상기 동기화기는 서로 직렬로 연결되는 복수의 플립플롭들을 포함하며, 상기 복수의 플립플롭들은 상기 제2 클럭 신호에 따라 동작하는 버퍼 컨트롤러.
- 버퍼;
제1 클럭 신호에 따라 동작하며, 상기 버퍼의 제1 주소를 제1 코드로 인코딩하여 제1 포인터를 생성하는 제1 포인터 생성기;
상기 제1 주소에 대응하는 상기 버퍼의 저장 공간에 제1 데이터를 저장하는 쓰기 회로;
상기 제1 클럭 신호와 다른 제2 클럭 신호에 따라 동작하며, 상기 버퍼의 제2 주소를 상기 제1 코드로 인코딩하여 제2 포인터를 생성하는 제2 포인터 생성기;
상기 제2 주소에 대응하는 상기 버퍼의 저장 공간에 저장된 제2 데이터를 읽어오는 읽기 회로; 및
상기 제1 포인터를 상기 제1 코드와 다른 전송 코드로 변환한 후 상기 제2 클럭 신호에 동기화하며, 상기 제2 클럭 신호에 동기화된 상기 제1 포인터를 상기 제1 코드로 복원하여 상기 제2 포인터와 비교하는 포인터 동기화기; 를 포함하며,
상기 전송 코드는, 상기 제1 클럭 신호의 주기마다 하나의 비트만이 변하는 코드인 메모리 장치.
- 제13항에 있어서,
상기 포인터 동기화기는,
상기 제2 포인터를 상기 전송 코드로 변환한 후 상기 제1 클럭 신호에 동기화하며, 상기 제1 클럭 신호에 동기화된 상기 제2 포인터를 상기 제1 코드로 복원하여 제1 포인터와 비교하는 메모리 장치.
- 제13항에 있어서,
상기 전송 코드는 상기 제1 코드와 다른 제2 코드 및 제3 코드 중 어느 하나이며, 상기 제3 코드는 상기 제1 코드의 비트 일부와 상기 제2 코드의 비트 일부를 조합하여 생성되는 메모리 장치.
- 제15항에 있어서,
상기 제1 코드는 바이너리 코드이고, 상기 제2 코드는 그레이 코드인 메모리 장치.
- 제16항에 있어서,
상기 포인터 동기화기는, 상기 제2 코드의 상위 비트 일부와 상기 제1 코드의 하위 비트 일부를 조합하여 상기 제3 코드를 생성하는 메모리 장치.
- 제1 클럭 신호에 따라 동작하는 제1 회로;
상기 제1 클럭 신호와 다른 제2 클럭 신호에 따라 동작하는 제2 회로; 및
상기 제1 회로가 입력하는 제1 데이터를 상기 제1 클럭 신호에 따라 제1 주소에 저장하고, 제2 주소에 저장된 제2 데이터를 상기 제2 클럭 신호에 따라 상기 제2 회로로 출력하는 메모리 장치; 를 포함하며,
상기 메모리 장치는 상기 제1 주소를 가리키는 제1 포인터를 전송 코드로 인코딩한 후 상기 제2 클럭 신호에 동기화시켜 상기 제2 주소를 가리키는 제2 포인터와 비교하고, 상기 제2 포인터를 상기 전송 코드로 인코딩한 후 상기 제1 클럭 신호에 동기화시켜 상기 제1 포인터와 비교하며,
상기 전송 코드는 상기 제1 클럭 신호에 동기화되어 상기 메모리 장치에 저장되는 상기 제1 데이터의 크기, 및 상기 제2 클럭 신호에 동기화되어 상기 메모리 장치가 출력하는 상기 제2 데이터의 크기에 무관하게 하나의 비트만이 변하는 코드인 집적회로 장치.
- 제18항에 있어서,
상기 전송 코드는 그레이 코드, 및 그레이 코드와 바이너리 코드를 조합한 코드 중 어느 하나인 집적회로 장치.
- 제18항에 있어서,
상기 제1 회로는 직렬 통신 인터페이스를 통해 상기 제1 데이터를 포함하는 입력 데이터를 수신하는 집적회로 장치.
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170088401A KR102342547B1 (ko) | 2017-07-12 | 2017-07-12 | 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 |
US15/855,819 US10509760B2 (en) | 2017-07-12 | 2017-12-27 | Buffer controller, memory device, and integrated circuit device |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
KR1020170088401A KR102342547B1 (ko) | 2017-07-12 | 2017-07-12 | 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 |
Publications (2)
Publication Number | Publication Date |
---|---|
KR20190007227A true KR20190007227A (ko) | 2019-01-22 |
KR102342547B1 KR102342547B1 (ko) | 2021-12-23 |
Family
ID=64999628
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
KR1020170088401A KR102342547B1 (ko) | 2017-07-12 | 2017-07-12 | 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 |
Country Status (2)
Country | Link |
---|---|
US (1) | US10509760B2 (ko) |
KR (1) | KR102342547B1 (ko) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10438648B2 (en) * | 2018-01-11 | 2019-10-08 | Micron Technology, Inc. | Apparatuses and methods for maintaining a duty cycle error counter |
US11328755B2 (en) * | 2020-04-03 | 2022-05-10 | Silicon Laboratories Inc. | Data transmission between clock domains for circuits such as microcontrollers |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040255188A1 (en) * | 2003-05-30 | 2004-12-16 | John Lo | Method and apparatus for determining a status of an asynchronous memory |
US20080034183A1 (en) * | 2006-08-07 | 2008-02-07 | Symbol Technologies, Inc. | Protecting Critical Pointer Value Updates To Non-Volatile Memory Under Marginal Write Conditions |
US20100005250A1 (en) * | 2008-07-02 | 2010-01-07 | Cradle Technologies, Inc. | Size and retry programmable multi-synchronous fifo |
US20100174877A1 (en) * | 2009-01-07 | 2010-07-08 | Nec Electronics Corporation | Ring buffer circuit and control circuit for ring buffer circuit |
US20100306426A1 (en) * | 2007-05-16 | 2010-12-02 | Nxp B.V. | Fifo buffer |
Family Cites Families (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4692894A (en) | 1984-12-18 | 1987-09-08 | Advanced Micro Devices, Inc. | Overflow/Underflow detection for elastic buffer |
US5323426A (en) | 1992-02-21 | 1994-06-21 | Apple Computer, Inc. | Elasticity buffer for data/clock synchronization |
US6434642B1 (en) | 1999-10-07 | 2002-08-13 | Xilinx, Inc. | FIFO memory system and method with improved determination of full and empty conditions and amount of data stored |
US6594329B1 (en) | 1999-11-01 | 2003-07-15 | Intel Corporation | Elastic buffer |
US6693918B1 (en) | 2000-04-28 | 2004-02-17 | Agilent Technologies, Inc. | Elastic buffers for serdes word alignment and rate matching between time domains |
JP3803246B2 (ja) | 2000-12-05 | 2006-08-02 | 松下電器産業株式会社 | 非同期fifo回路 |
US6553448B1 (en) | 2001-03-01 | 2003-04-22 | 3Com Corporation | Method for unit distance encoding of asynchronous pointers for non-power-of-two sized buffers |
US7082504B2 (en) | 2002-07-19 | 2006-07-25 | Edmundo Rojas | Method and apparatus for asynchronous read control |
US20050091470A1 (en) | 2003-10-24 | 2005-04-28 | Anand Pande | Calculation of gray codes using exhaustive combinations |
US6937172B1 (en) | 2004-05-04 | 2005-08-30 | Xilinx, Inc. | Method and system for gray-coding counting |
JP4417807B2 (ja) | 2004-08-25 | 2010-02-17 | 株式会社東芝 | エラスティックバッファ |
US20090086874A1 (en) | 2007-09-28 | 2009-04-02 | Junning Wang | Apparatus and method of elastic buffer control |
US20120317380A1 (en) | 2011-06-11 | 2012-12-13 | Agrawal Vikas Kumar | Device and method for a half-rate clock elasticity fifo |
JP6030033B2 (ja) | 2013-09-02 | 2016-11-24 | アルプス電気株式会社 | メモリ装置 |
-
2017
- 2017-07-12 KR KR1020170088401A patent/KR102342547B1/ko active IP Right Grant
- 2017-12-27 US US15/855,819 patent/US10509760B2/en active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040255188A1 (en) * | 2003-05-30 | 2004-12-16 | John Lo | Method and apparatus for determining a status of an asynchronous memory |
US20080034183A1 (en) * | 2006-08-07 | 2008-02-07 | Symbol Technologies, Inc. | Protecting Critical Pointer Value Updates To Non-Volatile Memory Under Marginal Write Conditions |
US20100306426A1 (en) * | 2007-05-16 | 2010-12-02 | Nxp B.V. | Fifo buffer |
US20100005250A1 (en) * | 2008-07-02 | 2010-01-07 | Cradle Technologies, Inc. | Size and retry programmable multi-synchronous fifo |
US20100174877A1 (en) * | 2009-01-07 | 2010-07-08 | Nec Electronics Corporation | Ring buffer circuit and control circuit for ring buffer circuit |
Also Published As
Publication number | Publication date |
---|---|
KR102342547B1 (ko) | 2021-12-23 |
US10509760B2 (en) | 2019-12-17 |
US20190018816A1 (en) | 2019-01-17 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101373424B (zh) | 一种异步先进先出存储器的数据读写方法、装置及系统 | |
TWI525999B (zh) | 頻率鎖定裝置及方法 | |
US10146251B2 (en) | Semiconductor device | |
KR102342547B1 (ko) | 버퍼 컨트롤러, 메모리 장치 및 집적회로 장치 | |
CN105027019A (zh) | 用于usb系统内的音频取样率转换器的弹性计时 | |
JP4758311B2 (ja) | 非同期データ保持回路 | |
US10237053B2 (en) | Semiconductor device and data synchronization method | |
CN118550356A (zh) | 时钟产生装置、时钟产生方法及电子设备 | |
EP2015457B1 (en) | Serial-to-parallel conversion circuit and method of designing the same | |
CN205176827U (zh) | 具有突发指示符的双同步电子设备 | |
TWI518703B (zh) | 提供多埠功能的記憶體裝置與方法 | |
CN115699668B (zh) | 宽弹性缓冲器 | |
KR102161735B1 (ko) | 펄스폭 변조 데이터 복원 장치 및 이의 구동 방법 | |
CN112148655B (zh) | 多位数据跨时钟域的处理方法及装置 | |
CN108462655B (zh) | Fc链路弹性缓冲区电路 | |
CN110601784B (zh) | Tdm接口扩展方法及装置、设备、可读存储介质 | |
JPH11163951A (ja) | データ受信装置 | |
JP2004037332A (ja) | データ遅延回路 | |
CN114390238A (zh) | 数据转换装置与高画质多媒体接口接收装置 | |
KR102226284B1 (ko) | 시스템온칩 및 이의 구동 방법 | |
CN118733500A (zh) | 数据读取方法和数据读取装置 | |
US20050091470A1 (en) | Calculation of gray codes using exhaustive combinations | |
JP2006065418A (ja) | シリアルパラレル変換回路、および、シリアル伝送装置、並びに、シリアルパラレル変換方法 | |
CN118550531A (zh) | 一种基于lvgl的fpga处理方法 | |
JPH10222439A (ja) | ネットワークコンピューティング方式およびプロセッサ回路 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
A201 | Request for examination | ||
E902 | Notification of reason for refusal | ||
E701 | Decision to grant or registration of patent right | ||
GRNT | Written decision to grant |