LAB 5
简述
经过 lab 4 的讨论,lab 5其实蛮简单的了,我们现在实现的 19 个指令除了 load 指令,都可以在执行期得到写回的数据,于是除了 load 都可以直接向译码级前递,而 load 在执行级时,若和译码级的指令发生写后读,则暂停一拍。
还有一个问题,如果译码级和多级都发生写后读,我们应该选取最新的值,即离此条指令最近的一次写后读进行前递,即需要一个具有优先级四选一选择器,选择是三条前递路径中的还是当前寄存器堆读出的。
现在目标就很明确了,让我们动笔吧。
开冲
回写级
寄存器号 5 bit,寄存器数据 32 bit,开一条 37 bit 的数据通路即可。
assign ws_to_ds_fwd = {37{ws_valid}} & {37{ws_gr_we}} & {ws_dest,ws_final_result};
访存级
和上面类似的。
assign ms_to_ds_fwd = {37{ms_valid}} & {37{ms_gr_we}} & {ms_dest,ms_final_result};
执行级
这里就需要向前传递寄存器号 5 bit,寄存器数据 32 bit,和 1 bit 的当前指令是否是 load 指令,借此控制译码级是否阻塞,这里用了 41 bit,是为了 16 进制对齐,仿真时好读数。
assign es_to_ds_fwd = {41{es_valid}} & {

在CPU设计的LAB 5中,重点在于处理load指令的写后读问题和优化流水线。通过使用四选一选择器,确保在译码级选择最近的写后读数据。实验室任务包括在回写级、访存级、执行级和译码级实施相应设计,以解决数据前递和流水线阻塞的问题。
最低0.47元/天 解锁文章
5228





