目的与范围
用途与范围
本单元定义用于构造和检查 PTO 全存储排序候选执行的有界事件记录。它既支持显式构造事件,也支持从实际内存辅助函数进行可选捕获。
PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS下面直接显示完整的 ASL 所有者。
// PTO-UNIT: {"id":"PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS","surface":"arch","classification":["memory-model","memory-events"],"depends_on":["PTO-ARCH-MEMORY-MODEL-ADDRESS-SPACE"]}// PTO-REQ-MEMORY-TSO-001: bounded executable candidate-execution checker for// PTO total store order. The event bound is verification infrastructure, not// an architectural limit on agents or executions.
pure func MemoryEventIsRead(event: MemoryEvent) => booleanbegin return event.kind == MemoryEvent_Load || event.kind == MemoryEvent_Atomic;end;
pure func MemoryEventIsWrite(event: MemoryEvent) => booleanbegin return event.kind == MemoryEvent_InitialWrite || event.kind == MemoryEvent_Store || (event.kind == MemoryEvent_Atomic && event.write_performed);end;
pure func MemoryEventIsAccess(event: MemoryEvent) => booleanbegin return MemoryEventIsRead(event) || MemoryEventIsWrite(event);end;
pure func MemoryEventsShareLocation(left: MemoryEvent, right: MemoryEvent) => booleanbegin return left.address == right.address && left.size_bytes == right.size_bytes;end;
pure func MemoryEventClass(event: MemoryEvent) => bits(4)begin // FENCE.D mask bits are: data read, data write, device, and instruction. // The current candidate model contains data events; atomic events are both // reads and writes. Instruction and device classes remain explicit masks. case event.kind of when MemoryEvent_Load => return '0001'; when MemoryEvent_Store, MemoryEvent_InitialWrite => return '0010'; when MemoryEvent_Atomic => return '0011'; when MemoryEvent_Fence => return Zeros{4}; end;end;
func ResetMemoryExecution()begin _MemoryEventCount = 0;end;
// Production event extraction is an explicit verification mode because the// bounded event array is model-checking infrastructure, not an architectural// execution limit. Manual candidate construction remains available while// capture is disabled.func StartMemoryEventCapture(agent: MemoryAgentId)begin ResetMemoryExecution(); _CurrentMemoryAgent = agent; _MemoryEventCaptureEnabled = TRUE;end;
func SelectMemoryEventAgent(agent: MemoryAgentId)begin _CurrentMemoryAgent = agent;end;
func StopMemoryEventCapture()begin _MemoryEventCaptureEnabled = FALSE;end;
func AddMemoryEvent(event: MemoryEvent) => MemoryEventIndexbegin assert _MemoryEventCount < PTO_MODEL_MEMORY_EVENTS; let index = _MemoryEventCount as MemoryEventIndex; _MemoryEvents[[index]] = event; _MemoryEventCount = (_MemoryEventCount + 1) as integer {0..PTO_MODEL_MEMORY_EVENTS}; return index;end;
func AddInitialWriteEvent(address: Word, size_bytes: integer {1,2,4,8}, value: Word) => MemoryEventIndexbegin return AddMemoryEvent(MemoryEvent { kind = MemoryEvent_InitialWrite, agent = 0, address = address, size_bytes = size_bytes, read_value = Zeros{PTO_XLEN}, write_value = NormalizeMemoryAccessValue(value, size_bytes), write_performed = TRUE, order = MemoryOrder_Relaxed, read_from = 0, coherence_rank = 0, fence_predecessor = Zeros{4}, fence_successor = Zeros{4} });end;
func AddLoadEvent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder) => MemoryEventIndexbegin return AddMemoryEvent(MemoryEvent { kind = MemoryEvent_Load, agent = agent, address = address, size_bytes = size_bytes, read_value = NormalizeMemoryAccessValue(value, size_bytes), write_value = Zeros{PTO_XLEN}, write_performed = FALSE, order = order, read_from = 0, coherence_rank = 0, fence_predecessor = Zeros{4}, fence_successor = Zeros{4} });end;
func AddStoreEvent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder, rank: MemoryCoherenceRank) => MemoryEventIndexbegin return AddMemoryEvent(MemoryEvent { kind = MemoryEvent_Store, agent = agent, address = address, size_bytes = size_bytes, read_value = Zeros{PTO_XLEN}, write_value = NormalizeMemoryAccessValue(value, size_bytes), write_performed = TRUE, order = order, read_from = 0, coherence_rank = rank, fence_predecessor = Zeros{4}, fence_successor = Zeros{4} });end;
func AddAtomicEvent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, read_value: Word, write_value: Word, order: MemoryOrder, rank: MemoryCoherenceRank) => MemoryEventIndexbegin return AddAtomicOutcomeEvent(agent, address, size_bytes, read_value, write_value, order, rank, TRUE);end;
func AddAtomicOutcomeEvent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, read_value: Word, write_value: Word, order: MemoryOrder, rank: MemoryCoherenceRank, write_performed: boolean) => MemoryEventIndexbegin return AddMemoryEvent(MemoryEvent { kind = MemoryEvent_Atomic, agent = agent, address = address, size_bytes = size_bytes, read_value = NormalizeMemoryAccessValue(read_value, size_bytes), write_value = NormalizeMemoryAccessValue(write_value, size_bytes), write_performed = write_performed, order = order, read_from = 0, coherence_rank = rank, fence_predecessor = Zeros{4}, fence_successor = Zeros{4} });end;
func AddDataFenceEvent(agent: MemoryAgentId, predecessor: bits(4), successor: bits(4)) => MemoryEventIndexbegin return AddMemoryEvent(MemoryEvent { kind = MemoryEvent_Fence, agent = agent, address = Zeros{PTO_XLEN}, size_bytes = 1, read_value = Zeros{PTO_XLEN}, write_value = Zeros{PTO_XLEN}, write_performed = FALSE, order = MemoryOrder_AcquireRelease, read_from = 0, coherence_rank = 0, fence_predecessor = predecessor, fence_successor = successor });end;
本单元定义用于构造和检查 PTO 全存储排序候选执行的有界事件记录。它既支持显式构造事件,也支持从实际内存辅助函数进行可选捕获。
size_bytes 都相同时才共享一个位置。0001 表示读,0010 表示写,0011 表示原子操作;栅栏事件另行携带前驱与后继掩码。StartMemoryEventCapture 重置序列、选择一个 MemoryAgentId 并启用捕获。SelectMemoryEventAgent 修改后续包装函数使用的代理。StopMemoryEventCapture 禁用自动记录,但不会删除已捕获序列。AddMemoryEvent 追加一个事件并推进 _MemoryEventCount;专用辅助函数会在追加前规范化访问值。事件数组边界与 PTO_MODEL_MEMORY_EVENTS 断言属于模型检查基础设施。它们不对真实执行中的代理数量或执行长度施加架构限制。尽管当前候选模型记录数据事件,指令与设备栅栏类别仍保留显式掩码空间。
本示例块只用于帮助阅读:先应用上文规则,再到规范 ASL 所有者中确认结果。它不会增加任何架构契约。
正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。
No NDF clause is attached to this unit.
8 matching entries
PTO-AVS-ARCH-MEMORY-MODEL-MEMORY-EVENTS-STATIC-001tests/asl/arch/memory-model/memory-events/arch-static-memory-events-contract-001.asl8ee092e2d47ed671d8ef54d6a70ffac9676f058c85fe86b11f0b2ce46a89996dPTO-EVIDENCE-RELEASE-TRACEABILITYPTO-EVIDENCE-RELEASE-TRACEABILITYspec/evidence/release-traceability-readiness.jsonc7327021d39dc67ac5564bc55073b3870a397d79ac8d9648284d56e33bc14a3ePTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREPTO-EVIDENCE-INSTRUCTION-CONTRACT-CLOSUREspec/evidence/instruction-contract-closure.json3ef2bb62421c79dff8fa77a1c7983923b523244b8090812883ef81286ca8106aPTO-EVIDENCE-ARCHITECTURE-READINESSPTO-EVIDENCE-ARCHITECTURE-READINESSspec/evidence/architecture-readiness.json4b0b85199101251bea744e0f3591cc31906909dc80d5ab651c417a936036a004PTO-EVIDENCE-RELEASE-GATE-READINESSPTO-EVIDENCE-RELEASE-GATE-READINESSspec/evidence/release-gate-readiness.jsona0f4d2b6920c08981ea55fd8ef820708a40d4feb5402c5150e8e9ab532d84ce0PTO-EVIDENCE-RELEASE-MANIFESTPTO-EVIDENCE-RELEASE-MANIFESTspec/release-manifest.json1a64c109ed7a90351c41e2a418b3c0ebaf8ad975838986d2101385186b85c0d8Loading ADR-0006…
ADR-0006docs/status/decisions/0006-pto-total-store-order.mdb80d8782e4587d4023edf02df9d2ba4d3cb2b2999fdc8991e49a2af4f9817735Loading ADR-0020…
ADR-0020docs/status/decisions/0020-production-memory-events-and-atomic-corners.md215b18f05d0b53120949373fce6a5ce22f7ab534fb22df24743a9b2b4beb2dec{
"classification": [
"memory-model",
"memory-events"
],
"documentation": "docs/arch/memory-model/memory-events.md",
"id": "PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS",
"mnemonic": null,
"readiness_subjects": [
"ADR-0006",
"ADR-0020"
],
"semantic_tests": [],
"source": "asl/arch/memory-model/memory-events.asl",
"surface": "arch",
"tests": [
"PTO-AVS-ARCH-MEMORY-MODEL-MEMORY-EVENTS-STATIC-001"
]
}0.58.5 · 候选发布7dc8b7e5b121d2b2499a2273bebff29e2cd8681232b0cee879199679fb9f94e3b95a11e27c1a29d1e9677f45cdef83e2d43f895f49bfe2a3c774d09c537c3d2c591980e23467f4299b0563173fc08e5b6a778537asl/arch/memory-model/memory-events.asl