- 易迪拓培训,专注于微波、射频、天线设计工程师的培养
一种带Cache的嵌入式CPU的设计与实现
3.3 数据前推技术的设计
对于数据竞争的检测,通过比较连续3条指令的寄存器标号,把本条指令的rs和rt及前面2条指令的操作数结果寄存器分别进行比较,比较器的输出信号传递到EXE阶段用于选择ALU操作数的来源。
而对于LOAD指令发生的数据相关,必须等到MEM阶段完成之后才能得到有效的数据,因此发生数据相关的下一条指令,只能通过延迟一个周期才能利用数据前置技术,如果配合MIPS编译器,通过使用延迟槽技术可以解决LOAD类型的数据相关。
3.4 指令cache的实现
系统实现了一个容量为2 KB指令Cache,每个Cache行为16 B数据,这样可以利用存储器的16 B的突发式传送。采用2路组相联方式,支持通写(Write Through)模式。由同步SRAM实现。
数据Cache由控制模块、命中与缺失比较模块、访问内存模块、替换模块、输出模块组成。其中控制模块是整个Cache的主控部件,它控制存储器和cache协调工作:当执行单元有取指请求时,以指令的物理地址作为索引看是否命中,如果不命中则控制逻辑启动访存逻辑到内存中去取指,当指令取回时控制逻辑启动替换逻辑对指令Cache进行替换并将指令输出;如果命中,则将指令输出。
使用VHDL来设计和实现上述各关键模块。综合后的接口信号图如图2所示。
对关键模块和其他模块进行融合,最后得到的CPU流水线结构图如3所示。
4 系统的仿真与验证
使用VHDL实现对各功能模块的设计,并完成功能仿真后,将设计的控制单元和数据通路的各模块进行合并,形成一个完整的嵌入式RISC CPU核,进行系统级仿真。基于系统实现的指令集编写了一个简单的测试程序。
add $5.$0,$0
addi $7,$0,1
sw $7,10($5)
lw $8,10($5)
将指令码写入指令存储器的仿真文件,测试程序运行得到的仿真波形图如图4所示。
每个时钟周期为10 ns,第一个时钟周期T1从10 ns处开始,根据仿真波形可以看出,在T5周期,指令sw $7,10($5)处于EXE阶段,第二条指令addi $7,$0,1处于MEM阶段,需要进行数据前推,Forward_2的值为"10",通过对测试结果分析可以看出,数据前推成功。通过分析仿真波形图中各个输出信号的波形,根据程序的运行过程,可以判断信号波形正确,达到设计要求。
本文给出了流水线CPU的关键模块的VHDL实现,经过逻辑综合和仿真,仿真结果表明在时序上设计的嵌入式CPU很好地满足了流水线的要求。生成位流数据文件对FPGA进行器件编程,FPGA芯片可以在50 MHz的时钟频率下稳定的运行。
来源:维库开发网