目录
前言
一、CPU 实验开发环境快速上手
创新设计流水灯:
前言
在龙芯实验箱上可完成完成静态 5 级流水简单 MIPS CPU 实现
实验任务:
1. 完成 TinyMIPS 处理器的仿真测试和 FPGA 测试。
2. 结合给出的 TinyMIPS 工程完成 CG 平台的模块评测。
实验目的:
1. 理解流水线数据通路和控制逻辑的基本设计原理。
2. 理解 CPU 流水线设计中将指令信息逐级传递这一设计关键。
3. 理解流水线 CPU 中各类相关的产生机理和解决方式。
4. 理解流水线 CPU 中各类相关的产生机理和解决方式
一、CPU 实验开发环境快速上手
在开发环境中,“cpu”目录已经放置了 TinyMIPS 处理器的完整实现,其目录结构如下所示:
(1) 【解压环境】把我们提供的实验开发环境解压到一个路径中没有中文字符的位置上,要确保你在这个位置 下能运行 Vivado。
(2) 【设计 myCPU】用你习惯使用的文本编辑器(Vivado 中集成的文本编辑功能实在是不怎么样)将处理器 核的 Verilog 代码编写好,重点注意顶层模块的模块名和接口信号必须按照规定要求定义。
(3) 【myCPU 加入】将写好的 CPU 代码拷贝到 mycpu_verify/rtl/myCPU/目录下。
(4) 【编译 Func】注意:环境中预置的功能测试程序(即 Func)已经默认完成了编译,除非你需要修改功能 测试程序的源码(不建议),否则无需再次执行此步骤。 如果你是在 Windows 下面运行 Vivado:将 func 目录整体拷贝到一个已经安装了 MIPS-GCC 交叉编译工具 的 Linux 环境中(或者将 soft/func 目录设置为虚拟机共享目录),进入 soft/func 目录,先运行 make clean, 再运行 make。将当前 soft/func/obj /整个目录的内容覆盖步骤(1)解压所在位置下的 func/obj/目录。 如果你是在 Linux 下运行 Vivado:先确保你的 Linux 系统已经安装了 MIPS-GCC 交叉编译工具。然后进入 func 目录先运行 make clean,再运行 make 就可以了。
(5) 【生成 Trace】注意:环境中已经预置了生成好的 Trace 文件,除非你在第(4)步中修改了功能测试程序, 并已经重新编译得到了结果,否则无需再次执行此步骤。但如果有时间,此处依然推荐你按以下步骤操作, 以熟悉功能测试环境的大致使用方法和运行结果的观察方法。 进入 cpu132_gettrace/run_vivado/cpu132_gettrace/目录,打开 Vivado 工程 cpu132_gettrace,进行仿真,生成 参考结果 trace_ref.txt。重点注意此时 inst_ram 和 data_ram 加载的是第(4)步编译出的结果。
(6) 【myCPU 仿真】进入 mycpu_verify/run_vivado/mycpu/目录,打开 Vivado 工程 mycpu,将你在第(2)步 新加的文件添加到工程中,进行仿真。看仿真输出 log 是否与给出的正确 log 一致。如果结果异常,则进 行调试直至通过。重点注意此时 inst_ram 和 data_ram 加载的是第(4)步编译出的结果,即 soft/func/obj/ 目录下的内容。
(7) 【myCPU 上板】回到第(6)步打开的 mycpu 这个工程中,进行综合实现,进行上板验证,观察实验箱上 数码管显示结果,判断是否正确。注意上板时,板子上的所有拨码开关都应该拨下。如果结果与要求的一 致,则 myCPU 验证成功至此结束,恭喜你;否则转到第(8)步进行问题排查。
(8) 【反思】请按照下列步骤排查,重复第(7)、(8)步直至正确。
a) 复核生成、下载的 bit 文件是否正确。
i. 如果判断生成的 bit 文件不正确,则重新生成 bit 文件。
ii. 如果判断生成的 bit 文件正确,转 b)
b) 复核仿真结果是否正确。
i. 如果判断仿真结果不正确,则回到前面步骤(6)。
ii. 如果判断仿真结果正确,转 c)。
c) 检 查 实 现 时 的 时 序 报 告 ( Vivado 界 面 左 侧 “IMPLEMENTATION”-”Open Implemented Design”-”Report Timing Summary”)。
i. 如果发现实现时时序不满足,则在 Verilog 设计里调优不满足的路径,或者降低 SoC_lite 的运行 频率,即降低 clk_pll 模块的输出端频率,做完这些改动后,回到前面步骤(7)。
ii. 如果实现时时序是满足的,转 d)。
d) 认真排查综合和实现时的 Warning
i. 如果有尚未修正的 Warning,修正它们了,然后回到前面步骤(7)。
ii. 如果没有 Warning 了,转 e)。
e) 排查 RTL 代码规范,避免多驱动、阻塞赋值乱用、模块端口乱接、时钟复位信号接错,避免把模块 调用处的输入输出接反了,查看那些从别处模仿来的“酷炫”风格的代码,查找有没有仿真时被 force 住的值导致仿真和上板不一致……如果怎么看代码都看不出问题,转 f。
f) 如果你会使用 Vivado 的逻辑分析仪进行板上在线调试,那么就去调试吧;如果调试了半天仍然无法 解决问题,转 g)
g) 反思。真的,现在除了反思还能干什么?
在开发环境中,“cpu”目录已经放置了 TinyMIPS 处理器的完整实现,其目录结构如下所示:
龙芯试验箱的流水灯实现:
对应16位灯泡,其中将对应内存地址空间对应位数赋值为0,则该灯泡亮,需要对内存地址空间不断进行赋值移位延时操作。首先为寄存器赋对应值,然后赋值给对应内存空间,然后调用延时函数,显示流水效果。
LI (t1, 0x7fff) sw t1, 0(a0) jal wait_1s
项目资源链接:
计组课设CDEhttps://download.csdn.net/download/weixin_48144018/85372005



