KR20200139083A - 메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법 - Google Patents

메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법 Download PDF

Info

Publication number
KR20200139083A
KR20200139083A KR1020200051936A KR20200051936A KR20200139083A KR 20200139083 A KR20200139083 A KR 20200139083A KR 1020200051936 A KR1020200051936 A KR 1020200051936A KR 20200051936 A KR20200051936 A KR 20200051936A KR 20200139083 A KR20200139083 A KR 20200139083A
Authority
KR
South Korea
Prior art keywords
data
command
program
memory
shared memory
Prior art date
Application number
KR1020200051936A
Other languages
English (en)
Other versions
KR102243791B1 (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 KR20200139083A publication Critical patent/KR20200139083A/ko
Application granted granted Critical
Publication of KR102243791B1 publication Critical patent/KR102243791B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/04Detection or location of defective memory elements, e.g. cell constructio details, timing of test signals
    • G11C29/08Functional testing, e.g. testing during refresh, power-on self testing [POST] or distributed testing
    • G11C29/12Built-in arrangements for testing, e.g. built-in self testing [BIST] or interconnection details
    • G11C29/38Response verification devices
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/38Information transfer, e.g. on bus
    • G06F13/42Bus transfer protocol, e.g. handshake; Synchronisation
    • G06F13/4282Bus transfer protocol, e.g. handshake; Synchronisation on a serial bus, e.g. I2C bus, SPI bus
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/2273Test methods
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01RMEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
    • G01R31/00Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
    • G01R31/28Testing of electronic circuits, e.g. by signal tracer
    • G01R31/317Testing of digital circuits
    • G01R31/3181Functional testing
    • G01R31/3183Generation of test inputs, e.g. test vectors, patterns or sequences
    • G01R31/318342Generation of test inputs, e.g. test vectors, patterns or sequences by preliminary fault modelling, e.g. analysis, simulation
    • G01R31/318357Simulation
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01RMEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
    • G01R31/00Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
    • G01R31/28Testing of electronic circuits, e.g. by signal tracer
    • G01R31/317Testing of digital circuits
    • G01R31/31722Addressing or selecting of test units, e.g. transmission protocols for selecting test units
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01RMEASURING ELECTRIC VARIABLES; MEASURING MAGNETIC VARIABLES
    • G01R31/00Arrangements for testing electric properties; Arrangements for locating electric faults; Arrangements for electrical testing characterised by what is being tested not provided for elsewhere
    • G01R31/28Testing of electronic circuits, e.g. by signal tracer
    • G01R31/317Testing of digital circuits
    • G01R31/3181Functional testing
    • G01R31/3183Generation of test inputs, e.g. test vectors, patterns or sequences
    • G01R31/318314Tools, e.g. program interfaces, test suite, test bench, simulation hardware, test compiler, test program languages
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F11/00Error detection; Error correction; Monitoring
    • G06F11/22Detection or location of defective computer hardware by testing during standby operation or during idle time, e.g. start-up testing
    • G06F11/26Functional testing
    • G06F11/261Functional testing by simulating additional hardware, e.g. fault simulation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/14Handling requests for interconnection or transfer
    • G06F13/16Handling requests for interconnection or transfer for access to memory bus
    • G06F13/1668Details of memory controller
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F30/00Computer-aided design [CAD]
    • G06F30/20Design optimisation, verification or simulation
    • GPHYSICS
    • G11INFORMATION STORAGE
    • G11CSTATIC STORES
    • G11C29/00Checking stores for correct operation ; Subsequent repair; Testing stores during standby or offline operation
    • G11C29/02Detection or location of defective auxiliary circuits, e.g. defective refresh counters
    • G11C29/022Detection or location of defective auxiliary circuits, e.g. defective refresh counters in I/O circuitry
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2213/00Indexing scheme relating to interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F2213/0026PCI express

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computer Hardware Design (AREA)
  • Quality & Reliability (AREA)
  • Evolutionary Computation (AREA)
  • Geometry (AREA)
  • Debugging And Monitoring (AREA)
  • Test And Diagnosis Of Digital Computers (AREA)

Abstract

본 발명의 실시예는 시뮬레이션된 장치를 테스트하기 위한 메모리 기반 통신 프로토콜을 시뮬레이션하는 방법을 제공한다. 이 방법은 호스트 데이터 버퍼의 알려진 위치에 데이터를 저장하는 단계 - 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와, 제1 프로그램의 명령어를 실행하여, 인덱스, ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 공유 메모리 공간 내에 명령을 저장하는 단계와, 제2 프로그램의 명령어를 실행하여, 호스트 데이터 버퍼로부터 명령을 판독하고, 공유 메모리 공간 내의 데이터에 액세스하여 상기 데이터를 사용하여 상기 ID에 의해 정의된 동작을 수행하며 - 상기 데이터의 위치는 상기 인덱스에 의해 표시됨 -, 상기 동작이 완료된 후에 완료 표시자를 제1 프로그램으로 전송하는 단계를 포함한다.

Description

메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법{SYSTEMS AND METHODS FOR SIMULATED DEVICE TESTING USING A MEMORY-BASED COMMUNICATION PROTOCOL}
본 발명의 실시예는 일반적으로 장치 테스트 분야에 관한 것이다. 보다 구체적으로, 본 발명의 실시예는 테스트 동안 피시험 장치(device under test: DUT)를 시뮬레이션하기 위한 방법 및 시스템에 관한 것이다.
피시험 장치 또는 장비(DUT)는 일반적으로 장치가 판매되기 전에 장치의 성능 및 일관성(consistency)을 판단하기 위해 테스트된다. 이 장치는 다양한 테스트 케이스(test case)를 이용하여 테스트될 수 있으며, 테스트 케이스의 결과는 예상 출력 결과와 비교된다. 테스트 케이스의 결과가 예상 출력 값과 일치하지 않으면, 장치에서 발생하는 결함을 파악해서 수정하기 위해 디버깅이 수행된다.
DUT는 일반적으로 자동 또는 자동화된 테스트 장비(ATE)에 의해 테스트되는데, 자동 테스트 장비는 테스트의 효율을 향상시키기 위해 소프트웨어 및 자동화를 이용하여 복잡한 테스트를 수행하는 데 사용될 수 있다. DUT는 컴퓨터나 다른 전자 장치와 같은 최종 제품에 통합하고자 하는 메모리 장치 또는 컴포넌트일 수 있다. NAND 플래시 장치 개발 프로세스에 사용된 기존의 시스템 수준 테스트 소프트웨어는 특히 DUT 개발이 거의 완료된 후에 소프트웨어가 테스트되고 디버깅되어야 한다. 긴급한 경우에도, 테스트 프로그램 및 소프트웨어 제품은 일반적으로 고객이 제공한 저장 장치가 개발 및 디버깅 준비가 될 때까지 기다리며, 따라서 테스트 소프트웨어 개발의 생산성이 장치의 완성 정도에 의해 제한되고, 그 결과 마감일을 놓칠 수 있고 철저히 테스트되기 전에 제품이 출시되어야 할 수 있다.
또한, DUT 테스트에 대한 기존의 접근법은 주어진 시간에 DUT의 특정 특성만을 수정할 수 있으며, 어떤 변형들은 별개로만 테스트될 수 있다. 실제 DUT를 사용하기 전에 테스트 소프트웨어를 테스트하고 디버깅하여 제품 개발의 효율성을 향상시킬 수 있고, 테스트의 견고성과 확장성을 향상시키기 위해 수많은 변수를 테스트하도록 맞춤화될 수 있는, 장치 개발 완료에 의존하지 않는 DUT 테스트 수행 방법이 필요하다.
본 발명의 실시예는, 실제 DUT를 사용하기 전에 테스트 소프트웨어로 시뮬레이션된 장치를 테스트하고 디버깅하여 제품 개발의 효율을 향상시킬 수 있고, 테스트의 견고성과 확장성을 향상시키기 위해 수많은 변수들을 테스트하도록 맞춤화될 수 있는, 장치 개발 완료에 의존하지 않는 DUT 테스트를 수행하기 위한 시스템 및 방법을 제공한다. 테스트는 DUT의 사양에 따라 API 수준에서 수행될 수 있다. 개발 프로세스 초기에 테스트 및 디버깅을 수행하면, 실제 장치를 테스트할 수 있을 때 디버깅 및 재설계가 덜 필요하므로, 장치의 배송 날짜가 더 빨라진다.
일 실시예에 따르면, 시뮬레이션된 장치를 테스트하기 위한 메모리 기반 통신 프로토콜을 시뮬레이션하는 방법이 개시된다. 이 방법은 호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트는 테스터 시스템이고, 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와, 테스터 시스템 프로그램의 명령어를 실행하여, 인덱스, ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 공유 메모리 공간 내에 명령을 저장하는 단계와, DUT 시뮬레이션의 명령어를 실행하여, 상기 공유 메모리 공간으로부터 상기 명령을 판독하고, 상기 공유 메모리 공간의 블록에 액세스하여 상기 ID에 의해 정의된 동작을 수행하며 - 공유 메모리의 상기 블록의 위치는 상기 인덱스에 의해 표시됨 -, 상기 동작이 완료된 후에 완료 표시자를 상기 테스터 시스템 프로그램으로 전송하는 단계를 포함한다.
일부 실시예에 따르면, 상기 ID는 상기 명령이 프로그램 동작을 포함함을 표시하고, 상기 액세스는 상기 메모리 위치에 기록할 데이터를 획득하기 위해 상기 블록을 판독하는 것이며, 상기 동작은 상기 프로그램 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션이 상기 명령에 응답하여 상기 데이터를 디스크 파일에 기록하는 것을 더 포함한다.
일부 실시예에 따르면, 상기 ID는 상기 명령이 판독 동작을 포함함을 표시하고, 상기 액세스는 상기 메모리 위치로부터 판독된 데이터를 저장하는 것이며, 상기 동작은 상기 판독 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션의 명령어를 실행하여, 하나 이상의 디스크 파일에 액세스하여 상기 메모리 위치에 있는 데이터를 판독하고, 공유 메모리의 상기 블록 내의 상기 호스트 데이터 버퍼에 저장하는 것을 더 포함한다.
일부 실시예에 따르면, 상기 테스터 시스템 프로그램의 명령어 및 상기 DUT 시뮬레이션의 명령어는 리눅스 기반의 운영 체제에 의해 관리되는 별도의 프로세스로서 실행된다.
일부 실시예에 따르면, 이 방법은 상기 프로그램 동작 후의 오류에 대해 상기 시뮬레이션된 장치를 테스트하기 위해, 상기 동작 후에 상기 데이터를 검증하는 단계를 더 포함한다.
일부 실시예에 따르면, 검증하는 단계가 상기 데이터를 예상 결과와 비교하는 단계를 포함한다.
일부 실시예에 따르면, 상기 명령은 상기 시뮬레이션된 장치의 베이스 어드레스 레지스터(base address register)에 저장된다.
일부 실시예에 따르면, 상기 테스터 프로그램의 명령어와 상기 DUT 시뮬레이션의 명령어는 동일 프로세서에 의해 실행된다.
일부 실시예에 따르면, 상기 공유 메모리 공간은 물리 메모리를 에뮬레이트하는 메모리 매핑된 파일을 포함한다.
일부 실시예에 따르면, 메모리 매핑된 파일은 mmap을 사용하여 매핑된 파일을 포함한다.
일부 실시예에 따르면, 상기 공유 메모리 공간은 NAND 플래시 메모리를 에뮬레이트하는 메모리 매핑된 파일을 포함한다.
일부 실시예에 따르면, 상기 메모리 기반의 통신 프로토콜은 PCIe 통신 버스 프로토콜을 이용한다.
다른 실시예에 따르면, 시뮬레이션된 장치의 프로그램 동작을 테스트하기 위한 메모리 기반 통신 프로토콜을 시뮬레이션하는 방법이 개시된다. 이 방법은, 호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와, 테스터 시스템 프로그램의 명령어를 실행하여, 제1 인덱스, 상기 프로그램 동작의 ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 프로그램 동작을 저장하는 단계와, DUT 시뮬레이션의 명령어를 실행하여, 상기 공유 메모리 공간 내의 상기 프로그램 동작에 액세스하고, 상기 제1 인덱스에 의해 정의된 상기 공유 메모리 공간의 블록으로부터 데이터를 판독하며, 상기 데이터를 상기 메모리 위치에 있는 하나 이상의 디스크 파일에 기록하고, 상기 데이터를 상기 메모리 위치에 기록한 후 제1 완료 표시자를 상기 테스터 시스템 프로그램으로 전송하는 단계를 포함한다. 이 방법은 또한, 상기 테스터 시스템 프로그램의 명령어를 실행하여, 제2 인덱스, 상기 판독 동작을 나타내는 ID, 및 상기 저장 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 판독 동작을 저장하는 단계와, 상기 DUT 시뮬레이션의 명령어를 실행하여, 상기 메모리 위치로부터 상기 데이터를 판독하고, 상기 데이터를 상기 제2 인덱스에 따라 상기 호스트 데이터 버퍼의 블록에 기록하며, 상기 데이터를 상기 제2 인덱스에 의해 정의된 상기 블록에 기록한 후 제2 완료 표시자를 상기 테스터 시스템 프로그램으로 전송하는 단계를 포함한다.
일부 실시예에 따르면, 이 방법은 상기 시뮬레이션된 장치를 테스트하기 위한 상기 판독 동작 후에 오류에 대해 상기 데이터를 검증하는 단계를 더 포함하고, 상기 검증하는 단계는 상기 데이터를 예상 결과와 비교하는 단계를 포함한다.
일부 실시예에 따르면, 상기 제1 완료 표시자는 상기 테스터 시스템 프로그램에 의해 관리된 큐에 저장된다.
일부 실시예에 따르면, 상기 메모리 위치는 디스크의 메모리 위치를 참조하고, 상기 메모리 위치는 플래시 메모리를 시뮬레이션하기 위한 디스크 파일로서 구현된다.
다른 실시예에 따르면, 피시험 장치를 시뮬레이션하는 시스템이 개시된다. 이 시스템은 리눅스 기반의 운영 체제를 실행하는 프로세서와, 상기 프로세서와 통신하며 테스터 시스템 프로그램 및 DUT 시뮬레이션 프로그램을 위한 공유 메모리 공간을 제공하는 메모리를 포함한다. 상기 테스터 시스템 프로그램 및 상기 DUT 시뮬레이션 프로그램의 명령어는 프로세서에 의해 실행되고, 상기 프로세서는 상기 피시험 장치의 시뮬레이션을 테스트하기 위한 메모리 기반의 통신 프로토콜을 시뮬레이션하는 방법을 수행한다. 이 방법은, 호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트는 테스터 시스템이고, 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와, 상기 테스터 시스템 프로그램의 명령어를 실행하여, 인덱스, ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 명령을 저장하는 단계와, 상기 DUT 시뮬레이션 프로그램의 명령어를 실행하여, 상기 공유 메모리 공간으로부터 상기 명령을 판독하고, 상기 공유 메모리 공간의 블록에 액세스하여 상기 ID에 의해 정의된 동작을 수행하며 - 상기 공유 메모리의 상기 블록의 위치는 상기 인덱스에 의해 표시됨 -, 상기 동작이 완료된 후에 완료 표시자를 상기 테스터 시스템 프로그램으로 전송하는 단계를 포함한다.
일부 실시예에 따르면, 이 방법은 상기 시뮬레이션된 장치를 테스트하기 위한 상기 동작 후에 상기 데이터를 검증하는 단계를 더 포함하고, 상기 검증하는 단계는 상기 데이터를 상기 동작 후의 예상 결과와 비교하는 단계를 포함한다.
일부 실시예에 따르면, 상기 ID는 상기 명령이 프로그램 동작을 포함함을 표시하고, 상기 동작은 상기 프로그램 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션 프로그램은 상기 명령에 응답하여 상기 인덱스에 의해 정의된 상기 공유 메모리의 블록으로부터의 데이터를 디스크 파일에 기록한다.
일부 실시예에 따르면, 상기 ID는 상기 명령이 판독 동작을 포함함을 표시하고, 상기 동작은 상기 판독 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션 프로그램의 명령어를 실행하여, 하나 이상의 디스크 파일에 액세스하여 데이터를 판독하고, 상기 디스크 파일로부터의 상기 데이터를 상기 인덱스에 의해 정의된 위치에 있는 상기 호스트 데이터 버퍼에 기록하는 것을 더 포함한다.
일부 실시예에 따르면, 상기 테스터 시스템 프로그램의 명령어 및 상기 DUT 시뮬레이션 프로그램의 명령어는 별도의 프로세스로서 실행되고, 상기 별도의 프로세스는 리눅스 기반의 운영 체제에 의해 관리된다.
일부 실시예에 따르면, 상기 메모리 기반의 통신 프로토콜은 PCIe 통신 버스 프로토콜이다.
다른 실시예에 따르면, 시뮬레이션된 장치와 메모리 기반의 통신을 수행하는 시스템이 개시된다. 이 시스템은, 프로세서와, 프로세서에 연결된 메모리와, 상기 프로세서에 의해 실행되는 테스터 시스템 프로세스를 포함하되, 상기 테스터 시스템 프로세스는 호스트 데이터 버퍼를 포함하는 공유 메모리 어드레스 공간을 할당받고, 상기 테스터 시스템 프로세스는 상기 호스트 데이터 버퍼에 데이터를 저장하고 상기 공유 메모리 어드레스 공간에 명령을 저장함으로써 장치 프로세스에 명령을 발행한다. 상기 장치 프로세스는 장치 시뮬레이션을 위해 상기 프로세서에 의해 실행되고, 상기 장치 프로세스는 또한, 디스크 파일로부터 데이터를 판독하고, 상기 디스크 파일에 데이터를 기록하며, 상기 공유 메모리 어드레스 공간으로부터 명령을 판독하고, 상기 명령에 따라 동작들을 수행하도록 동작하는 제어기를 포함한다. 상기 명령은, 상기 호스트 데이터 버퍼로부터 인덱스된 데이터를 판독하고 상기 인덱스된 데이터를 상기 디스크 파일에 기록하는 프로그램 동작과, 상기 디스크 파일로부터 데이터를 판독하고 인덱스 값에 따라 상기 데이터를 상기 상기 호스트 데이터 버퍼에 기록하는 판독 동작과, 하나 이상의 상기 디스크 파일을 삭제하는 삭제 동작을 포함한다.
일부 실시예에 따르면, 상기 테스터 시스템 프로세스는 테스터 시스템을 시뮬레이션하고, 상기 장치는 피시험 장치를 시뮬레이션한다.
일부 실시예에 따르면, 상기 공유 메모리 어드레스 공간은 상기 테스터 시스템과 상기 피시험 장치 사이에 PCIe 버스를 시뮬레이션한다.
본 명세서에 포함되어 본 명세서의 일부를 형성하는 첨부 도면은 본 발명의 실시예를 예시하고, 상세한 설명과 함께 본 발명의 원리를 설명하는 역할을 한다.
도 1은 본 발명의 실시예에 따라 도시된, PCIe 데이터 버스를 사용하여 장치(예컨대, DUT)를 테스트하도록 구성된 예시적인 호스트 장치를 포함하는 예시적인 장치 테스트 시스템의 블록도이다.
도 2는 본 발명의 실시예에 따른, 시뮬레이션된 메모리 기반 통신 프로토콜(예컨대, PCIe 또는 PCIe를 사용하여 구현된 통신 프로토콜)을 사용하여 시뮬레이션된 장치를 테스트하도록 구성된 예시적인 테스트 프로그램을 포함하는 예시적인 장치 테스트 시스템의 블록도이다.
도 3은 본 발명의 실시예에 따라 도시된, 다수의 시뮬레이션된 장치를 동시에 테스트하기 위한 예시적인 테스트 환경의 블록도이다.
도 4는 본 발명의 실시예에 따른, 물리적 DUT를 테스트하기 위한 예시적인 소프트웨어 계층을 도시한 데이터 흐름도이다.
도 5는 본 발명의 실시예에 따라 도시된, 시뮬레이션된 장치를 테스트하기 위해 메모리 기반 통신 프로토콜을 시뮬레이션하기 위한 예시적인 소프트웨어 계층을 도시한 데이터 흐름도이다.
도 6은 본 발명의 실시예에 따라 도시된, 시뮬레이션된 장치를 테스트하기 위한 동작을 수행하기 위한 예시적인 컴퓨터 구현 단계들의 예시적인 시퀀스의 흐름도이다.
도 7은 본 발명의 실시예에 따라 도시된, 시뮬레이션된 장치를 테스트하기 위해 프로그램 동작 및 판독 동작을 수행하기 위한 컴퓨터 구현 단계의 예시적인 시퀀스의 흐름도이다.
도 8은 본 발명의 실시예에 따라 도시된, 시뮬레이션된 장치를 테스트하기 위해 예시적인 메모리 기반 통신 프로토콜을 시뮬레이션하기 위한 블록도 및 데이터 흐름도이다.
도 9는 본 발명의 실시예들이 구현될 수 있는 예시적인 컴퓨터 플랫폼을 도시한다.
이제 몇몇 실시예들을 상세하게 참조할 것이다. 청구대상은 다른 실시예들과 함께 설명하지만, 본 개시를 이들 실시예로 제한하고자 하는 것은 아니다. 반대로, 청구대상은 첨부된 청구범위에 의해 정의되는 청구대상의 사상 및 범위 내에 포함될 수 있는 대안, 변형 및 균등물을 포함하고자 한다.
또한, 다음의 상세한 설명에서, 청구대상의 철저한 이해를 위해 다수의 특정 세부 사항을 설명한다. 그러나, 당업자라면 실시예들이 이러한 특정 세부사항 없이 또는 그 균등물로 실시될 수 있음을 인식할 것이다. 다른 경우에, 공지된 방법, 절차, 컴포넌트 및 회로는 청구대상의 양태 및 특징을 불필요하게 모호하게 하지 않기 위해 상세히 설명하지 않았다.
이하의 상세한 설명의 일부분은 방법의 관점에서 제시되고 논의된다. 이 방법의 동작을 설명하는 단계들 및 순서가 본 명세서의 도면(예컨대, 도 6 및 7)에 개시되어 있지만, 그러한 단계 및 순서는 예시적이다. 실시예들은 본 명세서의 도면의 흐름도에 나타낸 단계들의 변형 또는 다양한 다른 단계들을 본 명세서에 도시되고 기술된 것과 다른 순서로 수행하는데 매우 적합하다.
상세한 설명의 일부분은 컴퓨터 메모리에서 수행될 수 있는 데이터 비트에 대한 동작의 절차, 단계, 논리 블록, 처리 및 다른 부호적 표현의 관점에서 제시된다. 이들 설명 및 표현은 데이터 처리 분야의 당업자가 자신의 작업 내용을 다른 당업자에게 가장 효과적으로 전달하기 위해 사용하는 수단이다. 본원 명세서에서 절차, 컴퓨터 실행 단계, 논리 블록, 프로세스 등은 일반적으로 원하는 결과를 이끌어내는 일관성 있는 단계들 또는 명령들의 시퀀스인 것으로 생각하면 된다. 이들 단계는 물리량을 물리적으로 조작할 것을 요구하는 단계들이다. 일반적으로, 반드시 그런 것은 아니지만, 이러한 양은 컴퓨터 시스템에서 저장, 전송, 결합, 비교 및 조작될 수 있는 전기 또는 자기 신호의 형태를 취한다. 이들 신호는 비트, 값, 요소, 심볼, 문자, 용어, 숫자 등으로 사용하기 때문에, 이렇게 지칭하는 것이 때론 편리한 것으로 입증되었다.
그러나, 이들 및 유사한 용어들 모두는 적절한 물리량과 관련되며 이들 수량에 적용되는 편리한 라벨일 뿐이라는 점을 주지하라. 이하의 논의에서 명백하게 달리 언급되지 않는 한, 본 발명 전반에 걸쳐 "액세스", "기록", "포함", "저장", "전송", "연관", "식별", "인코딩" 등과 같은 용어를 사용하여 설명하는 것은, 컴퓨터 시스템의 레지스터 및 메모리 내의 물리(전자)량으로 표현된 데이터를 조작하고 컴퓨터 시스템 메모리 또는 레지스터 또는 다른 그러한 정보 저장부, 전송 또는 디스플레이 장치 내 물리량으로 유사하게 표현되는 다른 데이터로 조작 및 변환하는 컴퓨터 시스템 또는 그와 유사한 전자 컴퓨팅 장치의 동작 및 프로세스를 지칭한다는 점을 이해하라.
메모리 기반 프로토콜의 시뮬레이션을 위한 시스템 및 방법
본 발명의 실시예는, 피시험 장치 개발 완료에 의존하지 않으며, 실제 DUT를 사용할 수 있기 전에 소프트웨어로 시뮬레이션된 장치에서 테스트 소프트웨어를 테스트하고 디버깅함으로써 테스트 개발의 효율성을 향상시킬 수 있고, 테스트의 견고성과 확장성을 향상시키기 위해 수많은 변수를 테스트하도록 맞춤화될 수 있는, DUT 테스트를 수행하기 위한 시스템 및 방법을 제공한다. 테스트는 DUT의 사양에 따라 API 수준에서 수행될 수 있다. 개발 프로세스 초기에 테스트 및 디버깅을 수행하면, 실제 장치를 테스트할 수 있을 때 디버깅 및 재설계가 덜 필요하므로, 장치의 배송 날짜가 더 빨라진다.
본 발명의 실시예는 PCIe(Peripheral Component Interconnect Express) 데이터 버스를 사용하여 호스트 장치(테스터)와 통신하는 피시험 NAND 메모리 장치를 시뮬레이션하기 위한 테스트 프로그램 및 소프트웨어 시뮬레이터를 실행한다. PCIe는 일반적으로, 연결된 장치에서 판독 및 기록 트랜잭션을 수행하는 데 사용되는 다수의 레인을 포함하는 직렬 버스이다. PCIe를 사용하여 수행되는 작업은 패킷화되며, 패킷들은 일반적으로 어드레스를 포함하고, 선택적으로는 기록될 데이터를 포함한다. 패킷들은 타겟 장치에 연속적으로 전달되며, 타겟 장치는 기록 순서를 디패킷화하고 포함된 데이터로 기록 동작을 실행한다. 판독 동작은 DUT에 저장된 데이터를 판독한다. 판독 동작에서는, 패킷이 타겟 장치로 전달되고, 타겟 장치가 데이터 페이로드를 포함하는 CplD(completion with data) 패킷이라고 하는 특수 트랜잭션 계층 패킷을 생성함으로써 판독 동작을 실행하며, 판독 동작을 요청한 요청자에게 데이터 페이로드를 다시 라우팅하기 위해 요청자 ID가 사용된다. 프로그램 작업과 삭제 작업도 테스터에 의해 빈번하게 수행된다.
메모리 기반 통신 프로토콜은, 명령을 내리고 장치 사이에서 데이터를 전송하기 위해, 연결된 장치(예컨대, DUT)가 액세스할 수 있는 공유 메모리 위치를 매핑하고, PCIe 프로토콜과 같은 패킷 기반 프로토콜을 사용하여 구현될 수 있다. PCIe 프로토콜은 메모리 기반 기능을 포함하며, 기존 PCIe 통신 버스에 구축된 메모리 기반 통신 프로토콜은, 테스트 중에 DUT의 기본 동작이 명확하지 않기 때문에 테스트하기가 특히 어려울 수 있다. 일부 경우에, 프로토콜은, 메모리의 상이한 부분들이 상이한 유형의 기능 또는 메모리 동작을 수행하는 데 사용되도록 정의될 수 있고, DUT는 호스트 장치에 의해 내려진 명령에 기초하여 동작을 수행할 것으로 예상된다. 본 발명의 실시예는 리눅스 기반 운영 체제에 의해 구현된 mmap 공유 메모리 기술과 같은 공유 메모리 기술을 사용하여 메모리 장치(예컨대, NAND 플래시 장치)를 시뮬레이션해서, 메모리 장치를 테스트하기 위해 PCIe와 같은 패킷화된 통신 프로토콜 또는 기존 PCIe 아키텍처 상에 구축된 프로토콜을 시뮬레이션할 수 있다. 이 경우, 테스터 소프트웨어 개발을 용이하게 하기 위해 DUT 및 PCIe 프로토콜이 모두 시뮬레이션된다.
PCIe 버스의 하나의 중요한 설계 측면은 PCIe 장치가 일반적으로 호스트에게는 메모리 매핑 장치로 보여진다는 것이다. 따라서, 장치가 호스트로부터 패킷화된 데이터를 수신하는 동안, 호스트는 특정 메모리 어드레스에 대해 판독 및 기록함으로써 장치와 상호 작용한다. 따라서, 시뮬레이션된 장치는 호스트가 액세스할 수 있는 메모리에 액세스할 수 있다. 본 발명의 실시예의 한 측면은 공유 메모리 액세스를 사용하여, 시뮬레이션된 DUT를 테스트하기 위한 PCIe 기반 프로토콜을 시뮬레이션하는 것을 포함한다.
본 발명의 실시예는 리눅스 기반 운영 체제를 사용하여 구현될 수 있으며, 테스트 프로그램 및 시뮬레이션된 장치는 운영 체제에 의해 제어되는 별도의 프로세스로서 존재한다. 두 프로세스 모두 공유 메모리 어드레스 공간에 액세스할 수 있다. 또한, 다수의 장치가 별도의 프로세스로서 시뮬레이션될 수 있으며, 다수의 테스트 프로그램(예컨대, 시뮬레이션된 장치마다 하나씩)을 실행하여 테스트 환경의 속도 및 견고성을 향상시킬 수 있다.
본 명세서에서 설명하는 일부 실시예는 예상 결과를 생성하기 위해 DUT가 장치의 사양에 따라 동작을 수행했는지 여부를 판정하기 위해 DUT에 의해 수행된 동작을 검증하는 방법 또는 단계를 포함한다. 예를 들어, 일부 실시예들에 따르면, DUT는 데이터를 메모리 위치에 기록하고(프로그램 동작), 메모리 위치로부터 호스트 메모리로 데이터를 읽어내며(판독 동작), 테스트 프로그램은 데이터가 성공적으로 기록 및/또는 판독되었는지 여부를 판정한다. 이것은 DUT에 의해 판독된 데이터를 장치의 사양에 따른 예상 결과와 비교함으로써 달성될 수 있다. 또한, 삭제 동작에 의해 삭제되어야 하는 데이터가 더 이상 메모리에 저장되어 있지 않음을 확인함으로써 삭제 동작을 확인할 수 있다. DUT의 활동 및 그 안에 저장된 데이터를 검출하고 정량화하기 위해 프로브와 같은 테스트 장비를 사용하여 다른 동작들이 검증될 수도 있다. 검증은 DUT의 결함을 검출 및/또는 정정하기 위한 테스트 프로세스 또는 디버깅 프로세스의 일부로서 수행될 수 있다.
도 1에는 본 발명의 실시예에 따른, PCIe 데이터 버스(145)를 사용하여 물리적 장치(180)(예컨대, DUT)를 테스트하도록 구성된 예시적인 호스트 장치(105)(테스터 시스템)를 포함하는 예시적인 장치 테스트 시스템(100)이 도시되어 있다. 호스트 장치(105)는 장치의 특정 요구 사항에 따라 장치(180)를 테스트하도록 설계된 테스트 프로그램을 실행할 수 있다. PCI 데이터 버스(145)는, 장치의 제어기(150)에 의해, 호스트 장치(105)에 의해 내려진 명령 또는 동작에 따라 호스트 데이터 버퍼(120)로부터 데이터를 판독하고 호스트 데이터 버퍼(120)에 데이터를 기록하기 위해 사용된다. 예를 들어, 장치(180)는 제어기(150)를 사용하여 호스트(105)에 PCIe 판독 요청을 발행함으로써 호스트 데이터 버퍼(120) 내의 데이터에 액세스할 수 있고(프로그램 동작), 또한 제어기(150)를 사용하여 호스트(105)에 PCIe 기록 요청을 발행함으로써 호스트 데이터 버퍼(120)에 데이터를 기록할 수 있다(판독 동작). 호스트 장치(105)는 명령을 제어기(150)에 저장된 메모리의 물리적 위치에 매핑되는 공유 메모리 어드레스 공간에 저장함으로써 장치(180)의 제어기(150)에 명령을 내릴 수 있다. 예를 들어, 제어기(150)는 공유 어드레스 공간(115) 내의 위치에 매핑되는 제어기(150)의 물리적 메모리(예컨대, PCIe 어드레스 공간)에 저장된 베이스 어드레스 레지스터(base address register: BAR)로부터 명령을 판독할 수 있다.
데이터는 공유 메모리 공간(115)의 호스트 데이터 버퍼(120)의 블록에 저장되고, 데이터 블록은 인덱스 값(125)에 따라 인덱싱된다. 데이터는 장치(180)를 테스트하도록 특별히 구성된 알려진 패턴의 데이터를 포함할 수 있다. 호스트(105)가 내린 명령은 일반적으로 명령에 사용되는 메모리 블록을 식별하기 위한 인덱스 값을 포함한다. 인덱스 값은 장치(180)의 제어기(150)에 의해 판독되며 호스트 메모리 버퍼(120) 내의 데이터 위치를 결정하는데 사용된다. 제어기가 호스트 명령을 실행할 때, 인덱스 값에 의해 식별된 데이터 블록을 사용할 것이다(블록으로부터 데이터를 획득하거나 또는 블록에 데이터를 저장). 제어기(150)가 호스트 장치(105)에 의해 내려진 명령에 대응하는 동작을 완료하면, 제어기(150)는 완료 표시자를 호스트 장치(105)에 전송하며, 이 완료 표시자는 완료 큐(130)에 저장된다. 명령들은 BAR2 공간(명령 큐)(140B)에 데이터 구조로서 저장되거나 큐잉되고, 데이터 구조는 ID 값, 인덱스 값, 메모리 위치 및 다른 아규먼트를 포함할 수 있다. 프로그램 명령에 대한 완료 표시자가 호스트 장치(105)에 의해 판독되면, 호스트 데이터 버퍼(120)에 저장된 대응하는 인덱스가 삭제되고 새로운 데이터를 위해 재사용될 수 있다. 판독 명령의 경우, 완료 표시자는 호스트(105)에게 데이터가 처리에 이용가능함을 알려준다.
호스트 데이터 버퍼(120), 인덱스(125) 및 완료 큐(130)는 호스트 장치의 물리적 메모리에 저장되고 메모리 매핑된 데이터(115)로서 제어기(150)에 의해 액세스 가능하다. 장치(180)는 호스트로부터 패킷화된 데이터를 수신할 수 있으며, 호스트는 특정 메모리 어드레스에서 판독하거나 특정 메모리 어드레스에 기록함으로써 장치와 상호 작용할 수 있다. 따라서, 장치(180)는 호스트에 의해 액세스 가능한 메모리에 액세스할 수 있다.
일부 실시예에 따르면, 제어기(150)는 어드레스 변환 및 매핑과 같은 특정 데이터 및 호스트 장치(105)에 의해 내려진 명령을 저장하기 위한 하나 이상의 BAR에 액세스한다. 베이스 어드레스 레지스터(예컨대, BAR0(135A) 및 BAR2(140A))는 제어기(150)에 물리적으로 저장되고 제어기(150)가 액세스할 수 있는 PCIe 어드레스 공간으로부터 호스트 장치 상의 공유 메모리 어드레스 공간(115)에 매핑된다. 예를 들어, BAR0 공간(135B)은 PCIe 어드레스 공간 내에 물리적 메모리 어드레스를 저장할 수 있고, 제어기(150) 상의 BAR0(135A)에 매핑된다. 제어기(150)에 의해 프로그램 명령이 수신될 경우, 제어기는 BAR0 공간(135B)으로부터 명령의 인덱스와 연관된 물리적 메모리 어드레스를 판독하여 PCIe 어드레스 공간으로부터 호스트 메모리로 기록한다. BAR2 공간(140B)은, 명령이 제어기(150)에 의해 실행되기 전에, 호스트 장치(105)에 의해 발행된 명령을 저장하기 위한 명령 큐로서 사용될 수 있다. BAR2(140A)의 데이터는 장치(180)의 제어기(150)에서 PCIe 어드레스 공간에 물리적으로 저장되고, BAR2(140A) 내의 호스트 장치 상의 공유 메모리 어드레스 공간(115)에 매핑된다.
명령은 호스트 장치(105)로부터 제어기(150)에 의해 수신되어, 명령이 실행되기 전에 BAR2 공간(140B)의 명령 큐에 저장(큐잉)될 수 있고, 명령은 일반적으로 임의의 순서로 실행될 수 있음을 이해해야 한다. 다시 말하면, 명령은 호스트 장치(105)에 의해 발행되거나 제어기(150)에 의해 판독되는 것과 동일한 순서로 실행될 것으로 예상되지 않으며, 제어기(150)는 명령을 실행하기 위한 효율적인 순서를 결정할 수 있다. 따라서, 명령 큐에 몇 개의 명령이 저장될 수 있고, 제어기(150)는 다음에 실행할 명령을 결정할 수 있다.
제어기(150)는 각각 통신 채널(165 및 170)을 통해 NAND 다이(175 및 195)와 통신한다. 통신 채널들(165 및 170)은 제각기의 다이와 동시에 통신하도록 동작 가능하다. NAND 다이는 다이(175 및 195)의 평면, 블록, 페이지 및 섹터에 데이터를 저장한다.
일부 실시예들에 따르면, 각각의 NAND 다이(175 및 195)는 데이터가 제어기(150)에 의해 다이에 기록되기 전에 데이터 저장을 위해 제각기의 큐와 통신한다. 예를 들어, 통신 채널(165)을 통해 NAND 다이(175)에 기록될 데이터는 큐(185)에 저장될 수 있고, 통신 채널(170)을 통해 NAND 다이(195)에 기록될 데이터는 큐(190)에 저장될 수 있다. NAND 다이(175 및 195)에 기록될 데이터는 제어기(150)에 의해 호스트 메모리(120)로부터 PCIe 버스(145)를 통해 판독될 수 있고, NAND 다이(175 및 195)로부터 판독된 데이터는 데이터가 호스트 메모리(120)에 기록되기 전에 큐(185 및 190)에 저장될 수 있다.
플래시 저장 위치(예컨대, 다이(175 또는 195))에 데이터를 기록하도록 프로그램 명령이 발행되면, 호스트(105)는 데이터를 로드하여 빈 인덱스 위치에 데이터를 기록한다. 그 후 호스트(105)는 인덱스 위치 및 저장 위치를 포함하는 프로그램 명령을 발행한다. DUT(180)는 명령을 처리하고, 인덱스(예컨대, 인덱스(125))로부터 데이터를 판독하고, 저장 위치에 데이터를 저장한다.
판독 명령이 호스트(105)에 의해 발행되어 DUT(1801)에 저장된 데이터를 판독할 경우, 판독 명령은 인덱스(예컨대, 인덱스(125)) 및 저장 위치를 포함한다. 데이터는 저장 위치에서 판독되고 DUT에 의해 인덱스에 기록된다.
호스트에 의해 삭제 동작이 발생되는 경우, DUT(180)는 삭제 명령에 표시된 저장 위치에서 데이터(예컨대, 하나 이상의 디스크 파일)를 삭제한다. 길이 또는 크기 필드를 사용하여 삭제할 데이터 양(예컨대, 파일 수)을 나타낼 수 있다.
도 2에서는, 본 발명의 실시예에 따른, 시뮬레이션된 메모리 기반 통신 프로토콜(예컨대, PCIe 또는 PCIe를 사용하여 구현된 통신 프로토콜)을 사용하여 시뮬레이션된 장치(280)(예컨대, 시뮬레이션된 DUT)를 테스트하도록 구성된 예시적인 테스트 프로그램(215)을 포함하는 예시적인 장치 테스트 시스템(200)이 도시되어 있다. 테스트 프로그램(215)은 일반적으로 호스트 장치(105)와 동일한 기능을 수행하고, 시뮬레이션된 장치(280)는 장치(180)의 기능을 에뮬레이트하도록 구성될 수 있다(도 1 참고). 도 2에서, 테스터 시스템과 시뮬레이션된 DUT(280)는 모두 동일한 리눅스 기반 컴퓨터 시스템(205)의 다른 부분에 구현된다.
물리적 데이터 버스(예컨대, PCIe)를 사용하여 테스트 프로그램(215)과 시뮬레이션된 장치(280) 사이에서 데이터를 전송하는 대신, 공유 메모리 어드레스 공간을 이용하여 테스트 프로그램(215)과 시뮬레이션된 장치(280) 사이에서 데이터를 공유하여 PCIe 버스를 효과적으로 시뮬레이션한다. 또한, 시뮬레이션된 장치(280)는 디스크 파일(275 및 295)을 사용하여 제어기(250)에 의해 관리되는 데이터를 저장하기 위한 NAND 다이를 시뮬레이션할 수 있다. 제어기(250)는 공유 메모리 공간으로부터 호스트 명령을 판독하고 대응하는 동작을 수행한다. 예를 들어, 제어기는 공유 메모리 공간(220) 내의 명령 큐(245)(식별된 인덱스를 포함)로부터의 판독 명령에 액세스하고, 디스크 파일(275 및/또는 280)로부터 대응하는 데이터를 판독하며, 데이터를 호스트 데이터 버퍼(225)의 인덱스에 의해 식별된 블록에 기록할 수 있다. 프로그램 명령 및 삭제 명령도 시뮬레이션될 수 있다. 이런 방식으로, 시뮬레이션된 장치(280)는 실제 장치가 완전히 개발되거나 또는 프로토타입되기 전에 테스트 프로그램(215)을 사용하여 DUT(예컨대, 도 1의 장치(180))를 테스트하고 디버그할 수 있다. 일부 실시예에 따르면, 시뮬레이션된 장치(280)는 PCIe 판독 요청을 테스트 프로그램(215)에 발행함으로써 테스트 프로그램(215)의 공유 메모리 어드레스 공간(220)으로부터 데이터(프로그램 명령으로부터의)를 판독하고, 시뮬레이션된 장치(295)는 테스트 프로그램(215)에 PCIe 기록 요청을 발행함으로써 테스트 프로그램(215)의 공유 어드레스 공간(220)에 데이터(판독 명령으로부터의)를 기록한다.
테스트 프로그램(215) 및 시뮬레이션된 장치(280)는 리눅스 기반 운영 체제(210)를 사용하여 CPU(205)에 의해 실행되는 것으로 이해하면 된다. PCIe 데이터 버스는 매핑된 파일(예컨대, mmap을 사용하여 매핑된 파일)을 사용하여 테스트 프로그램(215)과 시뮬레이션된 장치(280) 사이에 데이터 및 명령을 전송하기 위한 소프트웨어로 시뮬레이션된다. 매핑된 파일은 공유된 물리 메모리로서 동작하고, 테스트 프로그램(215) 및 시뮬레이션된 장치(280) 모두의 메모리 공간에서 이용 가능하다. 완료 큐(235), 인덱스(230), 호스트 데이터 버퍼(225) 및 임의의 BAR은 매핑된 파일을 사용하여 공유된 물리 메모리로서 구현될 수 있다. 이러한 방식으로, 공유 메모리 공간(220)의 데이터는 테스트 프로그램(215) 및 시뮬레이션된 장치(280) 모두에게 액세스 가능하다. 예를 들어, 명령은 공유 메모리 어드레스 공간(220)에서 BAR2(245A)에 명령을 기록함으로써 테스트 프로그램(215)에 의해 발행될 수 있고, 여기서, BAR2(245A)의 메모리 공간은 PCIe 어드레스 공간에 매핑되고 제어기 상에서 BAR2 공간(245B)에 물리적으로 저장되며, 제어기(250)는 BAR2 공간(245B)으로부터 명령을 판독하여 대응하는 동작을 수행한다.
공유 메모리 어드레스 공간(220)은 테스트 데이터(215)에 의해 발행된 명령에 따라 호스트 데이터 버퍼(225)로부터 데이터를 판독하고(프로그램 명령) 호스트 데이터 버퍼(225)에 데이터를 기록하기(판독 명령) 위해 장치의 제어기(250)에 의해 액세스된다. 데이터는 공유 메모리 어드레스 공간(220)의 호스트 데이터 버퍼(225)에 저장되고, 인덱스 값(230)에 따라 인덱싱된다. 인덱스 값은 장치(280)의 제어기(250)에 의해 판독되며 마지막 명령과 연관된 호스트 메모리 버퍼(225) 내의 데이터의 위치를 결정한다. 제어기(250)가 테스트 프로그램(215)에 의해 발행된 명령에 대응하는 동작을 완료하면, 제어기(250)는 완료 큐(235)에 저장되는 테스트 프로그램(215)으로 완료 표시자를 전송한다. 완료 표시자는 관련 명령을 식별한다. 테스트 프로그램(215)에 의해 발행된 명령은 공유 메모리 어드레스 공간(220)(예컨대, 베이스 어드레스 레지스터)에 데이터 구조로서 저장되고, 데이터 구조는 ID 값, 인덱스 값, 메모리 위치 및 기타 아규먼트(예컨대, 길이, 크기 등)를 포함할 수 있다. 테스트 프로그램(215)에 의해 완료 표시자가 판독될 경우, 명령이 프로그램 명령이면, 호스트 데이터 버퍼(225)에 저장된 대응하는 인덱스는 삭제되고 새로운 데이터에 재사용될 수 있다. 명령이 판독 명령인 경우, 호스트는 완료 표시자 수신 시에 데이터에 액세스할 수 있다.
일부 실시예에 따르면, 제어기(250)는 어드레스 변환 및 매핑과 같은 특정 데이터 및 테스트 프로그램(215)에 의해 발행된 명령과 같은 특정 데이터에 액세스하기 위한 하나 이상의 베이스 어드레스 레지스터(BAR)에 액세스한다. 베이스 어드레스 레지스터(예컨대, BAR0 공간(240B) 및 BAR2 공간(245B))는 테스트 프로그램(215)의 공유 메모리 어드레스 공간에 매핑되고, 제어기(250)에서 판독 명령에 대한 PCIe 어드레스 공간에 물리적으로 저장된다. 명령이 프로그램 명령인 경우, 제어기는 인덱스 값을 사용하여 데이터를 판독할 메모리 어드레스를 결정한다.
BAR0 공간(240B)은 호스트 데이터 버퍼(225) 내의 데이터에 액세스하기 위해 제어기(250)의 PCIe 어드레스 공간에 매핑된 물리 메모리 어드레스를 저장할 수 있다. 프로그램 명령이 제어기(250)에 의해 수신되면, 제어기는 BAR0 공간(240B)으로부터의 명령의 인덱스와 연관된 물리 메모리 어드레스를 판독하여, 호스트 메모리에 기록하기 위한 물리적 메모리 어드레스를 결정한다.
BAR2(245A)는, 명령이 제어기(250)에 의해 실행되기 전에 테스트 프로그램(215)에 의해 발행된 명령을 저장하기 위한 명령 큐로서 사용될 수 있다. 명령은 제어기(250)에 의해 테스트 프로그램(215)으로부터 수신되어, 명령이 실행되기 전에 BAR2 공간(245B)의 명령 큐에 저장(큐잉)될 수 있고, 명령은 일반적으로 임의의 순서로 실행될 수 있음을 이해해야 한다. 다시 말하면, 명령은 테스트 프로그램(215)에 의해 발행되거나 제어기(250)에 의해 판독되는 것과 동일한 순서로 실행될 것으로 예상되지 않으며, 제어기(250)는 명령이 실행되는 순서를 결정할 수 있다.
제어기(250)는 디스크 파일(275 및 295)을 사용하여 NAND 다이(예컨대, 도 1의 NAND 다이(175 및 195))를 시뮬레이션하기 위한 데이터를 저장한다. 디스크 파일은 NAND 플래시의 블록을 에뮬레이트하는 방식으로 기록될 수 있으며, 여기서 각 파일은 특정 블록과 연관되며 데이터의 페이지 및 섹터를 포함한다. 블록을 나타내는 파일은 또한 제각기의 NAND 다이의 평면과 연관될 수 있다. 테스트 프로그램(215)에 의해 명령이 발행될 경우, 디스크 파일(275 또는 295)에 저장된 데이터의 메모리 위치가 명령의 아규먼트에 포함되어 제어기(250)가 어느 데이터에 액세스(판독 또는 기록)해야 하는지를 나타낼 수 있다. 이런 방식으로, 시뮬레이션된 장치(280)는 DUT 자체가 전통적인 수단을 사용하여 물리적으로 생성되고 테스트되기 전에, NAND 플래시로부터 판독(및 기록)하도록 DUT를 에뮬레이트할 수 있다.
일부 실시예에 따르면, 디스크 파일(275)에 기록될 데이터는 큐(265)에 저장되고, 디스크 파일(295)에 기록될 데이터는 큐(270)에 저장된다. 디스크 파일(275 및 295)에 기록될 데이터는 또한, 제어기(250)에 의해 호스트 메모리(225)로부터 판독되고 처음에 큐(265 및 270)에 기록된다. 또한, 제어기(250)에 의해 디스크 파일(275 및 295)로부터 판독된 데이터는, 데이터가 호스트 메모리(225)에 기록되기 전에 큐(265 및 270)에 저장될 수 있다. 시뮬레이션된 DUT(280)를 사용하고 또한 전술한 메모리 매핑 기술을 통해 PCIe 버스를 시뮬레이션함으로써, 본 발명은 실제 물리적 DUT가 이용 가능하기 전에 테스트 프로그램(215)이 개발되고 디버그될 수 있는 환경을 허용한다.
도 3에서는, 본 발명의 실시예에 따른, 다수의 시뮬레이션된 장치를 동시에 테스트하기 위한 예시적인 테스트 환경(300)이 도시되어 있다. 테스트 워크 스테이션(305)은 시스템 테스트 모듈(315)과 인터페이스하기 위해 사용자 인터페이스, 소프트웨어 기능 및 제어 API를 제공하는 테스트 스위트(310)를 실행한다. 시스템 테스트 모듈(315)은 다수의 임베디드 프로세서를 가지며 각각의 프로세서는 리눅스 기반 운영 체제를 실행하여, 시뮬레이션된 장치를 테스트하기 위한 테스트사이트(testsites)를 제공한다.
각각의 테스트사이트에는 DUT를 테스트하기 위해 메모리 기반 통신 프로토콜을 시뮬레이션하기 위한 고유 메모리 매핑 영역(예컨대, mmap된 메모리)이 할당된다. 예를 들어, 테스트사이트(320)는 다수의 테스트 프로그램을 실행하여 최대 8개의 시뮬레이션 DUT를 동시에 테스트할 수 있는데(예컨대, Dut1 - Dut8), 여기서 각각의 테스트 프로그램 및 시뮬레이션된 DUT는 리눅스 기반 운영 체제에 의해 별도의 프로세스로서 실행된다. 테스트사이트(325)는 8개의 시뮬레이션된 DUT(예컨대, DUT9 - DUT16) 및 대응하는 테스트 프로그램을 동시에 실행할 수 있다. 시스템 테스트 모듈(315)은 본 발명의 실시예의 범위 내에서 더 많거나 더 적은 임베디드 프로세서를 포함할 수 있다. 예를 들어, 시스템 테스트 모듈(315)은 최대 768개의 DUT를 동시에 테스트하기 위해 리눅스 기반 운영 체제를 실행하는 최대 96개의 임베디드 프로세서를 포함할 수 있다. 테스트사이트(320 및 325)는, 예를 들어, 테스트 프로그램(215) 및 도 2에 도시된 시뮬레이션된 장치(280)의 다수의 인스턴스를 실행할 수 있다.
테스트 스위트(310)는 DUT를 테스트하기 위한 파라미터 및 구성을 변경하여 상이한 동작 조건을 시뮬레이션하는 기능을 포함할 수 있다. 예를 들어, 한 구성을 사용하여 한 세트의 DUT를 테스트하고 다른 구성을 사용하여 다른 DUT 세트를 테스트할 수 있으며, DUT의 결과들을 비교하여 이들 구성이 어떻게 다른 결과를 생성하는 지 판단할 수 있다. 또한, 각각의 개별 DUT는 오류를 빠르게 감지하고 빠른 디버깅을 수행하기 위해 서로 다른 작동 조건을 시뮬레이션하도록 구성될 수 있다.
일부 실시예에 따르면, 테스트 스위트(310)는 시뮬레이션된 장치의 스트레스 테스트를 수행하기 위해 랜덤 또는 의사 랜덤 지연(예컨대, 판독 또는 기록 지연)을 도입할 수 있다.
도 4와 관련하여, 데이터 흐름도(400)는 도 1에 도시된 바와 같은 시스템에 대한, 물리적 피시험 장치(465)를 테스트하기 위한 예시적인 소프트웨어 계층 또는 스택을 나타낸다. 계층은, 호스트 시스템에 의해 실행되고 특정 장치(DUT)(465)에 대해 장치 테스트를 수행하도록 구성된 테스트 프로그램(405)을 포함한다. 테스트 프로그램(405)은 흔히 장치(465)를 테스트하기 위한 특정 요구 사항에 따라 장치(465)의 제조업체에 의해 제공된다. API 라이브러리(410)는 장치(465)의 하드웨어를 제어하는데 사용되는 테스트 프로그램(405)을 위한 기능을 제공하는 액세스 라이브러리를 포함한다. API 라이브러리(410)의 기능은 테스트 프로그램(405)에 의해 호출되고 소프트웨어 인터페이스(415)를 통해 실행된다. 소프트웨어 인터페이스(415)는 장치(465)의 통신 인터페이스(예컨대, PCIe)와 통신하도록 동작 가능한 장치 프로토콜이며, 머신-특정 장치 라이브러리(420), 커널 인터페이스(425) 및 리눅스 장치 드라이버(커널 모듈)(430)를 포함한다. 소프트웨어 인터페이스(415)는 인터페이스(435) 상에서 장치 드라이버(440)를 통해 통신하고, 루트 콤플렉스 장치(445)는 호스트 시스템의 프로세서 및 메모리 서브 시스템을 장치(465)의 PCIe 컴포넌트(450)의 PCIe 스위치 패브릭(455)에 연결한다. 메모리 관리 유닛(460)은 인터페이스(435)를 통해 호스트 시스템의 메인 메모리와 장치(465) 사이의 메모리 액세스를 용이하게 한다.
도 5와 관련하여, 데이터 흐름도(500)는 도 2에 도시된 시스템에 대한 본 발명의 실시예에 따른, 시뮬레이션된 장치(540)를 테스트하기 위해 메모리 기반 통신 프로토콜을 시뮬레이션하기 위한 예시적인 소프트웨어 계층 또는 스택을 나타낸다. 데이터 흐름도(400)와 유사하게, API 라이브러리(510)의 기능은 테스트 프로그램(505)에 의해 호출되고 소프트웨어 인터페이스(515)를 통해 실행된다. 소프트웨어 인터페이스(515)는 시뮬레이션된 장치(540)와 인터페이스하고 머신-특정 장치 라이브러리(520) 및 커널 인터페이스를 포함한다. 커널 인터페이스(525)는 PCIe와 같은 메모리 기반 통신 프로토콜, 또는 PCIe에 구축된 메모리 기반 프로토콜을 에뮬레이트할 수 있는 시뮬레이션된 통신 프로토콜(530)과 상호 작용한다.
시뮬레이션된 프로토콜(530)과 시뮬레이션된 장치(540) 사이의 상호작용은 mmap을 사용하여 구현된 공유 메모리(535)와 같은 리눅스 기반 운영 체제의 공유 메모리 기술에 의해 촉진된다. 테스트 프로그램(505)을 실행하는 호스트 장치는, 공유 메모리(535)를 사용하여, 특정 메모리 어드레스를 사용하여 데이터를 판독하고 기록함으로써 시뮬레이션된 장치(540)와 상호 작용한다. 따라서, 본 발명의 실시예는 장치의 개발이 완료되기 전에 시뮬레이션된 장치를 테스트하기 위한 데이터 흐름(500)을 제공하여, 테스터 소프트웨어가 개발 및 디버깅될 수 있도록 한다. 이를 통해, 물리적 장치를 사용할 수 있기 전에, 소프트웨어로 시뮬레이션된 장치를 테스트하고 디버깅하여 테스터 소프트웨어의 생산 개발 효율성을 향상시킬 수 있으며, 다양한 변수를 테스트하도록 테스터 소프트웨어를 맞춤화하여 테스트의 견고성과 확장성을 향상시킬 수 있다.
도 6에서는, 본 발명의 실시예에 따른, 시뮬레이션된 장치를 테스트하기 위한 예시적인 컴퓨터 구현 단계들의 시퀀스(600)가 도시되어 있다. 컴퓨터 구현 단계들(600)은 리눅스 기반 운영 체제를 사용하여 수행될 수 있으며, 여기서 테스트 프로그램 및 시뮬레이션된 장치 프로그램은 운영 체제에 의해 제어되는 별도의 프로그램 또는 프로세스로서 존재한다. 두 프로세스 모두 공유 메모리 어드레스 공간에 액세스한다. 또한, 다수의 장치가 별도의 프로세스로서 시뮬레이션될 수 있으며, 다수의 테스트 프로그램(예컨대, 시뮬레이션된 장치마다 하나씩)을 실행하여 테스트 환경의 속도 및 견고성을 향상시킬 수 있다.
단계(605)에서, 알려진 데이터 패턴이 시뮬레이션된 장치 및 시뮬레이션된 장치를 테스트하기 위한 명령을 실행하는 테스트 프로그램 모두에게 액세스 가능한 공유 메모리 공간 내의 호스트 메모리(예컨대, 호스트 데이터 버퍼)의 특정 위치에 저장된다. 단계(610)에서, 테스트 프로그램이 명령을 공유 메모리 공간에 저장한다. 이 명령은 인덱스, ID, 메모리 위치 및 선택적으로는 데이터 길이 또는 크기와 같은 다른 아규먼트를 위한 필드들을 포함하는 데이터 구조에 저장된다. 일부 실시예들에 따르면, 이 명령은, 시뮬레이션된 장치의 제어기가 실행하기 위한 명령들을 큐잉하기 위해, 테스트 프로그램 및 시뮬레이션된 장치 모두가 액세스할 수 있도록 매핑된 메모리인 BAR에 저장되고, 대기된 명령들은 임의의 순서로 실행될 수 있다.
단계(615)에서, 시뮬레이션된 장치는 공유 메모리 공간의 데이터 구조로부터의 명령에 액세스한다. 명령에 액세스하는 것은 데이터 구조에서 인덱스, ID, 메모리 위치 및 기타 아규먼트를 판독하는 것을 포함할 수 있다.
단계(620)에서, 시뮬레이션된 장치는, 인덱스에 의해 표시된 메모리 위치를 사용하여 명령 ID에 의해 정의된 동작을 수행한다. 단계(620)는 일반적으로 공유 메모리 어드레스 공간 내의 데이터에 액세스하는 것을 포함한다. 단계(620)는 인덱스에 의해 표시된 데이터의 위치를 호스트 메모리의 물리적 메모리 위치에 매핑하는 물리적 어드레스 매핑을 조회하기 위해 시뮬레이션된 장치가 공유 메모리 위치(예컨대, BAR)에 액세스하는 것을 더 포함할 수 있다. 아래에 더 상세히 설명하는 바와 같이, 동작은 프로그램 동작, 판독 동작, 삭제 동작 등을 포함할 수 있다. 예를 들어, 동작은 플래시 메모리(예컨대, NAND 플래시)의 하나 이상의 다이에 대한 판독 및 기록을 시뮬레이션하는 방식으로 디스크 파일에 대해 데이터를 판독 또는 기록하는 것을 포함할 수 있다. 동작은 데이터가 디스크 파일에 기록되기 전에 하나 이상의 큐에 데이터를 기록하는 것을 더 포함할 수 있다.
호스트 발행 프로그램 동작에서, 데이터 구조 내 ID는 그 동작이 데이터 구조의 인덱스가 가리키는 호스트 메모리의 위치에 미리 저장된 데이터를 사용하여 프로그램 동작을 수행하는 것을 포함하고, 단계(620)는 시뮬레이션된 장치의 제어기가 인덱스에 의해 표시된 메모리 위치에 따라 호스트 메모리 내의 데이터에 대해 판독 요청(예컨대, PCIe 판독 요청)을 하는 것을 더 포함한다. 시뮬레이션된 장치의 제어기는 호스트 메모리로부터 데이터를 획득하고 데이터 구조 내 메모리 위치가 가리키는 위치에 있는 하나 이상의 디스크 파일에 데이터를 기록한다. 데이터 구조의 길이 또는 크기 필드는 호스트 메모리에서 읽고 디스크 파일에 쓰는 데이터 양을 나타낸다. 일부 실시예들에 따르면, 기록할 데이터의 위치는 인덱스로 표시되고, 위치는 공유 메모리 공간(예컨대, BAR)을 정의하는 메모리 매핑에 따라 PCIe 어드레스 공간 내의 물리적 메모리 위치로 변환된다. 일부 실시예들에 따르면, 디스크 파일에 기록되는 데이터는 디스크 파일에 기록되기 전에 큐에 먼저 기록된다. 프로그램 명령이 완료되면, DUT는 호스트가 데이터 블록을 해제할 수 있도록 완료 표시자를 발행한다.
판독 동작의 경우, 데이터 구조 내 ID는 동작이 장치의 하나 이상의 디스크 파일에 저장된 데이터를 획득하기 위해 판독 동작을 수행하는 것을 포함하고, 단계(620)는 시뮬레이션된 장치의 제어기가 데이터 구조 내의 메모리 위치가 가리키는 위치에 있는 하나 이상의 디스크 파일로부터 데이터를 획득하는 것과, 이 데이터를 제공된 인덱스에 따라 호스트 메모리 내의 위치에 기록(예컨대, PCIe 기록 요청을 발행)하는 것을 더 포함한다. 데이터 구조의 길이 또는 크기 필드는 디스크 파일에서 읽고 호스트 메모리에 쓰는 데이터의 양을 나타낼 수 있다. 일부 실시예들에 따르면, 인덱스에 의해 표시된 데이터를 기록하기 위한 메모리 위치는 공유 메모리 공간(예컨대, BAR)에 정의된 메모리 매핑에 따라 PCIe 어드레스 공간 내의 물리적 메모리 위치로 변환된다. 판독 작업이 완료되면, 완료 표시자는 호스트에게 데이터가 식별된 블록에서 사용할 수 있다고 통지한다.
삭제 동작의 경우, 데이터 구조 내의 ID는 그 동작이 데이터를 삭제하기 위한 삭제 동작을 수행하는 것을 포함함을 나타내고, 단계(620)는 시뮬레이션된 장치의 제어기가 데이터 구조 내의 메모리 위치가 가리키는 위치에 있는 하나 이상의 디스크 파일을 삭제하는 것을 더 포함한다. 데이터 구조 내의 길이 또는 크기 필드는 삭제될 데이터 양(예컨대, 파일 수량)을 나타낼 수 있다. 일부 실시예들에 따르면, 각각의 디스크 파일은 NAND 플래시 메모리의 블록을 나타내고, 삭제 동작은 블록 단위(파일 단위)로 수행된다. 일부 실시예에 따르면, 삭제 동작은 메모리로부터 하나 이상의 디스크 파일을 삭제하는 단계를 포함한다.
단계(625)에서, 시뮬레이션된 장치는 동작이 완료되었음을 나타내는 완료 표시자를 테스트 프로그램으로 전송한다. 완료 표시자는 공유 메모리 공간의 BAR에 구현된 완료 큐에 저장될 수 있다. 또한, 프로그램 명령의 경우, 단계(625)는 명령이 완료된 후 제각기의 인덱스 위치를 해제하는 것을 포함할 수 있다. 판독 명령의 경우, 완료 표시자는 데이터 판독 준비가 되었음을 호스트에게 통지한다.
도 7에서는, 본 발명의 실시예에 따른, 시뮬레이션된 장치를 테스트하기 위한 예시적인 컴퓨터 구현 단계들(700)의 시퀀스가 도시되어 있다. 컴퓨터 구현 단계들(700)은 리눅스 기반 운영 체제를 사용하여 수행될 수 있으며, 여기서 테스트 프로그램 및 시뮬레이션된 장치 프로그램은 운영 체제에 의해 제어되는 별도의 프로그램 또는 프로세스로서 존재한다. 두 프로세스 모두 공유 메모리 공간에 액세스한다. 또한, 다수의 장치가 별도의 프로세스로서 시뮬레이션될 수 있으며, 다수의 테스트 프로그램(예컨대, 시뮬레이션된 장치마다 하나씩)을 실행하여 테스트 환경의 속도 및 견고성을 향상시킬 수 있다.
단계(705)에서, 알려진 데이터 패턴이 시뮬레이션된 장치 및 시뮬레이션된 장치를 테스트하기 위한 명령을 실행하는 테스트 프로그램 모두에게 액세스 가능한 공유 메모리 공간 내의 호스트 메모리(예컨대, 호스트 데이터 버퍼)의 특정 위치에 저장된다.
단계(710)에서, 호스트는 데이터를 DUT에 프로그래밍될 메모리 블록에 저장하고, 테스트 프로그램은 공유 메모리 공간에 프로그램 명령을 저장한다. 이 명령은 인덱스, ID, 메모리 위치 및 선택적으로는 데이터 길이 또는 크기와 같은 다른 아규먼트를 위한 필드들을 포함하는 데이터 구조에 저장된다. 일부 실시예들에 따르면, 이 명령은, 시뮬레이션된 장치의 제어기에 의해 실행되기 전에 명령들을 저장하기 위해, 테스트 프로그램 및 시뮬레이션된 장치 모두가 액세스할 수 있는 BAR에 저장되고, 저장된 명령들은 임의의 순서로 실행될 수 있다.
단계(715)에서, 시뮬레이션된 장치는 공유 메모리 공간으로부터 프로그램 명령에 액세스한다. 명령에 액세스하는 것은 공유 메모리 공간 내의 데이터 구조에서 인덱스, ID, 메모리 위치 및 기타 아규먼트를 판독하는 것을 포함할 수 있다.
단계(720)에서, 시뮬레이션된 장치의 제어기는 단계(710)에서 저장된 공유 메모리 공간으로부터 데이터를 판독한다. 시뮬레이션된 장치에 의해 판독된 데이터의 위치는 인덱스로 표시된다. 제어기는, 예를 들어 PCIe 판독 요청을 테스트 프로그램에 발행함으로써 호스트 메모리로부터 데이터를 획득할 수 있다. 단계(720)는 인덱스에 의해 표시된 데이터의 위치를 호스트 메모리의 물리적 메모리 위치에 매핑하는 물리적 어드레스 매핑을 조회하기 위해 시뮬레이션된 장치가 공유 메모리 위치(예컨대, BAR)에 액세스하는 것을 더 포함할 수 있다.
단계(725)에서, 시뮬레이션된 장치는 단계(720)에서 판독된 데이터를 데이터 구조에 저장된 메모리 위치가 가리키는 위치에 있는 하나 이상의 디스크 파일에 기록한다. 일부 실시예들에 따르면, 디스크 파일에 기록되는 데이터는 디스크 파일에 기록되기 전에 큐에 먼저 기록된다.
단계(730)에서, 시뮬레이션된 장치는 프로그램 동작이 완료되었음을 나타내는 완료 표시자를 테스트 프로그램으로 전송한다. 완료 표시자는 공유 메모리 공간의 BAR에 구현된 완료 큐에 저장될 수 있다. 또한, 단계(730)는 프로그램 명령이 완료된 후 제각기의 인덱스 위치를 해제하는 단계를 포함할 수 있다.
단계(735-750)는 선택적으로 시뮬레이션된 장치에 기록된 데이터를 판독하고 프로그램 동작이 에러없이 수행되었음을 검증하기 위해 수행될 수 있다.
단계(735)에서, 테스트 프로그램은 인덱스, 명령이 판독 동작을 포함한다는 것을 나타내는 ID, 및 단계(725)에서 데이터가 기록된 메모리 위치를 포함하는 데이터 구조를 사용하여 판독 명령을 공유 메모리 공간에 저장한다..
단계(740)에서, 시뮬레이션된 장치는 공유 메모리 공간으로부터의 판독 명령에 액세스한다. 명령에 액세스하는 것은 공유 메모리 공간 내의 데이터 구조에서 인덱스, ID, 메모리 위치 및 기타 아규먼트를 판독하는 것을 포함할 수 있다.
단계(745)에서, 시뮬레이션된 장치는 판독 명령에 응답하여 메모리 위치로부터 데이터를 판독한다.
단계(750)에서, 시뮬레이션된 장치는 인덱스에 따라 호스트 데이터 버퍼 내의 제2 위치에 데이터를 기록한다. 예를 들어, 시뮬레이션된 장치는 PCIe 기록 요청을 발행하여 호스트 데이터 버퍼에 데이터를 기록할 수 있다. 일부 실시예들에 따르면, 기록 위치는 인덱스로 표시되고, 이 위치는 공유 메모리 공간에 저장된 BAR에서 정의된 메모리 매핑에 따라 PCIe 어드레스 공간 내 물리적 메모리 위치로 변환된다.
단계(755)에서, 시뮬레이션된 장치는 기록 동작이 완료되었음을 나타내는 완료 표시자를 테스트 프로그램으로 전송한다. 완료 표시자는 공유 메모리 공간의 BAR에 구현된 완료 큐에 저장될 수 있다. 또한, 단계(755)는 판독 명령이 완료된 후 제각기의 인덱스 위치를 해제하는 것을 포함할 수 있다.
도 8에서는, 본 발명의 실시예에 따른, 시뮬레이션된 장치(840)를 테스트하기 위해 예시적인 메모리 기반 통신 프로토콜을 시뮬레이션하기 위한 블록도 및 데이터 흐름도(800)가 도시되어 있다. 테스트 프로그램(810) 및 장치 시뮬레이션(840)은 리눅스 기반 운영 체제 내에서 CPU(805)에 의해 실행된다. 테스트 프로그램(810) 및 장치 시뮬레이션(840)은 CPU(805)에 의해 별도의 프로세스 또는 프로그램으로서 실행될 수 있고, 호스트 데이터 버퍼(815)를 포함하는 공유 메모리 어드레스 공간(820)에 액세스할 수 있다. 장치 시뮬레이션(840)은 판독 명령에 응답하여 데이터(855)를 테스트 프로그램(810)으로 전송할 수 있고, 프로그램 명령에 응답하여 호스트 데이터 버퍼(815)로부터 획득된 데이터(855)를 하나 이상의 디스크 파일(850)에 기록할 수 있다. 동작이 완료된 후, 장치 시뮬레이션(840)은 완료 표시자(865)를 전송하며, 완료 표시자는 완료 큐(825)에 저장될 수 있다.
장치 시뮬레이션(840)은 테스트 프로그램(810)에 의해 발행된 명령(860)에 응답하여 동작들(예컨대, 프로그램, 판독, 삭제)을 수행한다. 명령들은 테스트 프로그램(810) 및 베이스 어드레스 레지스터(830)와 같은 장치 시뮬레이션(840) 모두에 의해 액세스 가능한 공유 또는 매핑된 메모리 공간에 저장될 수 있다. 베이스 어드레스 레지스터(855)는 PCIe 어드레스 공간 내 장치 시뮬레이션(840)의 메모리에 구현되고 테스트 프로그램(810)의 메모리 공간(베이스 어드레스 레지스터(830))에 매핑된다. 이들 명령은 ID, 인덱스, 메모리 위치 및 기타 아규먼트를 위한 필드를 포함하는 데이터 구조로 저장된다. 테스트 프로그램(810)에 의해 발행된 명령은 명령 큐(845)에 저장될 수 있고, 장치 시뮬레이션(840)은 임의의 순서로 명령을 실행할 수 있다.
예시적인 컴퓨터 시스템
본 발명의 실시예들은, 장치 개발 완료에 의존하지 않고, 실제 DUT가 이용가능하기 전에 테스트 및 디버깅 소프트웨어의 개발 효율을 향상시킬 수 있으며, 다양한 변수를 테스트하여 테스트의 견고성과 확장성을 향상시키도록 맞춤화될 수 있는, 시뮬레이션된 DUT 테스트를 수행하기 위한 전자 시스템에 관한 것이다. 일부 실시예는 PCIe(Peripheral Component Interconnect Express) 데이터 버스를 사용하여 호스트 장치와 통신해서 NAND 메모리 장치를 시뮬레이션하기 위한 테스트 프로그램 및 소프트웨어 시뮬레이터를 실행한다. 다음의 논의는 본 발명의 실시예들을 구현하기 위한 플랫폼으로서 사용될 수 있는 하나의 예시적인 전자 시스템 또는 컴퓨터 시스템을 기술한다.
도 9의 예에서, 예시적인 컴퓨터 시스템(912)(예컨대, 에이전트 시스템 또는 수퍼바이저 시스템)은 소프트웨어 애플리케이션을 실행하기 위한 중앙 처리 장치(CPU)(901) 및 선택적으로 운영 체제(예컨대, 리눅스 또는 리눅스 기반 운영 체제)를 포함한다. 랜덤 액세스 메모리(902) 및 판독 전용 메모리(903)는 CPU(901)에 의해 사용되는 애플리케이션 및 데이터를 저장한다. 또한, 컴퓨터 시스템(912)의 메모리 공간(예컨대, 랜덤 액세스 메모리(902)의 메모리 공간)은, 명령을 발행하고 장치들 사이에 데이터를 전송하기 위해 연결된 장치들(예컨대, DUT)에 액세스 가능한 공유 메모리 위치를 매핑하는데 사용될 수 있고, 또한 PCIe와 같은 패킷 기반 프로토콜을 사용하여 구현될 수 있다. 일부 경우에, 프로토콜은, 메모리의 상이한 부분들이 상이한 유형의 기능 또는 메모리 동작을 수행하는 데 사용되도록 정의될 수 있고, DUT는 호스트 장치에 의해 내려진 명령에 기초하여 동작을 수행할 것으로 예상된다. 이러한 방식으로, 본 발명의 실시예는 공유 메모리 기술을 사용하여 메모리 장치(예컨대, NAND 플래시 장치)를 시뮬레이션하여 메모리 장치를 테스트하기 위한 패킷화된 통신 프로토콜을 시뮬레이션할 수 있다.
데이터 저장 장치(904)는 애플리케이션 및 데이터를 위한 비휘발성 저장부를 제공하며, 고정 디스크 드라이브, 착탈식 디스크 드라이브, 플래시 메모리 장치 및 CD-ROM, DVD-ROM 또는 다른 광학 저장 장치를 포함할 수 있다. 선택적 사용자 입력부(906 및 907)는 하나 이상의 사용자로부터의 입력을 컴퓨터 시스템(912)에 전달하는 장치(예컨대, 마우스, 조이스틱, 카메라, 터치 스크린 및/또는 마이크로폰)를 포함한다.
통신 또는 네트워크 인터페이스(908)는 컴퓨터 시스템(912)이 USB 또는 블루투스와 같은 유선 및/또는 무선 통신과 인트라넷 또는 인터넷(예컨대, 802.11 무선 표준)을 포함하는 전자 통신 네트워크를 통해 다른 컴퓨터 시스템, 장치, 네트워크 또는 장치들과 통신할 수 있게 한다. 선택적인 디스플레이 장치(910)는 컴퓨터 시스템(912)으로부터의 신호에 응답하여 시각적 정보를 디스플레이할 수 있는 임의의 장치일 수 있으며, 예를 들어 평판 터치 감지 디스플레이를 포함할 수 있다. CPU(901), 메모리(902/903), 데이터 저장 장치(904), 사용자 입력 장치(906) 및 그래픽 서브 시스템(905)을 포함하는 컴퓨터 시스템(912)의 구성요소는 하나 이상의 데이터 버스(900)를 통해 연결될 수 있다.
도 9의 실시예에서, 선택적 그래픽 서브 시스템(905)은 데이터 버스 및 컴퓨터 시스템(912)의 구성요소들과 결합될 수 있다. 그래픽 시스템은 물리적 그래픽 처리 유닛(GPU)(905) 및 그래픽/비디오 메모리를 포함할 수 있다. 그래픽 서브 시스템(905)은 디스플레이 데이터를 선택적 디스플레이 장치(910)에 출력한다. 디스플레이 장치(910)는 HDMI, DVI, DisplayPort, VGA 등을 사용하여 그래픽 서브 시스템(905)에 통신 가능하게 연결될 수 있다.
일부 실시예는 하나 이상의 컴퓨터 또는 다른 장치에 의해 실행되는 프로그램 모듈과 같은 컴퓨터 실행 가능 명령어의 일반적인 맥락에서 설명될 수 있다. 일반적으로, 프로그램 모듈은 특정 작업을 수행하거나 또는 특정 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 구성요소, 데이터 구조 등을 포함한다. 통상적으로, 프로그램 모듈의 기능은 다양한 실시예에서 원하는 대로 조합되거나 분산될 수 있다.
본 발명의 실시예들은 이와 같이 설명된다. 본 발명을 특정 실시예들로 설명하였지만, 본 발명은 그러한 실시예들에 의해 제한되는 것으로 해석되어서는 안 되고, 다음의 청구 범위에 따라 해석되어야 한다는 것을 이해해야 한다.

Claims (25)

  1. 시뮬레이션된 장치를 테스트하기 위한 메모리 기반의 통신 프로토콜을 시뮬레이션하는 방법으로서,
    호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트는 테스터 시스템이고, 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와,
    테스터 시스템 프로그램의 명령어를 실행하여, 인덱스, ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 명령을 저장하는 단계와,
    DUT 시뮬레이션의 명령어를 실행하여,
    상기 공유 메모리 공간으로부터 상기 명령을 판독하고,
    상기 공유 메모리 공간의 블록에 액세스하여 상기 ID에 의해 정의된 동작을 수행하며 - 공유 메모리의 상기 블록의 위치는 상기 인덱스에 의해 표시됨 -,
    상기 동작이 완료된 후에 완료 표시자를 상기 테스터 시스템 프로그램으로 전송
    하는 단계를 포함하는,
    방법.
  2. 제1항에 있어서,
    상기 ID는 상기 명령이 프로그램 동작을 포함함을 표시하고, 상기 액세스는 상기 메모리 위치에 기록할 데이터를 획득하기 위해 상기 블록을 판독하는 것이며, 상기 동작은 상기 프로그램 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션이 상기 명령에 응답하여 상기 데이터를 디스크 파일에 기록하는 것을 더 포함하는,
    방법.
  3. 제1항에 있어서,
    상기 ID는 상기 명령이 판독 동작을 포함함을 표시하고, 상기 액세스는 상기 메모리 위치로부터 판독된 데이터를 저장하는 것이며, 상기 동작은 상기 판독 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션의 명령어를 실행하여, 하나 이상의 디스크 파일에 액세스하여 상기 메모리 위치에 있는 데이터를 판독하고, 공유 메모리의 상기 블록 내의 상기 호스트 데이터 버퍼에 저장하는 것을 더 포함하는,
    방법.
  4. 제1항에 있어서,
    상기 테스터 시스템 프로그램의 명령어 및 상기 DUT 시뮬레이션의 명령어는 리눅스 기반의 운영 체제에 의해 관리되는 별도의 프로세스로서 실행되는,
    방법.
  5. 제2항에 있어서,
    상기 프로그램 동작 후의 오류에 대해, 상기 시뮬레이션된 장치를 테스트하기 위해 상기 동작 후에 상기 데이터를 검증하는 단계를 더 포함하는,
    방법.
  6. 제5항에 있어서,
    상기 검증하는 단계는 상기 데이터를 예상 결과와 비교하는 단계를 포함하는,
    방법.
  7. 제1항에 있어서,
    상기 명령은 상기 시뮬레이션된 장치의 베이스 어드레스 레지스터(base address register)에 저장되는,
    방법.
  8. 제4항에 있어서,
    상기 테스터 프로그램의 명령어와 상기 DUT 시뮬레이션의 명령어는 동일 프로세서에 의해 실행되는,
    방법.
  9. 제1항에 있어서,
    상기 공유 메모리 공간은 물리 메모리를 에뮬레이트하는 메모리 매핑된 파일을 포함하는,
    방법.
  10. 제9항에 있어서,
    상기 메모리 매핑된 파일은 mmap를 사용하여 매핑된 파일을 포함하는,
    방법.
  11. 제1항에 있어서,
    상기 공유 메모리 공간은 NAND 플래시 메모리를 에뮬레이트하는 메모리 매핑된 파일을 포함하는,
    방법.
  12. 제1항에 있어서,
    상기 메모리 기반의 통신 프로토콜은 PCIe 통신 버스 프로토콜을 이용하는,
    방법.
  13. 시뮬레이션된 장치의 프로그램 동작을 테스트하기 위한 메모리 기반의 통신 프로토콜을 시뮬레이션하는 방법으로서,
    호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와,
    테스터 시스템 프로그램의 명령어를 실행하여, 제1 인덱스, 상기 프로그램 동작의 ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 프로그램 동작을 저장하는 단계와,
    DUT 시뮬레이션의 명령어를 실행하여,
    상기 공유 메모리 공간 내의 상기 프로그램 동작에 액세스하고,
    상기 제1 인덱스에 의해 정의된 상기 공유 메모리 공간의 블록으로부터 데이터를 판독하며,
    상기 데이터를 상기 메모리 위치에 있는 하나 이상의 디스크 파일에 기록하고,
    상기 데이터를 상기 메모리 위치에 기록한 후 제1 완료 표시자를 상기 테스터 시스템 프로그램으로 전송
    하는 단계와,
    상기 테스터 시스템 프로그램의 명령어를 실행하여, 제2 인덱스, 상기 판독 동작을 나타내는 ID, 및 상기 저장 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 판독 동작을 저장하는 단계와,
    상기 DUT 시뮬레이션의 명령어를 실행하여,
    상기 메모리 위치로부터 상기 데이터를 판독하고,
    상기 데이터를 상기 제2 인덱스에 따라 상기 호스트 데이터 버퍼의 블록에 기록하며,
    상기 데이터를 상기 제2 인덱스에 의해 정의된 상기 블록에 기록한 후 제2 완료 표시자를 상기 테스터 시스템 프로그램으로 전송
    하는 단계를 포함하는,
    방법.
  14. 제13항에 있어서,
    상기 시뮬레이션된 장치를 테스트하기 위한 상기 판독 동작 후에 오류에 대해 상기 데이터를 검증하는 단계를 더 포함하고, 상기 검증하는 단계는 상기 데이터를 예상 결과와 비교하는 단계를 포함하는,
    방법.
  15. 제13항에 있어서,
    상기 제1 완료 표시자는 상기 테스터 시스템 프로그램에 의해 관리된 큐에 저장되는,
    방법.
  16. 제13항에 있어서,
    상기 메모리 위치는 디스크의 메모리 위치를 참조하고, 상기 메모리 위치는 플래시 메모리를 시뮬레이션하기 위한 디스크 파일로서 구현되는,
    방법.
  17. 피시험 장치를 시뮬레이션하는 시스템으로서,
    리눅스 기반의 운영 체제를 실행하는 프로세서와,
    상기 프로세서와 통신하며 테스터 시스템 프로그램 및 DUT 시뮬레이션 프로그램을 위한 공유 메모리 공간을 제공하는 메모리를 포함하되,
    상기 테스터 시스템 프로그램 및 상기 DUT 시뮬레이션 프로그램의 명령어들은 상기 프로세서에 의해 실행되고, 상기 프로세서는 상기 피시험 장치의 시뮬레이션을 테스트하기 위한 메모리 기반의 통신 프로토콜을 시뮬레이션하는 방법을 수행하고,
    상기 방법은,
    호스트 데이터 버퍼에 데이터를 저장하는 단계 - 상기 호스트는 테스터 시스템이고, 상기 호스트 데이터 버퍼는 공유 메모리 공간에 구현됨 - 와,
    상기 테스터 시스템 프로그램의 명령어를 실행하여, 인덱스, ID, 및 메모리 위치를 포함하는 데이터 구조를 사용하여 상기 공유 메모리 공간 내에 명령을 저장하는 단계와,
    상기 DUT 시뮬레이션 프로그램의 명령어를 실행하여,
    상기 공유 메모리 공간으로부터 상기 명령을 판독하고,
    상기 공유 메모리 공간의 블록에 액세스하여 상기 ID에 의해 정의된 동작을 수행하며 - 상기 공유 메모리의 상기 블록의 위치는 상기 인덱스에 의해 표시됨 -,
    상기 동작이 완료된 후에 완료 표시자를 상기 테스터 시스템 프로그램으로 전송
    하는 단계를 포함하는,
    시스템.
  18. 제17항에 있어서,
    상기 방법은, 상기 시뮬레이션된 장치를 테스트하기 위해 상기 동작 후에 상기 데이터를 검증하는 단계를 더 포함하고, 상기 검증하는 단계는 상기 데이터를 상기 동작 후의 예상 결과와 비교하는 단계를 포함하는,
    시스템.
  19. 제17항에 있어서,
    상기 ID는 상기 명령이 프로그램 동작을 포함함을 표시하고, 상기 동작은 상기 프로그램 동작을 수행하는 것을 포함하며, 상기 DUT 시뮬레이션 프로그램은 상기 명령에 응답하여 상기 인덱스에 의해 정의된 상기 공유 메모리의 블록으로부터의 데이터를 디스크 파일에 기록하는,
    시스템.
  20. 제17항에 있어서,
    상기 ID는 상기 명령이 판독 동작을 포함함을 표시하고, 상기 동작은 상기 판독 동작을 수행하는 것을 포함하고, 상기 DUT 시뮬레이션 프로그램의 명령어를 실행하여, 하나 이상의 디스크 파일에 액세스하여 데이터를 판독하고, 상기 디스크 파일로부터의 상기 데이터를 상기 인덱스에 의해 정의된 위치에 있는 상기 호스트 데이터 버퍼에 기록하는 것을 더 포함하는,
    시스템.
  21. 제17항에 있어서,
    상기 테스터 시스템 프로그램의 명령어 및 상기 DUT 시뮬레이션 프로그램의 명령어는 별도의 프로세스로서 실행되고, 상기 별도의 프로세스는 리눅스 기반의 운영 체제에 의해 관리되는,
    시스템.
  22. 제17항에 있어서,
    상기 메모리 기반의 통신 프로토콜은 PCIe 통신 버스 프로토콜인,
    시스템.
  23. 시뮬레이션된 장치와 메모리 기반의 통신을 수행하는 시스템으로서,
    프로세서와,
    상기 프로세서에 연결된 메모리와,
    상기 프로세서에 의해 실행되는 테스터 시스템 프로세스를 포함하되,
    상기 테스터 시스템 프로세스는 호스트 데이터 버퍼를 포함하는 공유 메모리 어드레스 공간을 할당받고, 상기 테스터 시스템 프로세스는 상기 호스트 데이터 버퍼에 데이터를 저장하고 상기 공유 메모리 어드레스 공간에 명령을 저장함으로써 장치 프로세스에 명령을 발행하며,
    상기 장치 프로세스는 장치 시뮬레이션을 위해 상기 프로세서에 의해 실행되고,
    상기 장치 프로세스는,
    디스크 파일로부터 데이터를 판독하고,
    상기 디스크 파일에 데이터를 기록하며,
    상기 공유 메모리 어드레스 공간으로부터 명령을 판독하고,
    상기 명령에 따라 동작들을 수행
    하도록 동작가능한 제어기를 포함하며,
    상기 명령은,
    상기 호스트 데이터 버퍼로부터 인덱스된 데이터를 판독하고 상기 인덱스된 데이터를 상기 디스크 파일에 기록하는 프로그램 동작과,
    상기 디스크 파일로부터 데이터를 판독하고 인덱스 값에 따라 상기 데이터를 상기 상기 호스트 데이터 버퍼에 기록하는 판독 동작과,
    하나 이상의 상기 디스크 파일을 삭제하는 삭제 동작을 포함하는,
    시스템.
  24. 제23항에 있어서,
    상기 테스터 시스템 프로세스는 테스터 시스템을 시뮬레이션하고, 상기 장치는 피시험 장치를 시뮬레이션하는,
    시스템.
  25. 제24항에 있어서,
    상기 공유 메모리 어드레스 공간은 상기 테스터 시스템과 상기 피시험 장치 사이에 PCIe 버스를 시뮬레이션하는,
    시스템.
KR1020200051936A 2019-06-03 2020-04-29 메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법 KR102243791B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US16/430,284 US11302412B2 (en) 2019-06-03 2019-06-03 Systems and methods for simulated device testing using a memory-based communication protocol
US16/430,284 2019-06-03

Publications (2)

Publication Number Publication Date
KR20200139083A true KR20200139083A (ko) 2020-12-11
KR102243791B1 KR102243791B1 (ko) 2021-04-22

Family

ID=73550359

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020200051936A KR102243791B1 (ko) 2019-06-03 2020-04-29 메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법

Country Status (5)

Country Link
US (1) US11302412B2 (ko)
JP (1) JP6916340B2 (ko)
KR (1) KR102243791B1 (ko)
CN (1) CN112035299B (ko)
TW (1) TWI743703B (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113191114A (zh) * 2021-04-30 2021-07-30 北京百度网讯科技有限公司 用于验证系统的方法和装置

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US11069420B2 (en) * 2019-07-25 2021-07-20 Micron Technology, Inc. In-system test of a memory device
CN112711442A (zh) * 2020-12-29 2021-04-27 北京浪潮数据技术有限公司 一种主机命令写入方法、设备、系统及可读存储介质
US20220382668A1 (en) * 2021-05-28 2022-12-01 Advantest Corporation Systems and methods for concurrent and automated testing of zoned namespace solid state drives
TWI772189B (zh) * 2021-09-24 2022-07-21 英業達股份有限公司 硬碟模擬裝置及應用該裝置的測試系統及其測試方法
CN117806892A (zh) * 2024-02-29 2024-04-02 山东云海国创云计算装备产业创新中心有限公司 存储芯片模型测试方法、装置、通信设备及存储介质

Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0561935A (ja) * 1991-08-30 1993-03-12 Hitachi Ltd 論理シミユレーシヨン方式
JPH06194415A (ja) * 1992-09-30 1994-07-15 American Teleph & Telegr Co <Att> 論理回路の試験方法とその装置
JP2001134469A (ja) * 1999-08-16 2001-05-18 Advantest Corp 半導体試験用プログラムデバッグ装置
KR20020008108A (ko) * 1998-11-13 2002-01-29 일렉트로글라스, 인코포레이티드 논리 집적 회로들의 논리적인 기능 테스트 데이터를물리적인 표시로 맵핑하기 위한 집적 회로 테스트소프트웨어 시스템
JP2005032191A (ja) * 2003-07-11 2005-02-03 Sharp Corp 仮想テスタ、テスト装置、半導体集積回路用テストシステム、及び半導体集積回路用テストプログラムの検証方法
KR20070020247A (ko) * 2004-05-22 2007-02-20 주식회사 아도반테스토 모듈식 테스트 시스템을 모의하는 방법 및 시스템
KR20080015691A (ko) * 2006-08-16 2008-02-20 삼성전자주식회사 시스템 온 칩 모델 검증 방법 및 장치
JP2012027688A (ja) * 2010-07-23 2012-02-09 Panasonic Corp シミュレーション装置
KR20120095842A (ko) * 2009-07-02 2012-08-29 실리콘 이미지, 인크. 컴퓨터 메모리 테스트 구조
KR20130132625A (ko) * 2011-03-09 2013-12-04 인텔 코포레이션 Ip 블럭의 회로 테스팅을 위한 기능적 패브릭 기반 테스트 래퍼
JP2015507743A (ja) * 2011-12-28 2015-03-12 アルカテル−ルーセント Jtagシステムの遅延スケジューリングの方法および装置
KR20180072700A (ko) * 2015-10-27 2018-06-29 자일링크스 인코포레이티드 회로 설계를 디버깅하기 위한 방법 및 회로

Family Cites Families (20)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5920490A (en) * 1996-12-26 1999-07-06 Adaptec, Inc. Integrated circuit test stimulus verification and vector extraction system
US6076179A (en) * 1997-01-29 2000-06-13 Altera Corporation Method and apparatus of increasing the vector rate of a digital test system
US6493811B1 (en) * 1998-01-26 2002-12-10 Computer Associated Think, Inc. Intelligent controller accessed through addressable virtual space
US7184917B2 (en) * 2003-02-14 2007-02-27 Advantest America R&D Center, Inc. Method and system for controlling interchangeable components in a modular test system
US7155379B2 (en) * 2003-02-25 2006-12-26 Microsoft Corporation Simulation of a PCI device's memory-mapped I/O registers
EP1610136B1 (en) * 2003-03-31 2007-07-11 Advantest Corporation Test emulator
JP3774848B2 (ja) * 2003-07-15 2006-05-17 忠義 須藤 ドアガードのロック機構と掛かり防止機構
US20050251766A1 (en) 2004-05-07 2005-11-10 Shah Gaurav R Circuit design interface
US7737715B2 (en) * 2006-07-31 2010-06-15 Marvell Israel (M.I.S.L) Ltd. Compensation for voltage drop in automatic test equipment
US8229727B2 (en) * 2007-01-09 2012-07-24 International Business Machines Corporation System and method for incorporating design behavior and external stimulus in microprocessor emulation model feedback using a shared memory
US20090119542A1 (en) * 2007-11-05 2009-05-07 Advantest Corporation System, method, and program product for simulating test equipment
US20140236527A1 (en) * 2013-02-21 2014-08-21 Advantest Corporation Cloud based infrastructure for supporting protocol reconfigurations in protocol independent device testing systems
US9310427B2 (en) * 2013-07-24 2016-04-12 Advantest Corporation High speed tester communication interface between test slice and trays
US9910689B2 (en) 2013-11-26 2018-03-06 Dynavisor, Inc. Dynamic single root I/O virtualization (SR-IOV) processes system calls request to devices attached to host
US9310433B2 (en) * 2014-04-18 2016-04-12 Breker Verification Systems Testing SOC with portable scenario models and at different levels
US9454636B1 (en) 2015-04-02 2016-09-27 Esilicon Corporation Integrated circuit design optimization
US10073932B2 (en) * 2016-03-04 2018-09-11 Synopsys, Inc. Capturing time-slice of emulation data for offline embedded software debug
US10719644B2 (en) * 2017-06-30 2020-07-21 Synopsys, Inc. Method and framework to dynamically split a testbench into concurrent simulatable multi-processes and attachment to parallel processes of an accelerated platform
US10295596B1 (en) * 2017-08-09 2019-05-21 Cadence Design Systems, Inc. Method and system for generating validation tests
GB2576493B (en) * 2018-07-23 2022-01-05 Advanced Risc Mach Ltd Data Processing

Patent Citations (12)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPH0561935A (ja) * 1991-08-30 1993-03-12 Hitachi Ltd 論理シミユレーシヨン方式
JPH06194415A (ja) * 1992-09-30 1994-07-15 American Teleph & Telegr Co <Att> 論理回路の試験方法とその装置
KR20020008108A (ko) * 1998-11-13 2002-01-29 일렉트로글라스, 인코포레이티드 논리 집적 회로들의 논리적인 기능 테스트 데이터를물리적인 표시로 맵핑하기 위한 집적 회로 테스트소프트웨어 시스템
JP2001134469A (ja) * 1999-08-16 2001-05-18 Advantest Corp 半導体試験用プログラムデバッグ装置
JP2005032191A (ja) * 2003-07-11 2005-02-03 Sharp Corp 仮想テスタ、テスト装置、半導体集積回路用テストシステム、及び半導体集積回路用テストプログラムの検証方法
KR20070020247A (ko) * 2004-05-22 2007-02-20 주식회사 아도반테스토 모듈식 테스트 시스템을 모의하는 방법 및 시스템
KR20080015691A (ko) * 2006-08-16 2008-02-20 삼성전자주식회사 시스템 온 칩 모델 검증 방법 및 장치
KR20120095842A (ko) * 2009-07-02 2012-08-29 실리콘 이미지, 인크. 컴퓨터 메모리 테스트 구조
JP2012027688A (ja) * 2010-07-23 2012-02-09 Panasonic Corp シミュレーション装置
KR20130132625A (ko) * 2011-03-09 2013-12-04 인텔 코포레이션 Ip 블럭의 회로 테스팅을 위한 기능적 패브릭 기반 테스트 래퍼
JP2015507743A (ja) * 2011-12-28 2015-03-12 アルカテル−ルーセント Jtagシステムの遅延スケジューリングの方法および装置
KR20180072700A (ko) * 2015-10-27 2018-06-29 자일링크스 인코포레이티드 회로 설계를 디버깅하기 위한 방법 및 회로

Cited By (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113191114A (zh) * 2021-04-30 2021-07-30 北京百度网讯科技有限公司 用于验证系统的方法和装置
CN113191114B (zh) * 2021-04-30 2023-11-10 北京百度网讯科技有限公司 用于验证系统的方法和装置

Also Published As

Publication number Publication date
US20200381071A1 (en) 2020-12-03
KR102243791B1 (ko) 2021-04-22
TW202105376A (zh) 2021-02-01
JP6916340B2 (ja) 2021-08-11
CN112035299B (zh) 2024-03-19
TWI743703B (zh) 2021-10-21
US11302412B2 (en) 2022-04-12
CN112035299A (zh) 2020-12-04
JP2020198087A (ja) 2020-12-10

Similar Documents

Publication Publication Date Title
KR102243791B1 (ko) 메모리 기반 통신 프로토콜을 사용하여 시뮬레이션된 장치를 테스트하기 위한 시스템 및 방법
US8180620B2 (en) Apparatus and method for performing hardware and software co-verification testing
US8930912B2 (en) Method and system for performing software verification
US10409632B2 (en) Emulation of hardware components based on interrupt design
US9262299B1 (en) Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
US9262305B1 (en) Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
WO2014035463A1 (en) System and methods for generating and managing a virtual device
TW201933110A (zh) 用於測試固態儲存裝置之韌體的方法與系統以及電子設備
CN105893234A (zh) 用于软件测试的方法和计算设备
JP7321839B2 (ja) ハードウェア抽象化ソフトウェアレイヤを使用するシステムのための汎用仮想化プラットフォーム
JP2016525731A (ja) プログラム試験サービス
CN109271231B (zh) 测试物理硬件装置的方法和仿真物理硬件装置的系统
CN116306392A (zh) 芯片仿真装置、方法、电子设备和存储介质
US10445218B2 (en) Execution of graphic workloads on a simulated hardware environment
US10339229B1 (en) Simulation observability and control of all hardware and software components of a virtual platform model of an electronics system
JP2013020425A (ja) オープンソースソフトウェアを利用したハードウェア・ソフトウェア協調検証方法
US10650174B1 (en) System and method for visualizing event sequences for expressions using both hardware and software state information
AbdElSalam NVMe solid state drive verification solution using HW emulation and virtual device technologies
US9721048B1 (en) Multiprocessing subsystem with FIFO/buffer modes for flexible input/output processing in an emulation system
US11004532B2 (en) Method and system for analyzing traffic data
US11151294B1 (en) Emulated register access in hybrid emulation
Wronka et al. Embedded software debug in simulation and emulation environments for interface IP
CN117672339A (zh) 固态硬盘主控测试方法、装置及计算机可读存储介质
Grigor et al. USB HW/SW Co-Simulation environment with custom test tool integration
CN117577164A (zh) 存储器控制器测试方法及装置

Legal Events

Date Code Title Description
E701 Decision to grant or registration of patent right
GRNT Written decision to grant