跳到主要内容

PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION

PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION

ASL 伪代码

下面直接显示完整的 ASL 所有者。

// PTO-UNIT: {"id":"PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION","surface":"arch","classification":["memory-model","fault-precision"],"depends_on":["PTO-ARCH-STATE-TRAP-CONTEXT"]}func SetFaultWithCause(code: FaultCode, address: Word, cause: bits(24))begin    let source_ring = CurrentACR();    let ring = if code == Fault_None then source_ring        else TrapTargetForFault(source_ring);    if code != Fault_None then        SaveTrapContext(ring, source_ring);    end;    _LastFault = code;    _FaultAddress = address;    _ACRTrapAsynchronous[[ring]] = FALSE;    _ACRTrapArgumentValid[[ring]] = code != Fault_None;    _ACRTrapCause[[ring]] = cause;    case code of        when Fault_None => _ACRTrapNumber[[ring]] = Zeros{6};        when Fault_ExecutionStateCheck => _ACRTrapNumber[[ring]] = Zeros{6};        when Fault_IllegalInstruction => _ACRTrapNumber[[ring]] = Zeros{6} + 4;        when Fault_InstructionPC => _ACRTrapNumber[[ring]] = Zeros{6} + 32;        when Fault_InstructionPage => _ACRTrapNumber[[ring]] = Zeros{6} + 33;        when Fault_DataAlignment => _ACRTrapNumber[[ring]] = Zeros{6} + 34;        when Fault_DataPage => _ACRTrapNumber[[ring]] = Zeros{6} + 35;        when Fault_HardwareBreakpoint => _ACRTrapNumber[[ring]] = Zeros{6} + 49;        when Fault_SoftwareBreakpoint => _ACRTrapNumber[[ring]] = Zeros{6} + 50;        when Fault_HardwareWatchpoint => _ACRTrapNumber[[ring]] = Zeros{6} + 51;        when Fault_Assert => _ACRTrapNumber[[ring]] = Zeros{6} + 52;        when Fault_TileLegality => _ACRTrapNumber[[ring]] = Zeros{6} + 5;        when Fault_TileAllocation => _ACRTrapNumber[[ring]] = Zeros{6} + 5;        when Fault_BundleControl => _ACRTrapNumber[[ring]] = Zeros{6} + 5;        // B.CATR.trap is a successful-commit boundary trap, not a failed        // instruction.  It uses the bundle exception class while preserving        // the already selected continuation in the saved clean context.        when Fault_BundlePostCommit => _ACRTrapNumber[[ring]] = Zeros{6} + 5;        when Fault_ServiceRequest => _ACRTrapNumber[[ring]] = Zeros{6} + 6;    end;    _ACRTrapArgument0[[ring]] = address;    if code != Fault_None then        SetCurrentACR(ring);        WriteTPC(TrapVectorEntry(ring, address));    end;end;
func SetFault(code: FaultCode, address: Word)begin    SetFaultWithCause(code, address, Zeros{24});end;
func RaiseServiceRequest(request_type: bits(4)) => booleanbegin    let source_ring = CurrentACR();    if !ServiceRequestPermitted(source_ring, request_type) then        SetFault(Fault_IllegalInstruction, ReadTPC());        return FALSE;    end;
    let source_tpc = ReadTPC();    let resume_tpc = source_tpc + (Zeros{PTO_XLEN} + 4);    let target_ring = ServiceRequestTarget(source_ring, request_type);    SaveTrapContext(target_ring, source_ring);    _TrapContexts[[target_ring]].tpc = resume_tpc;    let ebarg_tpc_index = ((target_ring * 4096) + 0x0f43)        as SystemRegisterFileIndex;    _ExtendedSystemRegisters[[ebarg_tpc_index]] = resume_tpc;
    _LastFault = Fault_ServiceRequest;    _FaultAddress = source_tpc;    _ACRTrapAsynchronous[[target_ring]] = FALSE;    _ACRTrapArgumentValid[[target_ring]] = TRUE;    _ACRTrapCause[[target_ring]] = ZeroExtend{24}(request_type);    _ACRTrapNumber[[target_ring]] = Zeros{6} + 6;    _ACRTrapArgument0[[target_ring]] = source_tpc;    SetCurrentACR(target_ring);    WriteTPC(TrapVectorEntry(target_ring, source_tpc));    return TRUE;end;
