1. 蜂鸟 E203 核指令协同单元扩展(NICE)机制介绍

RISC-V 架构的显著特性之一就是可扩展性。其提供了预留的指令编码空间以及预定义的指令,这里对此部分内容不做过多介绍,详情可以查询 RISC-V Manual 。

RISC-V 在32位的指令中包括了4组预定义指令类型,每种预定义指令都有对应的操作码。”custom-0”对应0001011,”custom-1”对应0101011,”custom-2”对应1011011,”custom-3”对应1111011。

蜂鸟 E203 允许用户将预定义指令扩展成自定义的协处理器指令。32位 NICE 指令的编码格式如图所示,它属于 RISC-V 的 R 类指令。

Untitled

NICE 协处理器的接口信号:

module e203_subsys_nice_core (
    // System	
    input                         nice_clk             ,
    input                         nice_rst_n	         ,
    output                        nice_active	         ,
    output                        nice_mem_holdup	     ,
//  output                        nice_rsp_err_irq	   ,
    // Control cmd_req
    input                         nice_req_valid       ,
    output                        nice_req_ready       ,
    input  [`E203_XLEN-1:0]       nice_req_inst        ,
    input  [`E203_XLEN-1:0]       nice_req_rs1         ,
    input  [`E203_XLEN-1:0]       nice_req_rs2         ,
    // Control cmd_rsp	
    output                        nice_rsp_valid       ,
    input                         nice_rsp_ready       ,
    output [`E203_XLEN-1:0]       nice_rsp_rdat        ,
    output                        nice_rsp_err    	   ,
    // Memory lsu_req	
    output                        nice_icb_cmd_valid   ,
    input                         nice_icb_cmd_ready   ,
    output [`E203_ADDR_SIZE-1:0]  nice_icb_cmd_addr    ,
    output                        nice_icb_cmd_read    ,
    output [`E203_XLEN-1:0]       nice_icb_cmd_wdata   ,
//  output [`E203_XLEN_MW-1:0]    nice_icb_cmd_wmask   ,  // 
    output [1:0]                  nice_icb_cmd_size    ,
    // Memory lsu_rsp	
    input                         nice_icb_rsp_valid   ,
    output                        nice_icb_rsp_ready   ,
    input  [`E203_XLEN-1:0]       nice_icb_rsp_rdata   ,
    input                         nice_icb_rsp_err	

);

由上述代码可以看出,NICE 协处理器的接口主要包括四个通道:

2. NICE 协处理器参考设计

蜂鸟 E203 提供了一个协处理器示例。该协处理器的实现需求为:计算一个3*3矩阵的逐行以及逐列的累加和。其软硬件实现可参考:

开源蜂鸟e203协处理器demo资料汇总_全国大学生集成电路创新创业大赛_RISC-V论坛讨论_RISC-V MCU中文社区

测试结果:在 optimization level 设置为二级时,执行该矩阵运算的指令数由454减少到103,周期数从546减少到151.

Untitled

不同编译器优化等级下的测试结果:

优化等级 指令数 周期数 NICE指令数 NICE周期数
O0 638 800 206 273
O1 452 599 103 151
O2 454 546 103 151
O3 454 544 103 152