fence
lyszt.net은 fence 및 기타 RISC-V 명령어를 더 자세히 다룹니다.
설명
FENCE 명령은 다른 RISC-V 하트와 외부 장치 또는 코프로세서가 보는 장치 I/O 및 메모리 액세스의 순서를 지정하는 데 사용됩니다. 장치 입력(I), 장치 출력(O), 메모리 읽기(R), 메모리 쓰기(W)의 임의의 조합은 동일한 조합의 임의의 조합에 대해 순서가 지정될 수 있습니다. 비공식적으로, 다른 RISC-V 하트나 외부 장치는 FENCE에 선행하는 predecessor 집합의 어떤 연산보다 먼저 FENCE에 후속하는 successor 집합의 어떤 연산도 관찰할 수 없습니다. memorymodel은 RISC-V 메모리 일관성 모델에 대한 정확한 설명을 제공합니다.
FENCE 명령은 또한 외부 장치가 수행하는 메모리 읽기 및 쓰기에 의해 관찰되는, 하트가 수행하는 메모리 읽기 및 쓰기의 순서도 지정합니다. 그러나 FENCE 명령은 외부 장치가 다른 신호 메커니즘을 사용하여 수행하는 이벤트 관찰의 순서를 지정하지 않습니다.
EEI는 어떤 I/O 연산이 가능한지, 특히 로드 및 스토어 명령에 의해 액세스될 때 어떤 메모리 주소가 메모리 읽기 및 쓰기가 아니라 각각 장치 입력 및 장치 출력 연산으로 처리되고 순서가 지정되는지를 정의합니다. 예를 들어, 메모리 매핑된 I/O 장치는 일반적으로 R 및 W 비트가 아닌 I 및 O 비트를 사용하여 순서가 지정되는 캐시되지 않은 로드 및 스토어로 액세스됩니다. 명령어 집합 확장은 FENCE 명령의 I 및 O 비트를 사용하여 순서가 지정되는 새로운 I/O 명령도 설명할 수 있습니다.
펜스 모드 인코딩
FENCE 모드 필드 fm은 FENCE 명령의 의미를 정의합니다. FENCE(fm=0000)는 predecessor 집합의 모든 메모리 연산을 successor 집합의 모든 메모리 연산보다 먼저 순서 지정합니다.
FENCE.TSO 명령은 fm=1000, predecessor=RW, successor=RW인 FENCE 명령으로 인코딩됩니다. FENCE.TSO는 predecessor 집합의 모든 로드 연산을 successor 집합의 모든 메모리 연산보다 먼저 순서 지정하고, predecessor 집합의 모든 스토어 연산을 successor 집합의 모든 스토어 연산보다 먼저 순서 지정합니다. 이로 인해 FENCE.TSO's predecessor 집합의 non-AMO 스토어 연산은 successor 집합의 non-AMO 로드와 순서가 지정되지 않은 상태로 남습니다.
FENCE 명령의 사용되지 않는 필드--rs1 and rd--는 향후 확장에서 더 세밀한 펜스를 위해 예약되어 있습니다. 전방 호환성을 위해 기본 구현은 이러한 필드#를 무시해야 하며, 표준 소프트웨어는 이러한 필드를 0으로 설정해야 합니다. 마찬가지로, 많은 fm 및 predecessor/successor 집합 설정도 향후 사용을 위해 예약되어 있습니다. 기본 구현은 이러한 모든 예약된 구성을 FENCE 명령(fm=0000)으로 처리해야 하며, 표준 소프트웨어는 예약되지 않은 구성만 사용해야 합니다.