实验要求
数据排序2
要求配置如下:
-
原始数据:1024个*32位的数据
-
以1024长,宽度为32bits( =4字节)的BRAM来存储
hint : 在BRAM的AXI接口中,将s_axi_arsize接口接3'b010,就可以一次读4个字节(32位)
-
存储数据的BRAM的要求
-
法一:使用遵守AXI总线协议的BRAM(IP核中选择)
-
法二:使用普通的BRAM,但是每次连续请求前面需要自行等待数个时钟
hint : 即,将普通的BRAM再人为包装一层,要求达到第一次访问需要停止几个时钟的效果
-
Cache基础配置
-
直接映射(无替换策略)
-
8个块
-
每个块有128bits,即可以存储4个有效数据
-
不限制写回方式
hint : 提示一些具体的细节
数据BRAM的地址空间是1024 = $$ 2^{10} $$
如果考虑字节地址,最低位还有两位0
输入给AXI接口BRAM的地址是字节地址,需要在字地址后补两位0
以下考虑12位的字节地址,其中前10位是字地址
11 10 9 8 7 6 5 4 3 2 1 0 1 0 低两位是一起拼凑出一个完整数据的地址,
而我们在Cache中的最小粒度是一个数据,
(BRAM的粒度是字,但AXI接口可以指定到字节的写)实际上Cache对低两位失明例如:数据0,数据1是前两个数据,实际上是:
000,001,010,011构成数据0,
100,101,110,111构成数据13 2 这两位对应Cache的一个块中的4个数据 一般用名字offset表示 6 5 4 这三位对应Cache的8个块的选择 用于查询某条地址对应的数据的所属块
以及从主存取出的数据放在哪个块一般用名字index表示 11 10 9 8 7 这5位为Tag,用于校验对应的块是否是想要找的块。例如:
块0存储的是11111_000的4个数据
但是现在排序请求11110_000_00,发现Tag域
11111
和11110
,不同,所以需要重新从主存请求数据 -
Valid域和Dirty域,两者都各需要一个bit来表示。(本次实验建议使用写直达策略,当写入cache时,Cache立刻写BRAM,所以可以不做Dirty域,同时AXI接口BRAM的s_axi_awlen设为0,每次写请求只写一拍一字)
设计提示
本质上就是修改了读和写的逻辑
助教的提示,如何快速迭代,完成任务
- 修改排序器的状态机,使得在后期能够确保一定是Cache的问题
- 需要仿真一个Cache
- why: 仿真的Cache与排序器的交互信号与真实的Cache一样
- How:
- 排序器在读状态并不知道Cache几个时钟内能够给出地址对应的数据——使用valid信号交互。
- 真实的Cache的行为见状态机的实现
- 仿真的Cache,实现方法是在
普通的BRAM
基础上,加上一层模块,使得每次访问会有延迟(固定的就行了),但是排序器需要认为是不确定的周期返回数据(模拟致盲
)
- 这样,我们获得了一个功能正确的排序器2.0
- 实现Cache,不接上排序器
- 测试:自行编写仿真文件,给出一些读写的请求,测试读写的正确性
- 重点还是在状态机
- 将Cache替换上面的模拟Cache,联调,对齐时序
- 至此结束,完成设计
hint: 3个重点
- 状态机思想:
- 排序器有无状态机,在重新构造新的逻辑上面的好处。抽象思想与分层思想
- Cache的状态机,本质上是辅助测试的
- Cache的模块测试:
- 需要自己思考到底哪里会容易出现问题,针对性的构建测试样例进行测试
- 全方面的测试
- 两个模块的对齐。时序是关键,反复强调时序
合理的拆分任务,分阶段的实现,综合性的联调,在工程实现总非常常见。拆分的合理性和不同模块的merge往往是关键。
检查要求
- 同Lab4 一样,检查排序的正确性,不再检查时钟数目
- 对Cache的理解和设计,建议准备好状态机和设计模块图接受检查
- AXI总线交互的理解
- 使用SDU查看BRAM的内容,能查看cache的存储器内容会更好
对于使用AXI接口的BRAM,一种可行的实现方式:
可以使用一个拨动开关(如sw0)来切换模式,1则SDU读模式,0则排序模块读模式。在SDU读模式下,设置BRAM的awvalid和wvalid为0,不可写入,arvalid和rready为1,常态读,arlen为0,每次读一拍,并将araddr设置为{20'h0, sdu_addr[9:0], 2'h0},即BRAM的读地址是SDU根据PC串口传输获取到的地址(sdu_dm模块的addr输出信号)。这样,在SDU读模式下,AXI接口的BRAM的行为表现和一般接口的BRAM基本一致。在排序模式下araddr为cache提供的地址,同实验介绍中给出的样例。
查看cache的存储器的方法类似,通过合理接线,允许拨动开关选择sdu查看cache存储器内容。