跳转至

实验要求

Cache模块设计

本实践任务的要求如下: 设计Cache模块,利用Cache模块级验证环境对所设计的Cache进行验证,通过仿真和上板验证。 请参照压缩包中README文件介绍的方式获取本次实践任务所需的实验开发环境。具体目录结构及各部分功能简介如下所示:

 |--cache_verify/        目录,Cache模块级验证环境。
 |  |--rtl/              目录,包含Cache模块以及验证顶层的设计源码。
 |  |  |--cache_top.v    Cache模块级验证的顶层文件。
 |  |--testbench/        目录,包含功能仿真验证源码。
 |  |  |--testbench.v    仿真顶层。
 |  |--run_vivado/       Vivado工程的运行目录。
 |  |  |--constraints/   Vivado工程的设计约束。
 |  |  |--cache_prj/     Vivado工程文件所在目录。
实验环境准备就绪后,请参考下列步骤完成本实践任务:

完成Cache模块的设计和RTL编写,记为cache.v,该模块名需要命名为“cache”,除时钟输入clk和低电平有效复位输入resetn以外的输入/输出端口参见如下定义。 alt text alt text Cache模块的设计规格要求:2路组相连,每路大小4KB,LRU或伪随机替换算法,推荐硬件初始化。

在验证Cache模块的工程中运行仿真(进入仿真界面后,直接点击run all),进行功能验证与调试,直至仿真测试通过。 在验证Cache模块的工程中综合实现后生成bit流文件,进行上板验证。

仿真验证结果判断

模块级验证会从index=0的时候开始验证,针对每个index,生成四组随机的tag和data对。首先生成写请求将这四组数写进cache,然后再生成读请求读它们。如果中间没有发生错误,index递增,重新生成tag和data对进行相同的测试,直到index==ff的测试完成为止。

对于写cache请求。验证环境期望看到的结果是,写请求发出后会出现Cache miss,Cache模块会发出rd请求,验证环境返回全1值(0xFFFFFFFF)。写请求可能会引发替换操作,这时验证环境会拿wr_addr和wr_data和前述的tag/data组合做对比,如果replace的值有错,测试会中止。

写操作全部进行完之后会有读操作,验证环境会做同样的检测。当cache返回读操作的结果之后,验证环境会检测读到的结果与之前写入的结果是否相同。

在仿真时,会对每一个index生成四个cache行的先写再读的操作,所有操作都完成后会打印PASS,如下所示:

[ 2705 ns] index 00 finishd ………… ========================================================= Test end! ----PASS!!! 如果在仿真中发现错误,请进行调试,控制台会打印出错误的原因。验证环境只会检查替换时的数据错误和Cache read的数据错误。

上板验证结果判断

正确的上板运行会使开发板上数码管的左边两位显示当前测试的index值,直到index为0xff的时候测试停止。