当前位置:首页 > 专业实践最终报告(郭良鹏 樊照程) - 图文
A,指令和数据同时缺失,这时候需要解决冲突。先把指令的缺失块读入再把数据的缺失块读入。
指令和数据 同时缺失
指令缺失时间 数据缺失时间 读出缺失的指令 读出缺失的数据 读出第一个字指令
第二个字 第三个字 第四个字 缺失的整个指令块 读出第一个字数据 第二个字 第三个字 缺失的整个数据块 B,写缺失,而且两路cache块都是脏块,要把脏块写到内存上才能把写缺失的cache块读入cache,然后再在读入的cache块上进行相应的写操作。 读入写缺失 的块到缓冲 (4个字) 读信号
缺失期间整个流水线停顿
写信号
把较早访问的脏块写回到内存中
通过上面较为复杂的测试例子,和一些一般的普通情况,就可以基本确认cache可以按照基本的想法运转了。
◆各阶段分别单独模拟:
各小模块都通过软件模拟后,就可以把指令执行的各阶段整合到一起,进行软件模拟。例如:
下图是将Stage2(ID)和Stage3(EX)结合起来的测试结果之一:
下图是将Stage4(MEM)、Stage5(WB)结合起来的测试结果之一:
这一阶段同样需要设计包括各种情况的测试波形,对每种情况都加以分析(类似于各模块单独测试,不再赘述),以便保证该模块功能的完全正确。特别地,在此阶段模拟过程中,有时下层模块都是正确的,但整合在一起就出现看似“莫名其妙不可思议”的问题,这时就需要把中间的相关连线接出来,仔细分析,特别是看信号的时序配合,找出并解决问题。
◆整合成CPU进行模拟:
各个指令阶段都模拟正确后,就可以整合成完整的CPU了,这时可以把指令预先写到内存(memory)中,只需给出输入信号clk、reset即可,模拟波形的输入比较方便,但是因为小模块太多,需要把很多信号都接出来加以分析。例如一个模拟波形如下(可见模拟输出的繁杂):
此阶段可以编一些完整的测试程序(需要用机器码编写,但是相对于之前的设计输入波形工作量已降低很多),比如将老师提供的<
注意软件模拟的时候,因为无法与实际的存储器相连,我们编写了指令存储区(Instruction_Memory)、数据存储区(Data_Memory),用于模拟与内存的指令读出、数据读出与写入。当此阶段软件模拟通过后,就可以将这两个模拟内存删除,写入FPGA进行硬件测试。
3.2.2 硬件测试
此阶段采用的大多是单片机控制FPGA-CPU模式调试,特色之处在于为了方便cache的测试和演示,把数据cache的4块共16个字映射到没有用到的R16-R31寄存器,这样就可以在DebugController运行的过程中随时看到cache状态的变化),加速了调试过程。由于我们的指令系统比较完备,这种模式下就可以很方便地用汇编语言编写一些较长较复杂的程序进行测试。
◆ 标准测试程序一:
测试25*8,最后结果96H(150)放入R2中,下图说明测试正确
◆改编的测试程序2,主要测试读写和cache
;T2.txt ,memory copy , 内存读写测试 ; 本程序是在标准测试2后面加了一段程序, ; 作用是在内存中连续写16个字, ; 以便把cache中的脏块数据全部写回内存 ; (它的原理)是根据cache的特性来实现的 ; (每块4个字,两路组相连, rlu替换算法)
LLI r0,0xff LLI r1,0xff LHI r1,1
LLI r2,0x20 label1: MOV r3,r0 ADD r3,r2
共分享92篇相关文档