计算机体系结构 34:有界处理器集成
计算机体系结构 34:有界处理器集成
核心问题
参考执行、流水线时序和缓存延迟接在一起后,怎样证明加速结构没有改变程序的提交结果?最小可检查条件是:参考模型与流水线产生同序、同值的提交事件;延迟只改变周期;故意移除正确性机制时,差分检查必须失败。
范围与证据等级
证据等级为教学时序模型。当前恢复模型只执行五条指令,支持本案例所需的 addi、lw、add、sw 和 halt。它没有实现完整 RV32I、异常、MMU、乱序、多核或真实 DRAM。
缓存只有两行,每行 16 字节,记录 tag、命中、缺失和固定 miss 延迟。数据值仍由架构 memory 字典提供,因此模型没有验证完整的 write-back 数据层级,也没有证明脏块最终到达 DRAM。
核心案例:结果相同,时间不同
初始 memory[16]=7。程序把 16 写入 x1,从地址 16 读取 7 到 x2,计算 x3=14,再把 14 写到地址 32。参考执行和流水线提交序列均包含五个事件,最终 x2=7、x3=14、memory[32]=14。
两次访存落在不同 cache block,模型得到 2 miss、0 hit。基线包含流水线填充和一次 load-use 停顿,共 10 拍;每次 miss 增加 4 拍,组合结果为 18 拍。这里的拍数只属于这组固定规则。
负例同时关闭前递和互锁,依赖 lw 的 add 读到旧值,使 x3=0。差分器将其与参考值 14 比较并报告失败。只关闭前递但保留互锁可以得到较慢的正确实现,不属于这个负例。
模式:提交状态与时间状态分账
1 | |
流水线、缓存和更复杂的模拟器都应分别维护这两本账。周期相同不能证明值正确,提交一致也不能证明时序接近真实硬件。
验收结果
python3 examples/computer-architecture/run_batch.py 34-35 退出 0。提交事件、最终寄存器和内存一致;两次 cache miss 及 18 拍结果可由输出重算;前递与互锁同时关闭的负例被检出。验收不包含完整 write-back 数据传播。
练习
若第二次访问改到地址 20,按当前 cache 参数重新计算 hit/miss 和总拍数。
为什么“关闭前递后结果仍正确”不能证明前递没有用?
模式速查
| 检查 | 能证明 | 不能证明 |
|---|---|---|
| 提交值逐项相等 | 本程序架构结果一致 | 完整 ISA 合规 |
| cache 元数据轨迹 | 题设 hit/miss 与延迟 | write-back 数据传播 |
| 注入负例被检出 | 差分器能抓住该故障 | 覆盖所有冒险 |






