最近看《CPU自制入门》学者写了个简单的RISC CPU,这里写一点关于CPU流水线冒险的知识:
流水线冒险定义:由于各个阶段的依赖关系、硬件资源的竞争等原因,会出现操作无法执行的情况。造成流水线故障的原因叫做冒险,CPU流水线冒险分为构造、数据和控制冒险。
1. 构造冒险:由于硬件资源的竞争,操作无法同时执行的情况。在CPU的流水线结构中,IF阶段和MEM阶段都涉及对对内存的访问,由于对内存的访问所使用的总线是共享资源,无法同时进行操作。因此,若IF和MEM阶段同时对内存进行操作,一方需要等待另一方完成。这种指令和数据使用同一通道的构造成为冯·诺依曼架构。
解决构造冒险最直接的方法就是指令内存和数据内存分别设置,这种指令和数据用的内存分开的构造称为哈佛架构。哈弗架构解决了构造冒险,但指令的0号地址和数据的0号地址指向不同,会给软件设计带来困难。
近年来,大部分CPU仍采用冯·诺依曼架构,但CPU直接访问的缓存基本上都分为指令用和数据用两种,称为指令缓存和数据缓存。通过两种缓存的使用,解决了指令访问和数据访问之间发生的构造冒险问题。
2. 数据冒险: