程序代写代做代考 cache PowerPoint 演示文稿

PowerPoint 演示文稿

硬件综合设计讲解(2)
17计科袁福焱
2020/12/27
yuanfuya@qq.com

cache
axi接口支持
sram接口回顾
类sram接口说明
axi接口说明
基本要求
Cache扩展
Nexys4DDR上板

名称 宽度 方向 描述
clk 1 input 时钟
en 1 master->slave 使能信号,片选作用
addr [31:0] master->slave 地址,读写均使用同一地址线
wen [3:0] master->slave 字节写使能,指示写字节的位置
wdata [31:0] master->slave 写数据
rdata [31:0] slave->master 读数据

SRAM接口
sh指令
wen = 4‘b1100
wdata = 0x1234_5678

Memory -> 0x12xx_xxxx
(x表示保持不变)

注:block memory generator的Navie接口中的addra信号为字寻址,而不是字节寻址。

sram读指令波形图
Tips:
由于有一个时钟延迟,为了在F阶段取出pcF对应的指令。因此对inst_ram的时钟进行了取反。

sram写/读数据波形图

无握手信号

读写有一个时钟延迟(latency)

读写共用地址通道,因此无法同时读写
sram接口特点总结

CPU实现axi接口的方式
2. 使用龙芯提供的类sram-axi转接桥

图: 龙芯杯SoC_axi_lite结构(用于功能测试和性能测试)
1. 将CPU封装成类sram接口
方式一:
方式二:
1. 取指、访存直接使用axi信号(如cache的输出)
2. 将取指和访存的两个axi接口合并成一个axi接口(可使用ip)

方式三:

吕学长提供
参考:

硬件综合设计讲解2.pptx
提供的代码:axi_interface_lv.zip

名称 宽度 方向 描述
clk 1 input 时钟
req 1 master->slave 请求信号(读和写)
wr 1 master->slave 该次请求是写
size [1:0] master->slave 该次请求传输的字节数,
0: 1B, 1: 2B, 2: 4B
addr [31:0] master->slave 地址
wdata [31:0] master->slave 写数据
addr_ok 1 slave->master 该次请求地址传输ok
data_ok 1 slave->master 该次请求数据传输ok
rdata [31:0] slave->master 读数据

类sram接口
增加握手信号addr_ok, data_ok
新增传输字节数信号——size
注:原本sram信号每次只能读取一个字。
当我们需要读取一个字节时,我们通过一个模块选出需要的字节,而丢弃其它字节。这对于读取内存是没问题的,但当读取串口等外设是是错误的。

size信号说明
注:类 sram 接口只支持读写 1,2,4 个字节,且要求地址对齐。如读写 2 字节时地址需要两字节对齐,即地址低两位只能为 2’b00 和 2’b10,读写 4 字节时则要求地址字对齐,地址低两位为 2’b00。

读指令波形图

地址为双向握手:req & addr_ok时握手成功
数据为单向握手:data_ok
无法同时读写
类sram接口特点总结
注:addr_ok固定为1时,变为单向。表示slave随时都可以接收地址。

axi接口
具体参考:AMBA总线协议/AMBAaxi.pdf
AXI(Advanced eXtensible Interface) 总线协议是 AMBA3.0 规范中引入的一个新的高性能协议,目标是满足超高性能和复杂的片上系统的设计需求。

AXI 总线的核心特点有:
地址/控制和数据总线分离
支持非对齐数据传输
突发传输中只需要发送首地址
独立的读写通道
读写事务乱序完成
容易添加流水线寄存器来优化时序

龙芯的转接桥说明

仲裁逻辑:当同时访问指令和数据时,优先处理数据访问。
类sram接口无法连续发送请求
(必须等到一次请求data_ok时,addr_ok才会变为1,接收下一次请求)
不支持burst(arlen固定为1)

将CPU封装成类sram接口

实现要点

取指和访存都需要添加暂停信号
不要重复发送请求(流水线暂停期间,en一直为1,可能一次请求刚结束时,CPU由于乘除法等其他原因仍处于暂停,因此重复发送请求)

取指和访存时暂停哪些阶段?
取指:暂停F, D阶段
访存:暂停全部阶段(F, D, E, M, W)
取指和访存都暂停所有阶段
方式一:
方式二:
方式一和方式二效率基本一致:暂停F, D或者暂停所有阶段,都没有新的指令进入流水线,吞吐量一致。
方式一会面临需要取消已经产生的访存请求的情况,处理比较复杂
(如异常时需要处理已经产生的取指请求;如果实现了分支预测,也会遇到类似的情况)

d_stall信号:由于sram接口并不包含握手信号,因此需要引入暂停信号,让cpu等待数据返回。

longest_stall信号:
由于有多种原因导致cpu暂停(取指,访存,乘除法)。如果在除法暂停期间,访存已经完成,但cpu还在暂停。此时由于data_sram_en仍为1,因此就可能导致重复第二次访存。因此我们还需要一个信号,能够表示cpu流水线暂停的整个时期。根据该信号,我们能够保证一次流水线暂停只取一次指令,只进行一次内存访问。
示例实现

输入输出波形图

cache
axi接口支持
sram接口回顾
类sram接口说明
axi接口说明
基本要求
cache扩展
Nexys4DDR上板

硬综基本要求

体系结构cache实验
对于选了体系结构的同学:

对于没选体系结构的同学:
参考体系结构实验指导书(硬综设计资料_full/doc/其它/Cache实验指导书.pdf)
内包含示例cache的完整实现过程。

体系结构实验为了让Cache和CPU核解耦合,因此输入为类sram接口。
导致:即使cache命中,CPU核也需要两个周期才能获得数据。性能分很低

改动:cache输入改为sram接口。

Cache同时起到了sram到类sram转换桥的作用

Cache扩展

写回:大大减少写内存次数
组相联:降低cache冲突缺失率
块多字:利用访存的空间局部性。尤其是取指(类似一次取指,8次命中的体验)。
需要实现axi burst传输

cache块多字
Cache需实现为axi接口输出,利用axi的burst传输(一次传输多个数据)
需要实现一个axi 2×1模块

cache
axi接口支持
sram接口回顾
类sram接口说明
axi接口说明
基本要求
Cache扩展
Nexys4DDR上板

硬件综合设计资料获取
下载硬综设计资料_full_v*.zip
#克隆
git clone https://gitee.com/yuanfuyan/CO-lab-material-CQU
#拉取最新版本
git pull

注:
1. 由于功能测试代码过长,对soft进行了修改,因此不要和原本的混用。
2. 功能测试只移植了sram接口的soc,axi接口soc没有移植(bram资源不足),因此目前调试axi接口时还是使用原本的func_test_v0.03\soc_axi_func
移植日志可见对应目录下的log.txt
关于移植
原本的测试环境,只用于仿真
n4ddr目录下的测试环境,既可以仿真也可以上板(以后会取代原本的测试环境)

功能测试上板
具体说明见:test/func_test_v0.03/功能测试说明_v0.01.pdf

成功
数码管显示两个59(0x59=89)
双色(3色)LED为绿色
失败
数码管卡在错误的测试点
swtich[7:0]用于调节数码管数目增加快慢。默认全0,功能测试会立刻运行完。
(soc_sram中会调节两个测试点间wait_1s的时间,soc_axi中还会调节axi_ram的随机延迟)

性能测试上板

switch[3:0]控制运行哪个测试程序(一共10个)
switch[7]控制显示两种时钟计数:
7段数码管显示计数数值,双色(3色)LED灯为绿
失败则
数码管显示全0(有时候是运行时间需要几秒)
如果测试点通过
拨上:显示soc中100MHz的计数器的计数
拨下:显示CP0中cp0_count寄存器的计数
具体描述见:test/perf_test_v0.01/性能测试说明_v0.01.pdf

调节CPU时钟频率
修改pll中cpu_clk,默认50MHz

生成bit流(或者run implementation),WNS为正。否则回到上一步降低CPU频率

性能测试得分

填写score.xls
switch[7]拨上

score

系列 1 axi 指令cache 写透d cache 写回d cache 块8字 4路 70M 100M 1 5 10 21.978000000000002 26.268000000000001 29.495999999999999 40.707000000000001 56.036000000000001

Q & A

/docProps/thumbnail.jpeg