硬件综合设计讲解2
硬件综合设计讲解2
重庆大学计算机学院
2019.12.22
吕昱峰
致谢
本课程设计中测试、调试工具及程序、Cache设计部分采用多种外部资源,特此对以下组织和个人进行感谢:
中国科学院大学
龙芯中科
《计算机原理与设计:Verilog HDL版》作者李亚民老师
课程讲解内容若有侵权请与重庆大学计算机学院计算机组成原理课程组联系。联系方式:lvyufeng@cqu.edu.cn
目录
功能测试和性能测试
SRAM SOC连接(现场添加指令必需)
Trace调试
AXI总线连接
直写Cache
N4DDR上板
关于现场加指令及评分
功能测试
89个功能点
普通指令
异常
延迟槽
延迟槽异常
AXI 随机延迟
随即种子,上板测试
出错仿真查找
性能测试
10个小程序
只有一块AXI RAM
AXI RAM固定延迟
使用实际运行时间
记录主频(时序不能违约,Implemenation里 WNS不能为负值)
SRAM SOC连接
为何要连接SOC
SOC: System on chip
连接总线控制外设
上板
运行程序,成为真正的片上系统
SRAM接口
简单
信号少、无握手。一次传输一个数据
名称 宽度 方向 描述
clk 1 —>mster/slave 时钟
en 1 —>slave 使能信号,片选作用
addr 32 —slave 地址,读写均使用同一地址线
wen 4 —>slave 字节写使能,指示写字节的位置
din 32 —>slave 写数据
dout 32 slave—> 读数据
Inst_ram
名称 宽度 方向 信号
inst_sram_en 1 output 暂时可恒为1
inst_sram_addr 32 output PC
inst_sram_wen 4 output 指令存储器只读不写,恒为4’b0000
inst_sram_wdata 32 output 写数据
inst_sram_rdata 32 input 读数据
Data_ram
名称 宽度 方向 信号
data_sram_en 1 output 只有在访存指令的时候才能置1
data_sram_addr 32 output ALU计算得到的地址
data_sram_wen 4 output 按照访存控制的字节信号
data_sram_wdata 32 output 写数据
data_sram_rdata 32 input 读数据
写SRAM数据
写字节使能,支持任意的写字节组合
写1字节:4’b0001, 4’b0010, 4’b0100, 4’b1000
写2字节:4’b0011, 4’b0101, 4’b1001,
4’b0110, 4’b1010, 4’b1100
写3字节:4’b0111, 4’b1011, 4’b1101, 4’b1110
写4字节:4’b1111
地址是一个数据宽度(4bytes)寻址
数据宽度32
数据深度232
容量:32 x 232 bits = 4 x 4GBytes
连接后可能会出现的问题
指令读不出/地址一直不变:大概率是reset的问题
通过一个测试点后出错:地址映射未改,无法从confreg读值
仿真卡住不动:出现环路,综合一次,看报错。
注意:
1. 只能改自己的CPU核,外围文件一概不许动。信号也不可以取反
2. debug信号必须连接。PC每级传递最好使用单独的旁路。
3. 不用怀疑外围文件,这里有错一定是你设计有问题。
硬件综合设计的实现路线问题
52条->57条->SRAM SOC->AXI SOC->Cache
注意:并非一定要按照此流程,但最后检查请拿出能够正确完成测试的最高版本。如:AXI SOC不能通过,则拿出SRAM SOC版本
可供选择的几条路线:
52条->连接trace(sram soc)->57条->axi->cache
52条->连接trace(sram soc)->axi->cache (如果异常处理确实不会写,起码保证能够现场添加指令)
52条->连接trace(sram soc)->57条->axi+cache
宁可拿自己写的52条,也别拿别人写的AXI。否则,保证死的很难看。
读数据时序图
当拍传地址,下拍回数据
写数据时序图
地址和数据 同拍给
Trace调试
项目要放到一个路径中没有中文字符的位置上
CPU 代码拷贝到 soc_sram_func/rtl/myCPU/目录下
注意:引入代码时不要选copy into project!新建文件也要放在rtl/myCPU
所有测试的coe,对比golden_trace已生成好,无需再生成。
看文档!!!
16
Trace 采样的信号
debug_wb_pc: CPU写回级(wb)的PC
debug_wb_rf_wen: wb级的写回使能
debug_wb_rf_wnum: wb级的写回的目的寄存器号
debug_wb_rf_wdata: wb级的写回的目的操作数
使用Trace的注意事项
对比文件路径问题
可以直接使用绝对路径
若使用“../../../../../../golden_trace_.txt”需要TCL Console处进入目录,目录需要与项目文件(xpr)同级
进入方法与命令行相同: cd /xxx/xxx/xxx/xxx
若对比采样信号一直为X,一定是路径问题
调试技巧
共有三处对比:pc、num、data
PC不对应,找第一处不对应的位置,而不是打印的位置
PC对,num、data不对:
先看取指是否正确。test.S找到正确指令,对比inst_ram输出
取指正确,看指令有无错位(stall引起)、清空(flush引起)
PC、 num对,data不对
普通指令,看ALU和前推
访存指令,lw不对,找同一个address的最后一个sw指令
其他调试技巧
看《 A09_CPU仿真调试说明》
有Z,一定没连线
有X,要么没初始化;要么多驱动
不管有没有错。Z、X都不该有;如果有错,先看Z、X,大概率是错误原因。
AXI总线连接
龙芯提供的桥
自己写的桥
AXI总线优势
能够直接使用Vivado提供的控制IP(如DRAM控制器)
增加乱序的特性,比如,乱序访问,乱序返回
读写操作完全分开,分为5个通道
读操作,分为:地址传输和数据传输
写操作,分为:地址传输、数据传输和响应传输
每个通道有自己的握手信号
支持burst传输
龙芯提供的桥
类SRAM-to-AXI
需要自行将SRAM转为类SRAM接口(加入握手机制)
桥内部做仲裁
无错(少错)
page 24
自定义类SRAM接口
SRAM接口的不足
无握手信号:如果数据需要多拍才能回来,则无法适用
读数据无字节使能,一次必须读出整个宽度的数据
新增握手和字节数选择
使用龙芯提供的桥注意事项
产生访存请求(fetch、mem阶段)时一定会暂停流水线
取指暂停fetch、decode
Load/store全流水线暂停
Flush时需要处理已经产生的访存请求,方案有二
直接中断访问,下一次产生新的访问
不中断访问,返回的数据忽略掉
由于仲裁写在桥内部,推荐使用第二种方案,不需要改动桥
握手需要状态机,否则需要缓存
Fetch和mem同时产生,先返回指令,再返回数据。
自己写的桥
不需要改动sram接口
外部仲裁
单端口to单端口
仲裁简洁,明确取指优先
Cache
Cache选择:
直接映射,替换策略简单
块大小1word,不使用burst传输
直写法,Cache、RAM同步
最简单,但也最可行
Cache结构
0
1
2
3
…
…
1022
1023
Index
Tag
Data
Valid
Address (32 bits)
=
To CPU
Hit
10
22
Index
Tag
N4上板
检查前发布上板测试包,目录结构与当前测试包一致,项目工程有所变化。
由于N4板载资源限制,需要分别将切分的指令生成bit文件
关于现场加指令及评分
一切按照评分标准进行
现场添加指令最低要求:连接SRAM版SOC,并通过52条指令
现场添加指令时间:根据各班老师安排,最早于17周周末
每个教学班同时开始,指令相同;不同教学班指令不同。
未连接SRAM的,仍需要添加指令,否则该部分0分。
现场添加指令需通过仿真、上板。完全通过直接记为满分(10分)。
关于现场答辩
分组进行,每人均需回答1-3个问题。
问题类型:实现细节、调试细节、自己遇到的问题及解决方案。
注意:由于已经知道部分学生在找同学要代码,因此调试细节和自己遇到的问题居多,包括57条指令及连接SOC的所有范围。
代码风格:发现与已知设计代码(包括但不限于自己动手写CPU代码、龙芯杯竞赛开源代码、CQUCA开源代码)极度相像,且无法回答问题的,进行标记,根据报告判断是否抄袭。
重要的事情说三遍:抄袭零分!!抄袭零分!!抄袭零分!!
最后
付出和回报是呈正比的
认真做的人,我们一定把分往高了打
想要划水、要一份过来加个指令就拿优的,不可能!
量力而行,分数也不会让你失望
抄袭者,不论何人,严惩不贷
标准公开,别拿保研出国说事,如果觉得分低,请对照标准拿证明,其他缘由,一概不管。
该挂就挂,毫不手软;该优则优,亦不吝啬。
Addr(A)addrdoutenData(A)clk…
Addr(A)addrdoutenData(A)clk…wen
/docProps/thumbnail.jpeg