func ClearFault()begin    let ring = CurrentACR();    _LastFault = Fault_None;    _FaultAddress = Zeros{PTO_XLEN};    _ACRTrapAsynchronous[[ring]] = FALSE;    _ACRTrapArgumentValid[[ring]] = FALSE;    _ACRTrapCause[[ring]] = Zeros{24};    _ACRTrapNumber[[ring]] = Zeros{6};    _ACRTrapArgument0[[ring]] = Zeros{PTO_XLEN};end;
func RaiseInterrupt(interrupt_id: InterruptID, cause: bits(24))begin    let source_ring = CurrentACR();    let ring = TrapTargetForInterrupt(source_ring);    SetInterruptPending(ring, interrupt_id);    if !InterruptEnabled(ring, interrupt_id) then return; end;    SaveTrapContext(ring, source_ring);    _LastFault = Fault_None;    _FaultAddress = Zeros{PTO_XLEN};    _ACRTrapAsynchronous[[ring]] = TRUE;    _ACRTrapArgumentValid[[ring]] = TRUE;    _ACRTrapCause[[ring]] = cause;    _ACRTrapNumber[[ring]] = Zeros{6} + 44;    _ACRTrapArgument0[[ring]] =        NaturalToWord(interrupt_id as integer {0..262144});    SetCurrentACR(ring);    WriteTPC(TrapVectorEntry(ring, ReadTPC()));end;
readonly func PackTrapStatus(ring: AccessControlRing) => Wordbegin    var value: Word = Zeros{PTO_XLEN};    value[63] = if _ACRTrapAsynchronous[[ring]] then '1' else '0';    value[62] = if _ACRTrapArgumentValid[[ring]] then '1' else '0';    value[24 +: 24] = _ACRTrapCause[[ring]];    value[0 +: 6] = _ACRTrapNumber[[ring]];    return value;end;
func UnpackTrapStatus(ring: AccessControlRing, value: Word)begin    _ACRTrapAsynchronous[[ring]] = value[63] == '1';    _ACRTrapArgumentValid[[ring]] = value[62] == '1';    _ACRTrapCause[[ring]] = value[24 +: 24];    _ACRTrapNumber[[ring]] = value[0 +: 6];end;

架构行为

目的与范围

用途与范围

本单元集中处理故障、服务请求、中断入口以及陷阱状态打包。对于同步 SetFaultWithCause,只有故障代码不是 Fault_None 时才会保存上下文并重定向到目标 AccessControlRing。

概念与架构状态

陷阱入口状态

  • SetFaultWithCause 对每个输入故障代码记录故障代码、地址、原因和陷阱状态。
  • 当故障代码不是 Fault_None 时,它保存上下文、把目标 AccessControlRing 设为当前层级并重定向 TPC。对于 Fault_None,它保留源 ACR 层级,既不保存上下文也不重定向。
  • RaiseServiceRequest 检查权限,保存位于源 TPC 之后四字节的恢复 TPC,再进入服务目标。
  • RaiseInterrupt 先标记中断待处理状态,并且只在该中断已启用时进入。
规则与交互

状态转换规则

  • 同步故障入口把异步位设为假,并为非零故障设置陷阱参数有效位。
  • 中断入口把异步位设为真,记录陷阱编号 44,并把 InterruptID 放入参数 0。
  • ClearFault 清除当前 ACR 层级的故障报告,但不会重建较早上下文。
  • PackTrapStatus 与 UnpackTrapStatus 映射异步位、参数有效位、24 位原因字段和 6 位编号字段。
边界与未定义范围

提交边界

