sim-outorder 5级超标量流水线模拟器介绍

sim-outorder是一个功能齐全的乱序执行模拟器,涉及RUU、LSQ、取指队列、输入输出相关链及寄存器忙闲表等关键组件。在模拟过程中,包括取指、调度、发射执行、LSQ更新、写回和提交等步骤。此外,文章还介绍了各种统计量以评估模拟器性能。
摘要由CSDN通过智能技术生成

 sim-outorder的五级流水线

sim-outorder 是一个具有完整功能的模拟程序,在sim-outorder中使用了几乎所有的模拟资源。

具体乱序执行策略:
有五种很重要的功能单元支持sim-outorder对指令序列的乱序执行:保留站与重定序缓冲(RUU)、Load/Store队列(LSQ)、取指队列、输入输出相关链和寄存器忙闲表。它们在simplescalar中是通过五种数据结构来实现的。

RUU单元实现寄存器的同步和通讯功能,它将再定序缓冲和保留站统一起来,作为一个循环队列来管理。RUU队列记录了指令的操作类型、源操作数、数据有效性标识。其中的数据项在指令发射时分配,在提交时回收;当寄存器数据和存储器数据相关性满足时,实现乱序流出;

Load/Store队列处理存储器的相关性问题。如果store操作是猜测执行的,其值就被放入队列中。当所有之前的写入地址都已知之后,Load操作就可以访存。如果地址匹配,load操作可以在存储系统或者Load/Store队列中以前的store值的允许下进行。

取指队列是由取指段建立,在调度段译码并调度的指令队列;没有被调度的指令仍留在其中。它是用一个结构数组来实现的。

所谓输入输出相关链,即是用来记录前一条指令的输出数据(结果操作数)与后几条指令的输入数据(源操作数)的相关性的链表。

所谓寄存器忙闲表,即是用来记录当前各个寄存器被哪一条指令占用的结构数组。

Sim-outorder的具体的乱序过程如下:

A.取指段(Fetch):根据配置的各种参数的要求,从一级指令Cache里预取指令,加入到取指队列里。如果在一级cache里找不到指令,同时配置了二级cache,就试图从二级cache里再找,否则就从存储器里寻找。
1. 根据分支预测的要求、cache 容量的支持、事先配置的取指队列的大小,确定预取多少条指令。
2. 在地址有效的条件下,取出指令,并根据一级指令CACHE的延时和一级指令TLB的延时计算出其取指延时的大小。
3. 若是分支指令,则要根据事先配置的分支预测策略预测下一条指令地址;若不是,指令地址自加一。
4. 把这一条指令加入取指队列里,更新取指队列。

B.调度段(Dispatch):从取指队列调度指令。指令首先被

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值