目的与范围
用途与范围
本单元把实际内存操作连接到有界候选执行事件模型。捕获启用时,它记录读取、存储、原子操作和数据栅栏,并维护逐位置的一致性与读自信息。
PTO-ARCH-MEMORY-MODEL-ATOMICITY下面直接显示完整的 ASL 所有者。
// PTO-UNIT: {"id":"PTO-ARCH-MEMORY-MODEL-ATOMICITY","surface":"arch","classification":["memory-model","atomicity"],"depends_on":["PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS"]}readonly func NextMemoryCoherenceRank(address: Word, size_bytes: integer {1,2,4,8}) => MemoryCoherenceRankbegin var next_rank: integer {1..PTO_MODEL_MEMORY_EVENTS} = 1; if _MemoryEventCount > 0 then for event_number = 0 to _MemoryEventCount - 1 do let event = _MemoryEvents[[event_number as MemoryEventIndex]]; if MemoryEventIsWrite(event) && event.address == address && event.size_bytes == size_bytes && event.coherence_rank >= next_rank then next_rank = (event.coherence_rank + 1) as integer {1..PTO_MODEL_MEMORY_EVENTS}; end; end; end; assert next_rank < PTO_MODEL_MEMORY_EVENTS; return next_rank as MemoryCoherenceRank;end;
func ResolveCapturedReadFrom(read: MemoryEventIndex)begin let read_event = _MemoryEvents[[read]]; var found = FALSE; var source: MemoryEventIndex = 0; if read > 0 then for candidate_number = 0 to read - 1 do let candidate_index = candidate_number as MemoryEventIndex; let candidate = _MemoryEvents[[candidate_index]]; if MemoryEventIsWrite(candidate) && MemoryEventsShareLocation(read_event, candidate) && candidate.write_value == read_event.read_value then found = TRUE; source = candidate_index; end; end; end; if found then SetMemoryReadFrom(read, source); end;end;
func RecordLoadEvent(address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder)begin RecordLoadEventForAgent(_CurrentMemoryAgent, address, size_bytes, value, order);end;
func RecordLoadEventForAgent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder)begin if _MemoryEventCaptureEnabled then let event = AddLoadEvent(agent, address, size_bytes, value, order); ResolveCapturedReadFrom(event); end;end;
func RecordStoreEvent(address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder)begin RecordStoreEventForAgent(_CurrentMemoryAgent, address, size_bytes, value, order);end;
func RecordStoreEventForAgent(agent: MemoryAgentId, address: Word, size_bytes: integer {1,2,4,8}, value: Word, order: MemoryOrder)begin if _MemoryEventCaptureEnabled then - = AddStoreEvent(agent, address, size_bytes, value, order, NextMemoryCoherenceRank(address, size_bytes)); end;end;
func RecordAtomicEvent(address: Word, size_bytes: integer {1,2,4,8}, read_value: Word, write_value: Word, order: MemoryOrder, write_performed: boolean)begin if _MemoryEventCaptureEnabled then let rank = if write_performed then NextMemoryCoherenceRank(address, size_bytes) else 0; let event = AddAtomicOutcomeEvent(_CurrentMemoryAgent, address, size_bytes, read_value, write_value, order, rank as MemoryCoherenceRank, write_performed); ResolveCapturedReadFrom(event); end;end;
func RecordDataFenceEvent(predecessor: bits(4), successor: bits(4))begin if _MemoryEventCaptureEnabled then - = AddDataFenceEvent(_CurrentMemoryAgent, predecessor, successor); end;end;
func SetMemoryReadFrom(read: MemoryEventIndex, source: MemoryEventIndex)begin assert read < _MemoryEventCount && source < _MemoryEventCount; _MemoryEvents[[read]].read_from = source;end;
本单元把实际内存操作连接到有界候选执行事件模型。捕获启用时,它记录读取、存储、原子操作和数据栅栏,并维护逐位置的一致性与读自信息。
NextMemoryCoherenceRank 扫描地址和 size_bytes 相同的较早写事件,为新写事件分配下一个一致性序号。ResolveCapturedReadFrom 查找同一位置上较早且 write_value 等于已捕获 read_value 的写事件。SetMemoryReadFrom 检查两个事件索引都已存在后,写入所选来源索引。write_performed 为真时才获得一致性序号;它仍会记录读取结果并尝试解析读自关系。_CurrentMemoryAgent;显式形式接收 MemoryAgentId。当 _MemoryEventCaptureEnabled 为假时,所有记录辅助函数都没有效果。捕获的来源依据较早事件、相同位置和相同值选择;完整的候选执行合法性判断仍由内存排序所有者负责。
本示例块只用于帮助阅读:先应用上文规则,再到规范 ASL 所有者中确认结果。它不会增加任何架构契约。
PTO-ARCH-MEMORY-MODEL-MEMORY-EVENTS 定义事件记录和捕获存储。正文来自 owning ASL。拖拽或按钮只临时改变当前页面显示顺序。
No NDF clause is attached to this unit.
8 matching entries
PTO-AVS-ARCH-MEMORY-MODEL-ATOMICITY-STATIC-001tests/asl/arch/memory-model/atomicity/arch-static-atomicity-contract-001.aslea0c6316331d9350df7677b683ca0fbb1534c6e4614b67ad45c4fcb36685ec49PTO-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",
"atomicity"
],
"documentation": "docs/arch/memory-model/atomicity.md",
"id": "PTO-ARCH-MEMORY-MODEL-ATOMICITY",
"mnemonic": null,
"readiness_subjects": [
"ADR-0006",
"ADR-0020"
],
"semantic_tests": [],
"source": "asl/arch/memory-model/atomicity.asl",
"surface": "arch",
"tests": [
"PTO-AVS-ARCH-MEMORY-MODEL-ATOMICITY-STATIC-001"
]
}0.58.5 · 候选发布7dc8b7e5b121d2b2499a2273bebff29e2cd8681262f7e2c43e82c804a98665bf2410b8309d581d1ff401a7adcdb9b993e04ec5cbb86ae6353f3bc7d0be6af50c1a107298b67e0067b13ea39a285c77c008a8e4cfasl/arch/memory-model/atomicity.asl