Fault_BundlePostCommit 被表示为成功提交边界陷阱:保存上下文时后继位置已经选定。被拒绝的服务请求则会引发 Fault_IllegalInstruction 并返回假。

使用示例

示例性阅读示例

本示例块只用于帮助阅读:先应用上文规则,再到规范 ASL 所有者中确认结果。它不会增加任何架构契约。

相关所有者

  • PTO-ARCH-STATE-TRAP-CONTEXT 拥有保存上下文的表示。
  • 陷阱上下文恢复单元定义可恢复保存上下文对应的恢复路径。

NDF 条款

正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。

No NDF clause is attached to this unit.

Evidence index

8 matching entries

Executable evidence1
  • PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION compiles as an independent normative unit
    1. surfaceARCH
    2. ownerPTO-ARCH-MEMORY-MODEL-FAULT-PRECISION
    3. categorySTATIC-INVARIANT
    4. case001
    Show exact test source
    Sources and references
    Complete stable ID
    PTO-AVS-ARCH-MEMORY-MODEL-FAULT-PRECISION-STATIC-001
    Path
    tests/asl/arch/memory-model/fault-precision/arch-static-fault-precision-contract-001.asl
    Kind / role
    static-invariant
    Pass condition
    the complete model and this unit's static invariant compile
    SHA-256
    39d43ace5ca58e8c5bd335cd727dad9e83262f40f61f95edf6ed0ac002b4a298
    Open exact source ↗ for PTO-AVS-ARCH-MEMORY-MODEL-FAULT-PRECISION-STATIC-001
Commit-scoped evidence5
  • spec/evidence/release-traceability-readiness.json · closedPTO-EVIDENCE-RELEASE-TRACEABILITY
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-TRACEABILITY
    Path
    spec/evidence/release-traceability-readiness.json
    Kind / role
    ASL/NDF/documentation/AVS traceability
    SHA-256
    c7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3e
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-TRACEABILITY
  • spec/evidence/instruction-contract-closure.json · closedPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
    Path
    spec/evidence/instruction-contract-closure.json
    Kind / role
    mnemonic and encoding contract closure
    SHA-256
    3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106a
    Open exact source ↗ for PTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSURE
  • spec/evidence/architecture-readiness.json · openPTO-EVIDENCE-ARCHITECTURE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-ARCHITECTURE-READINESS
    Path
    spec/evidence/architecture-readiness.json
    Kind / role
    architecture maturity and blockers
    SHA-256
    4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004
    Open exact source ↗ for PTO-EVIDENCE-ARCHITECTURE-READINESS
  • spec/evidence/release-gate-readiness.json · ready-for-exact-head-verificationPTO-EVIDENCE-RELEASE-GATE-READINESS
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-GATE-READINESS
    Path
    spec/evidence/release-gate-readiness.json
    Kind / role
    exact-head gate readiness
    SHA-256
    a0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-GATE-READINESS
  • spec/release-manifest.json · draftPTO-EVIDENCE-RELEASE-MANIFEST
    Sources and references
    Complete stable ID
    PTO-EVIDENCE-RELEASE-MANIFEST
    Path
    spec/release-manifest.json
    Kind / role
    release content and encoding fingerprints
    SHA-256
    1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8
    Open exact source ↗ for PTO-EVIDENCE-RELEASE-MANIFEST
