题目一、程序执行周期数的采样模块设计与实现。
1、 增加一个输入I/O口
在lab4代码基础上为sc_datamem.v增加一个输入I/O口inport2,地址定为0x88。
2、 增加一个计数器模块。
设计一个具有异步清零功能的32bit计数器sys_clk_counter,对FPGA板上100MHz的输入系统时钟sys_clk_in计数,板上sys_rst_n按键可异步清零。
添加计数器到lab4的顶层模块sc_cpu_iotest.v。计数器输出连接到inport2。
3、 修改lab2.1测试程序,完成以下功能。
在测试程序执行结束时也即在语句srli x18, x18, 15和fi:j fi之间添加程序段,通过inport2读入计数器sys_clk_counter的值,存于x20,并通过outport2(地址也是0x88)输出到FPGA板七段数码管上。该值代表了程序执行到读计数器值语句所用的周期数的两倍。
同时显示寄存器x18的值。
在数码管最高2位显示自己学号的最低2位数。
注:为便于利用原有代码并同时显示以上多个值,允许只显示十进制计数值的低2位值,也即用FPGA板的数码管最低两位(第1,0位)显示其十进制计数器值的最低两位。同时在次低2位(第3,2位)显示x18寄存器的值。
4、 更新设计完成验证
通过对修改后的测试代码段仿真和上板实验对比完成程序执行周期数的验证。
通过Ripes软件对修改后的测试程序进行仿真,查看执行到自行添加的读sys_clk_counter计数器值到寄存器x20这条指令时执行的时钟周期数,并截图。
更新后的设计完成综合实现,下载到FPGA板,运行修改后的测试程序,对板子数码管显示的执行结果拍照并加以说明。
题目一报告要求:
参照lab3、4实验报告要求。应包含但不限于以下内容:
1、设计修改的模块代码说明。说明增加I/O口和计数器模块的设计思路,关键代码。
3、给出修改的测试程序,添加必要的注释说明。
4、仿真结果截图(执行到自行添加的读sys_clk_counter计数器值到x20指令时执行的时钟周期数,并截图);板上运行结果拍照。查看并分析仿真所用时钟周期数与FPGA板上实际运行所显示的计数器值是否对应。
题目二、基于自定义指令或已有的22条指令的极值搜索程序的设计仿真和板级验证。
根据自己的学号,预先在数据存储器按照以下模板存入12个32bit无符号数,编写程序找出其中的最大和最小值,在FPGA板上通过I/O口输出显示到数码管,并同时将程序执行完搜索极值所需的周期数值也显示于数码管。
数码管从左到右设定为[7:0],显示顺序如下:[7:6]:学号最低2位, [5:4]:最大值 ,[3:2]: 最小值,[1:0]:时钟计数器最低两位的十进制值。
可以仅使用之前lab1-4中实现的22条指令,也可以自己设计实现具有自定义功能的指令,或之前的lab1-lab4课程实验中未指定的其他RISC-V RV32I指令(例如用于比较大小并跳转运算的指令blt、bge、bltu、bgeu等)。
通过上板运行来验证自设计的指令和测试程序功能的正确性。
数据存储器初始值coe文件****模板:
举例:XXX同学 学号****521030910246 学号反过来数字 642019030125
dataram初始值,从0起始字地址位置开始,将以上数字每两位放一个单元,参照模板构建:
————520030910246的个性化数据*————*
memory_initialization_radix=16;
memory_initialization_vector=
000000**52 000000**10 000000**30 000000**91 000000**02 000000**46 000000**64 000000**20 000000**19 000000**03 000000**01 00000025;
————构建完成————
题目二报告要求:
参照lab3、4实验报告要求。应包含但不限于以下内容:
1、设计修改的模块代码说明。
2、极值搜索的汇编源程序及必要的程序注释说明。
3、板级执行结果拍照并说明。
描述设计思路,程序优化内容,分析所用时钟,尽可能用更少时钟完成。
大作业提交文档内容:
1、一份报告,命名规则:“学号_姓名_计算机组成大作业实验报告.pdf(docx)”。含两个题目的内容。
2、两个压缩包:两个题目的工程子目录压缩包。修改的代码应加必要注释,提高代码可读性。
3、演示视频,带解说的板级执行过程与结果演示。应该能够展示要求的所有功能;视频第一屏显示视频制作者的学号、姓名,背景建议为白色,可以考虑把相关信息写在一张A4纸上进行录制。
补充说明与提示:
1、题目二输出显示极值时选择16进制即可。以便于和数据存储器里以16进制形式存储的学号数值做比较。2、用ripes仿真题目二需要设定数据存储器的初值为个人学号个性化数据。ripes默认的数据段在0x10000000处,可以按照这一设定在ripes里仿真。以下示例汇编代码假定学号为521020910104,完成设定初值和读取第一个数据。执行后x19将得到0x00000052。如图1。数据存储器段会显示如图2。
.data
v: .4byte 0x52,0x10,0x20,0x91,0x01,0x04
.4byte 0x40,0x10,0x19,0x02,0x01,0x25
.text
lui x10, 0x10000
ori x4, x10, 0
lw x19, 0(x4)