인텔 마이크로코드

**인텔 마이크로코드**(Intel microcode)는 인텔이 제조한 x86 프로세서 내부에서 실행되는 마이크로코드이다. 1990년대 중반에 도입된 P6 마이크로아키텍처 이후, 마이크로코드 프로그램은 출시 후 CPU에서 발견된 버그를 해결하기 위해 운영 체제 또는 바이오스 펌웨어에 의해 패치될 수 있다. 인텔은 원래 디자인 포 테스트(DFT) 이니셔티브에 따라 프로세서 디버깅을 위한 마이크로코드 업데이트를 설계했다.Microcode Instruction Pointer for the reset subroutine can be set in the Match register ... thereby bypassing the reset subroutine altogether. 펜티엄 FDIV 버그 이후, 패치 가능한 마이크로코드 기능은 제품 리콜을 할 필요 없이 현장에서 업데이트를 허용하는 더 넓은 목적을 갖게 되었다. P6 및 이후 마이크로아키텍처에서는 x86 명령어가 특정 프로세서 및 스테핑 수준에 특정한 더 단순한 RISC 스타일의 마이크로 오퍼레이션으로 내부적으로 변환된다.
# P6 이전 마이크로코드
인텔 80486 및 AMD Am486에는 약 5000줄의 마이크로코드 어셈블리가 있으며, ROM에 저장된 총 약 240 Kbits이다.quote=Twelve pins are affiliated with the "ICE" circuitry. … AMD 486DXL and DXLV connect three pins associated with "ICE" in order to implement its "SMM" feature. … 250 lines or 12,032 bits of the "ICE" microcode in the 486. "ICE" constitutes about five percent of the total 486 microcode. … two lines … (used to set the "ICE" mode "flip flop") … blue coded lines of microcode are associated with production testing and not used for "ICE" related purposes. … Seventy-five red coded lines were used by Intel to perform "SMM" in its 486SL, a data sheet function of this version of the chip. About 32 yellow coded lines perform routine operations which are not unique to "ICE." About two lines remain dedicated solely to "ICE."
# P6 및 이후 마이크로 오퍼레이션
마이크로 오퍼레이션 펜티엄 프로부터, 대부분의 인텔 x86 프로세서에서는 명령어 인출 및 디코더 유닛에 의해 프로세서에 특정한 마이크로 오퍼레이션 시퀀스로 변환되어 프로세서에 의해 직접 실행된다. 마이크로코드에 구현된 명령어의 경우, 마이크로코드는 온칩 메모리에서 인출된 마이크로 오퍼레이션으로 구성된다.url-status=dead 펜티엄 프로에서는 각 마이크로 오퍼레이션은 72비트 너비8192 x 72 bits) that issues long sequences of micro-operations43 또는 118비트 너비이다.quote=P6 uops have a fixed length of 118 bits, using a regular structure to encode an operation, two sources, and a destination. The source and destination fields are each wide enough to contain a 32-bit operand.214 여기에는 Opcode, 두 개의 소스 필드 및 하나의 대상 필드가 포함된다.of an opcode, two source and one destination operand. These micro-ops are fixed length and are more general than the Pentium(R) processor's microcode since they need to be scheduled.7 32비트 즉시 값을 저장할 수 있는 기능이 포함된다.14 펜티엄 프로는 내부 마이크로코드 고정 기억 장치에서 패리티 에러를 감지하고 이를 머신 체크 아키텍처(Machine Check Architecture)를 통해 보고할 수 있다.issue=December 1995 마이크로 오퍼레이션은 최대 세 개의 소스 입력과 두 개의 대상 출력을 갖는 일관된 형식을 갖는다. 프로세서는 실행 전후에 이러한 입력을 실제 레지스터 파일(RRF)로 매핑하기 위해 레지스터 이름 변경을 수행한다. 비순차적 명령어 처리가 사용되므로 마이크로 오퍼레이션 및 해당 오퍼레이션이 나타내는 명령이 동일한 순서로 나타나지 않을 수 있다. 펜티엄 프로 개발 중, A2 및 B0 스테핑 사이에 여러 마이크로코드 수정 사항이 포함되었다.url-status=dead 펜티엄 II (P6 펜티엄 프로 기반)의 경우, MMX (명령어 집합)을 지원하기 위해 추가 마이크로 오퍼레이션이 추가되었다. 여러 경우에, 희귀한 코너 케이스를 신뢰할 수 있는 방식으로 처리하기 위해 "마이크로코드 어시스트"가 추가되었다. 펜티엄 4는 동시에 126개의 마이크로 오퍼레이션을 수행할 수 있다.10 마이크로 오퍼레이션은 12,000개의 항목이 있는 실행 추적 캐시에 디코딩되어 저장되므로 동일한 x86 명령어의 반복적인 디코딩을 피할 수 있다.5 여섯 개의 마이크로 오퍼레이션 그룹은 트레이스 라인으로 묶인다.5 마이크로 오퍼레이션은 동일한 캐시 라인 내에서 추가 즉시 데이터 공간을 빌릴 수 있다.quote=… If a μop has an immediate 32-bit operand outside the ±215 interval so that it cannot be represented as a 16-bit signed integer, then it will use two trace cache entries unless it can borrow storage space from a nearby μop. … A μop in need of extra storage space can borrow 16 bits of extra storage space from a nearby μop that doesn't need its own data space.49 예외 처리와 같은 복잡한 명령어는 마이크로코드 ROM으로 점프하게 된다.6 펜티엄 4 개발 중 마이크로코드는 프로세서 버그의 14%를 차지했으며, 펜티엄 프로 개발 중에는 프로세서 버그의 30%를 차지했다.editor1-last=Chao35 2006년에 도입된 인텔 코어 (마이크로아키텍처)는 비교 후 점프를 포함한 일부 일반적인 명령어 쌍에 대해 "매크로 오퍼레이션 융합"을 추가했다. 코어의 명령어 디코더는 x86 명령어를 세 가지 다른 방식으로 마이크로코드로 변환한다: {| class="wikitable" |+ 코어에서 x86 명령어를 마이크로 오퍼레이션으로 변환 |- ! x86 명령어 !! x86 디코더 !!| 마이크로 오퍼레이션 |- | 공통 || 단순 디코더 × 3 ||| 1–3 |- | 대부분의 다른 명령어 || 복잡 디코더 × 1 ||| ≤4 |- | 매우 복잡한 명령어 || 마이크로코드 시퀀서 ||| 많음 |} 인텔의 하이퍼스레딩 구현을 위한 동시 멀티스레딩의 경우, 마이크로코드 ROM, 트레이스 캐시 및 명령어 디코더는 공유되지만, 마이크로 오퍼레이션 대기열은 공유되지 않는다.
# 업데이트 기능
1990년대 중반에 새로운 마이크로코드를 제공하는 기능은 처음에는 펜티엄 프로 **바이오스 업데이트 기능**이라고 불렸다.quote=authentication procedure relies upon the decryption provided by the processor to verify an update from a potentially hostile sources. 사용자 모드 애플리케이션은 새로운 "바이오스 업데이트 데이터 블록"을 제공하기 위해 바이오스 인터럽트 호출을 수행해야 하며, 바이오스는 이를 부분적으로 검증하여 비휘발성 바이오스 메모리에 저장할 수 있으며, 이는 다음 부팅 시 설치된 프로세서에 제공될 수 있다. 인텔은 `BUP_UTIL.EXE`라는 프로그램을 배포했는데, 이 프로그램은 `CHECKUP3.EXE`로 이름이 변경되었으며 도스에서 실행할 수 있다. 여러 마이크로코드 업데이트 모음은 `PEP6.PDB`와 같이 `.PDB` 확장자로 숫자로 번호가 매겨져 연결되었다.access-date=2018-10-0179
## 프로세서 인터페이스
프로세서는 내부 ROM에 저장된 마이크로코드 세트를 사용하여 부팅한다. 마이크로코드 업데이트는 별도의 SRAM과 마이크로코드 ROM 내에서 브레이크포인트 역할을 하는 "일치 레지스터" 세트를 채워 SRAM의 업데이트된 마이크로 오퍼레이션 목록으로 점프할 수 있게 한다. 마이크로코드 명령어 포인터(UIP)와 모든 일치 레지스터 사이에서 일치가 수행되며, 일치가 발생하면 SRAM에 저장된 업데이트된 마이크로코드의 해당 대상 마이크로코드 주소로 점프한다.3 원래 P6 아키텍처에서는 SRAM에 60개의 마이크로 오퍼레이션을 위한 공간과 여러 개의 일치/대상 레지스터 쌍이 있다.3 ROM 마이크로코드에서 SRAM에 저장된 패치된 마이크로코드로 점프하는 데는 한 명령 주기가 걸린다. 일치 레지스터는 마이크로코드 일치 주소와 마이크로코드 대상 주소로 구성된다. 마이크로코드 업데이트를 시작하려면 프로세서가 보호 링 0 ("Ring 0")에 있어야 한다.1 대칭형 다중 처리 구성에서 각 CPU는 개별적으로 업데이트해야 한다.1 업데이트는 `eax` 레지스터에 주소를 넣고, `ecx = 0x79`로 설정한 후, `wrmsr`(모델별 레지스터 쓰기)를 실행하여 시작된다.435
### 마이크로코드 업데이트 형식
인텔은 마이크로코드 업데이트를 2,048(2킬로바이트) 바이너리 블롭으로 배포한다. 이 업데이트에는 업데이트 대상 프로세서에 대한 정보가 포함되어 있어 CPUID 명령어 결과와 비교하여 확인할 수 있다. 구조는 48바이트 헤더 뒤에 업데이트할 프로세서가 직접 읽도록 의도된 2,000바이트가 이어진다. # 마이크로코드 업데이트 과정에서 프로세서가 실행하는 마이크로코드 프로그램. 이 마이크로코드는 특수 레지스터를 사용하여 구성 요소를 재구성하고 활성화 또는 비활성화할 수 있으며, 브레이크포인트 일치 레지스터를 업데이트해야 한다. # SRAM에 채워질 최대 60개의 패치된 마이크로 오퍼레이션. # 마이크로코드 업데이트 형식 이해를 어렵게 하기 위해 무작위 값으로 구성된 패딩. 각 블록은 다르게 인코딩되며, 2,000바이트의 대부분은 구성 프로그램 및 SRAM 마이크로 오퍼레이션 내용 자체보다 훨씬 작으므로 사용되지 않는다. 업데이트가 프로세서에 적용될 수 있는지에 대한 최종 결정 및 검증은 프로세서를 통한 복호화 과정에서 수행된다. 각 마이크로코드 업데이트는 특정 CPU 수정에 맞춰져 있으며, 다른 스테핑 수준의 CPU에서는 거부되도록 설계되었다. 마이크로코드 업데이트는 위변조 방지 및 검증 활성화를 위해 암호화된다.quote=obscure moniker "BIOS Update Feature." … "Each BIOS Update is tailored for a particular stepping of [a] processor," … data block is mapped directly-… after decryption-to the microcode itself. 펜티엄에는 두 개의 암호화 계층이 있으며, 정확한 세부 사항은 인텔이 명시적으로 문서화하지 않았으며, 직원 10명 미만만이 알고 있다.quote=Ajay Malhortra, a technical marketing manager based here at Intel's microprocessor group. "Not only is the data block containing the microcode patch encrypted, but once the processor examines the header of the BIOS update, there are two levels of encryption in the processor that must occur before it will successfully load the update." … closely guarded secret. "There is no documentation," said Frank Binns, an architect in Intel's microprocessor group. "It's not as if you can get an Intel 'Red Book' with this stuff written down. It's actually in the heads of less than 10 people in the whole of Intel." 인텔 아톰, 네할렘 및 샌디브리지에 대한 마이크로코드 업데이트에는 17진수의 지수를 갖는 2048비트 RSA 모듈러스가 포함된 추가 520바이트 헤더가 포함된다.7,8 {| class="wikitable" |+ 관찰된 인텔 마이크로코드 데이터 블록 길이 (바이트)16 ! 마이크로아키텍처 !! 예시 프로세서 !! 제공된 길이 !! 기능적 길이 !! 의심되는 인코딩 |- | P6 || 펜티엄 프로 ||| 2000 ||| 864; 872; 944; 1968 ||rowspan="2"| 64비트 블록 암호 |- | 코어 || PIII … 코어 2 ||| 4048 ||| 3096 |- | 넷버스트 || 펜티엄 4, 펜티엄 D, 셀러론 ||| 2000–7120 ||| 2000 + N*1024 || 체인 블록 암호 |- | 아톰, 네할렘, 샌디브리지 || 코어 i3/i5/i7 ||| 976–16336 ||| 976 + N*1024; 5120 || AES + RSA 서명 |}
# 디버깅
확장 실행 추적을 활성화하기 위해 특수 디버깅 전용 마이크로코드를 로드할 수 있으며, 이는 브레이크포인트 모니터 핀을 통해 추가 정보를 출력한다. 펜티엄 4에서는 특수 마이크로코드를 로드하면 마이크로코드 확장 실행 추적 모드에 액세스할 수 있다. JTAG 테스트 액세스 포트(TAP)를 사용할 때, 브레이크포인트 컨트롤 레지스터 쌍은 마이크로코드 주소에서 브레이크를 허용한다. 1980년대 중반 NEC와 인텔은 마이크로코드 저작권에 대한 오랫동안 진행된 미국 연방 법원 소송을 벌였다.quote=NEC's use of its clean room procedures as trial evidence … Judge Gray defined microcode … within the Copyright Act's definition of a "computer program," … Intel's microcode is copyrightable. … Intel's microcode did not contain the required copyright notice. … copyrights had been forfeited. … Intel was left with no basis for its claim of copying NEC는 인텔 8086 CPU의 2차 공급원으로서 NEC μPD8086을 사용하고 있었으며, 인텔과 장기적인 특허 및 저작권 크로스 라이선스 계약을 체결하고 있었다. 1982년 8월 인텔은 마이크로코드 구현에 대한 저작권 침해로 NEC를 고소했다.quote=Appendix: Microcode formats; 8086/8088 Format; V20/V30 formatissn=0010-4841 NEC는 클린룸 설계를 통해 자사 V20 및 V30 프로세서의 마이크로코드 구현 유사성이 복사본이 아닌 아키텍처가 요구하는 제약으로 인한 것임을 입증하여 승소했다. 인텔 386은 마이크로코드와 프로그래머블 로직 어레이의 내장 자체시험을 수행할 수 있으며, 자체 테스트 값은 `EAX` 레지스터에 저장된다.quote=self-test checks the function of all of the Control ROM … EAX register will contain a signature of 00000000h indicating the Intel386 DX passed its self-test of microcode and major PLA contents BIST 중 마이크로프로그램 카운터는 모든 ROM을 순회하는 데 재사용되며, 결과는 다중 입력 시그니처 레지스터(MISR) 및 선형 피드백 시프트 레지스터 네트워크를 통해 수집된다.quote=For ROMs, the patterns are generated by the microprogram counter which is part of the normal logic. 인텔 486 시작 시, 하드웨어 제어 BIST는 220 클럭 사이클 동안 실행되어 마이크로코드 ROM을 포함한 다양한 어레이를 확인하며, 그 후 제어는 레지스터 및 계산 단위의 추가 자체 테스트를 위해 마이크로코드로 전환된다.conference=1989 IEEE International Conference on Computer Design: VLSI in Computers and Processors 인텔 486 마이크로코드 ROM은 250,000개의 트랜지스터를 가지고 있다. AMD는 인텔의 286, 386 및 486 마이크로코드를 재사용하는 장기 계약을 맺고 있었다. 2004년 10월, 법원은 이 계약이 AMD가 인텔의 486 인서킷 에뮬레이션(ICE) 마이크로코드를 배포하는 것을 포함하지 않는다고 판결했다.
## 직접 접근 테스트
직접 접근 테스트(DAT)는 인텔 CPU에 포함된 디자인 포 테스트(DFT) 및 디버그 설계를 위한(DFD) 이니셔티브의 일부로서, 판매 전 개별 CPU의 전체 커버리지 테스트를 허용한다.Design for Test test strategy is to use PBIST (Programmable Built-In Self Test) to test the second level cache and use DAT to test the remaining arrays … PBIST is available through the JTAG TAP controller. … DAT mode in PX as shown in Figure 4 … PX has more arrays (>110) … array test coverage of PX is 99.3% ‒ the highest in Pentium 4 family 2020년 5월, Control Register Bus (CRBUS)date=2020-05-25에서 직접 읽는 스크립트(JTAG USB-A to USB-A 3.0 with Debugging Capabilities에서 "Red Unlock"을 악용한 후, D+, D− 및 Vcc 없음)을 사용하여 골드몬트 CPU의 Local Direct Access Test (LDAT) 포트에서 읽고 로드된 마이크로코드 및 패치 배열을 읽었다.title=Using the Local Direct Access Test (LDAT) DFT feature of Intel Atom CPU, we dumped Microcode Sequencer ROM. Also, we extracted what we think is IROM (Immediates for uops) and even managed to modify MS Patch RAM and Match/Patch registers 이러한 배열은 CPU가 특정 모드로 설정된 후에만 접근 가능하며, 오프셋 0x6a0을 통해 접근되는 5개의 배열로 구성된다.quote=PDAT CR: 0x6A0; Array Select: 0‒4 RAM: 마이크로코드 트라이어드 (업데이트 가능)
# 더 읽어보기
참고 자료 시작 * pubdate=1995-04-04 "the first Control micro operations in a REP swing operation loads the micro sequencer Loop Counter with the number of iterations remaining after the unrolled iterations are executed. … a small number of iterations (e.g., seven), are sent during the time it takes for the Loop Counter in the MS to be loaded. This unrolled code is executed conditionally based on the value of (E)CX … remaining three iterations are turned into NOPS." * pubdate=1996-09-24 * pubdate=1996-10-15 "… control returns to the Micro-operation Sequence (MS) unit to issue further error correction Control micro-operations (Cuops). In order to simplify restart, the Cuops originating from the error-causing macroinstruction supplied by the translate programmable logic arrays (XLAT PLAs) are loaded into the Cuop registers, with their valid bits unasserted." * status=patent "ADD, XOR, SUB, AND, and OR, which are implemented with one generic Cuop. Another group of instructions representable by only one Control micro-operation includes Add with Carry and Subtract with Borrow * status=patent * status=patent * status=patent * status=patent "SYSENTER and SYSEXIT are assembly-language instructions that may be executed on an Intel architecture processor, such as the Pentium Pro processor … micro-operation is determined to be ready when its source fields have been filled with appropriate data … instruction decode unit comprises one or more translate (XLAT) programmable logic arrays (PLAs) that decode each instruction in to one or more micro-operations. … SYSENTER and SYSEXIT instructions are decoded in to micro-operations that perform the steps illustrated in FIGS. 5 and 6, respectively." * format=`ucode.c` driver * s2cid=19579807 * website=유튜브 참고 자료 끝