Decision history2
  • PTO total store order candidate model · accepted
    1. decision recordADR
    2. case0006

    Decision record

    Loading ADR-0006…

    Sources and references
    Complete stable ID
    ADR-0006
    Path
    docs/status/decisions/0006-pto-total-store-order.md
    Affected units
    PTO-ARCH-MEMORY-MODEL-ADDRESS-SPACE, PTO-ARCH-MEMORY-MODEL-ATOMICITY, PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION, PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS, PTO-ARCH-MEMORY-MODEL-ORDERING, PTO-ARCH-OVERVIEW-ARCHITECTURE
    Affected NDF
    PTO-ARCH-COMMIT-EVENT-CONFORMANCE-001
    SHA-256
    b80d8782e4587d4023edf02df9d2ba4d3cb2b2999fdc8991e49a2af4f9817735
    Open exact decision source ↗ for ADR-0006
  • Production memory events and atomic corners · accepted
    1. decision recordADR
    2. case0020

    Decision record

    Loading ADR-0020…

    Sources and references
    Complete stable ID
    ADR-0020
    Path
    docs/status/decisions/0020-production-memory-events-and-atomic-corners.md
    Affected units
    PTO-ARCH-MEMORY-MODEL-ADDRESS-SPACE, PTO-ARCH-MEMORY-MODEL-ATOMICITY, PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION, PTO-ARCH-MEMORY-MODEL-GLOBAL-MEMORY-ACCESS, PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS, PTO-ARCH-MEMORY-MODEL-ORDERING, PTO-BLOCK-BSTART-GMOV, PTO-BLOCK-BSTART-MGATHER, PTO-BLOCK-BSTART-MGATHER-CAS, PTO-BLOCK-BSTART-MGATHER-MASK, PTO-BLOCK-BSTART-MSCATTER, PTO-BLOCK-BSTART-MSCATTER-MASK, PTO-BLOCK-BSTART-TLOAD, PTO-BLOCK-BSTART-TPREFETCH, PTO-BLOCK-BSTART-TSTORE, PTO-SCALAR-CASB, PTO-SCALAR-CASD, PTO-SCALAR-CASH, PTO-SCALAR-CASW, PTO-SCALAR-DMA, PTO-SCALAR-HL-CASB, PTO-SCALAR-HL-CASD, PTO-SCALAR-HL-CASH, PTO-SCALAR-HL-CASW, PTO-SCALAR-LD-ADD, PTO-SCALAR-LD-AND, PTO-SCALAR-LD-OR, PTO-SCALAR-LD-SMAX, PTO-SCALAR-LD-SMIN, PTO-SCALAR-LD-UMAX, PTO-SCALAR-LD-UMIN, PTO-SCALAR-LD-XOR, PTO-SCALAR-LR-B, PTO-SCALAR-LR-D, PTO-SCALAR-LR-H, PTO-SCALAR-LR-W, PTO-SCALAR-LW-ADD, PTO-SCALAR-LW-AND, PTO-SCALAR-LW-OR, PTO-SCALAR-LW-SMAX, PTO-SCALAR-LW-SMIN, PTO-SCALAR-LW-UMAX, PTO-SCALAR-LW-UMIN, PTO-SCALAR-LW-XOR, PTO-SCALAR-SC-B, PTO-SCALAR-SC-D, PTO-SCALAR-SC-H, PTO-SCALAR-SC-W, PTO-SCALAR-SD-ADD, PTO-SCALAR-SD-AND, PTO-SCALAR-SD-OR, PTO-SCALAR-SD-SMAX, PTO-SCALAR-SD-SMIN, PTO-SCALAR-SD-UMAX, PTO-SCALAR-SD-UMIN, PTO-SCALAR-SD-XOR, PTO-SCALAR-SW-ADD, PTO-SCALAR-SW-AND, PTO-SCALAR-SW-OR, PTO-SCALAR-SW-SMAX, PTO-SCALAR-SW-SMIN, PTO-SCALAR-SW-UMAX, PTO-SCALAR-SW-UMIN, PTO-SCALAR-SW-XOR, PTO-SCALAR-SWAPB, PTO-SCALAR-SWAPD, PTO-SCALAR-SWAPH, PTO-SCALAR-SWAPW, PTO-TILE-GMOV, PTO-TILE-MGATHER, PTO-TILE-MGATHER-CAS, PTO-TILE-MGATHER-MASK, PTO-TILE-MSCATTER, PTO-TILE-MSCATTER-MASK, PTO-TILE-TLOAD, PTO-TILE-TMOV, PTO-TILE-TPREFETCH, PTO-TILE-TSTORE
    Affected NDF
    PTO-ARCH-GM-ACCESS-001, PTO-BSTART-GMOV-COLLECTIVE-001, PTO-BSTART-MGATHER-CAS-SCHEMA-001, PTO-BSTART-MGATHER-MASK-SCHEMA-001, PTO-BSTART-MGATHER-SCHEMA-001, PTO-BSTART-MSCATTER-MASK-SCHEMA-001, PTO-BSTART-MSCATTER-SCHEMA-001, PTO-BSTART-TLOAD-CUBE-001, PTO-BSTART-TLOAD-MEMORY-001, PTO-BSTART-TPREFETCH-MEMORY-001, PTO-BSTART-TSTORE-CUBE-001, PTO-BSTART-TSTORE-MEMORY-001, PTO-GMOV-CORE4-PEER-001, PTO-MGATHER-BYTE-DISPLACEMENT-001, PTO-MGATHER-CAS-ATOMIC-001, PTO-MGATHER-CAS-PUBLICATION-001, PTO-MGATHER-MASK-PREDICATE-001, PTO-MGATHER-MASK-PUBLICATION-001, PTO-MGATHER-MASK-TYPE-002, PTO-MSCATTER-BYTE-DISPLACEMENT-001, PTO-MSCATTER-DUPLICATE-ORDER-001, PTO-MSCATTER-MASK-DUPLICATE-001, PTO-MSCATTER-MASK-PREDICATE-001, PTO-MSCATTER-MASK-TYPE-002, PTO-SD-XOR-ADR-CONTRACT-001, PTO-SW-ADD-ADR-CONTRACT-001, PTO-SW-AND-ADR-CONTRACT-001, PTO-SW-OR-ADR-CONTRACT-001, PTO-SW-SMAX-ADR-CONTRACT-001, PTO-SW-SMIN-ADR-CONTRACT-001, PTO-SW-UMAX-ADR-CONTRACT-001, PTO-SW-UMIN-ADR-CONTRACT-001, PTO-SW-XOR-ADR-CONTRACT-001, PTO-SWAPB-ADR-CONTRACT-001, PTO-SWAPD-ADR-CONTRACT-001, PTO-SWAPH-ADR-CONTRACT-001, PTO-SWAPW-ADR-CONTRACT-001, PTO-TLOAD-CUBE-001, PTO-TLOAD-MEMORY-001, PTO-TMOV-CONTRACT-001, PTO-TPREFETCH-FOOTPRINT-001, PTO-TSTORE-CUBE-001, PTO-TSTORE-MEMORY-001
    SHA-256
    215b18f05d0b53120949373fce6a5ce22f7ab534fb22df24743a9b2b4beb2dec
    Open exact decision source ↗ for ADR-0020

