RISC-V MCU中文社区

【分享】 利用vcs仿真NICE协处理器demo

发表于 全国大学生集成电路创新创业大赛 2023-05-27 17:35:38
0
1943
1

团队编号:CICC2136
团队名称:芯如止水

NICE协处理器demo实现功能介绍:

假设有一个3*3的矩阵,需要计算其逐行的累加和以及逐列的累加和,如果采用常规c语言程序进行计算,需要采用循环的方式

  1. // normal test case without NICE accelerator.
  2. int normal_case(unsigned int array[ROW_LEN][COL_LEN])
  3. {
  4. volatile unsigned char i=0, j=0;
  5. volatile unsigned int col_sum[COL_LEN]={0};
  6. volatile unsigned int row_sum[ROW_LEN]={0};
  7. volatile unsigned int tmp=0;
  8. for (i = 0; i < ROW_LEN; i++)
  9. {
  10. tmp = 0;
  11. for (j = 0; j < COL_LEN; j++)
  12. {
  13. col_sum[j] += array[i][j];
  14. tmp += array[i][j];
  15. }
  16. row_sum[i] = tmp;
  17. }
  18. return 0;
  19. }

转化成汇编代码需要较多指令,因此可以使用协处理器加速这一过程

NICE协处理器demo自定义指令:

NICEdemo中定义了clw,csw,cacc三条指令

clw: 从内存中加载数据至行数据缓存
csw:从行数据缓存中存储数据至内存
cacc:用于计算行累加值,并通过结果寄存器返回累加值

自定义指令需要通过伪指令.insn实现,使用格式如下:

  1. .insn r opcode func3 func5 rd rs1 rs2

因此,NICEdemo自定义指令的表示方式如下:

  1. .insn r 0x7b 2,1,x0,%1,x0
  2. .insn r 0x7b 2,2,x0,%1,x0
  3. .insn r 0x7b 6,6,%0,%1,x0

相应的软件驱动可以表示为:

  1. // custom lbuf
  2. __STATIC_FORCEINLINE void custom_lbuf(int addr)
  3. {
  4. int zero = 0;
  5. asm volatile (
  6. ".insn r 0x7b, 2, 1, x0, %1, x0"
  7. :"=r"(zero)
  8. :"r"(addr)
  9. );
  10. }
  11. // custom sbuf
  12. __STATIC_FORCEINLINE void custom_sbuf(int addr)
  13. {
  14. int zero = 0;
  15. asm volatile (
  16. ".insn r 0x7b, 2, 2, x0, %1, x0"
  17. :"=r"(zero)
  18. :"r"(addr)
  19. );
  20. }
  21. // custom rowsum
  22. __STATIC_FORCEINLINE int custom_rowsum(int addr)
  23. {
  24. int rowsum;
  25. asm volatile (
  26. ".insn r 0x7b, 6, 6, %0, %1, x0"
  27. :"=r"(rowsum)
  28. :"r"(addr)
  29. );
  30. return rowsum;
  31. }

仿真NICEdemo

  • 在路径”/nuclei-board-labs-master/e203_hbirdv2/common/demo_nice”下可以找到demo_nice的相关代码
  • 编译demo_nice,得到demo_nice.verilog文件
  • 在e203_hbirdv2-master/vsim/Makefile中,修改TESTNAME和TESTCASE,修改为demo_nice.verilog文件对应的路径
  • 在vsim中使用make run_test命令,可以运行demo_nice的仿真
    最终运行结果如下:
喜欢1
用户评论

积分
问答
粉丝
关注
  • RV-STAR 开发板
  • RISC-V处理器设计系列课程
  • 培养RISC-V大学土壤 共建RISC-V教育生态
RV-STAR 开发板