Unit metadata

Open 4 generated metadata fields
id
PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION
surface
arch
classification
[
  "memory-model",
  "fault-precision"
]
depends_on
[
  "PTO-ARCH-STATE-TRAP-CONTEXT"
]
Open generated traceability record
{
  "classification": [
    "memory-model",
    "fault-precision"
  ],
  "documentation": "docs/arch/memory-model/fault-precision.md",
  "id": "PTO-ARCH-MEMORY-MODEL-FAULT-PRECISION",
  "mnemonic": null,
  "readiness_subjects": [
    "ADR-0006",
    "ADR-0020"
  ],
  "semantic_tests": [],
  "source": "asl/arch/memory-model/fault-precision.asl",
  "surface": "arch",
  "tests": [
    "PTO-AVS-ARCH-MEMORY-MODEL-FAULT-PRECISION-STATIC-001"
  ]
}

来源与发布信息

展开 commit、路径、hash、版本和规范所有者
发布
0.58.5 · 候选发布
Commit
7dc8b7e5b121d2b2499a2273bebff29e2cd86812
ASL SHA-256
b6118998eef77d70e5aec9fffbf56c3ea02bf6d817b713e30b9dc543d68adf47
文档 SHA-256
7c6bba5df0053a719b124b84f3ea3dddf7626ac4925acd81f225783104539c86

精确所有者