上篇一文解析RISC-V SiFive U54内核——中断和异常说到,SiFive U54内核有两个中断控制器:CLINT和PLIC。CLINT用于本地中断(软件中断和定时器中断),PLIC用于全局中断。 下面对CLINT进行详细说明。 内核本地中断(CLINT) 下图为CLINT示意图,CLINT通过固定的中断号和优先级,可将软件中断或定时器中断直接发送给指定的hart...
clint:核心本地中断模块,对输入的中断请求信号进行总裁,产生最终的中断信号。 rom:程序存储器模块,用于存储程序(bin)文件。 ram:数据存储器模块,用于存储程序中的数据。 timer:定时器模块,用于计时和产生定时中断信号。目前支持RTOS时需要用到该定时器。 uart_tx:串口发送模块,主要用于调试打印。 gpio:简单的IO口模...
在D1上,CLINT的寄存器地址如上所示,比如开启定时器,那么只需要保证两点。C906自定义了一个机器模式扩展状态寄存器MXSTATUS。 保证第17位是1表示可以开启CLINT功能。 另外,还需要将MTIMECMPL0的值设置的大于当前的时间基点。 问题是标准的CLINT上有MTIME寄存器,而C906上可以通过time的csr来获取当前机器的时基。 代码...
高带宽、低时延的RISC-V芯片系统解决方案,解决方案包括高-高性能核心、高能效核心、高速一致NoC、RISC-V Trace/Debug调试接口、RISC-V中断控制器(PLIC、CLINT)、电源管理、安全管理、虚拟化、IO一致性(IO Coherency)和内存子系统等,帮助客户实现嵌入式、客户端、服务器、高性能计算场景的芯片。
(从0开始计数)的hart对应的 MTIMECMP 的寄存器的物理地址就是// 0x2000000L + 8 * id// 因此呢就容易理解下面的操作了,实际上就是根据 MTIME 初始化 MTIMECMP*(uint64*)CLINT_MTIMECMP(id) = *(uint64*)CLINT_MTIME + interval;// prepare information in scratch[] for timervec.// scratch[0..2]...
mtval(Machine Trap Val):它保存了陷入(trap)的附加信息:地址例外中出错的地址、发生非法指令例外的指令本身,对于其他异常它的值为0。 在clint.v中有四个always语句块,它们分别干了这些事情: 中断仲裁,判断中断类型int_state,决定是否打断执行阶段的除法指令。
0xm44RWxip作用被clicintip替换,xip不再生效。写入被忽略,不产生trap。在CLINT/CLIC模式切换时,xie/xip保留原来的值不变。 0xm05RWxtvec新增bit[1:0]=11表示CLIC模式,bit[5:2]为CLIC下的submode,当前只能为0000。CLIC模式下bit[XLEN-1:6]为非硬件向量模式的中断服务程序入口,至少对齐到64-byte地址边界。
但是CLINT只能管理0~15号CPU core中断,而15号以后的还需要依赖另外一个中断控制器CLIC或PLIC(Platform ),如下图所示, CLINT管理的是CPU core中断,而PLIC(和GIC非常非常类似,支持多clustor,SMP)。比如某家芯片设计公司设计的SOC芯片使用的是RISC-V CPU,他们设计的SOC IP中断请求信号(UART,IIC,SPI,TIMER等)只能...
当前,赛昉科技能提供成熟的高性能、高带宽、低延迟的RISC-V芯片系统解决方案,方案包括高性能内核、高能效内核、高速的一致性NoC、RISC-V Trace/Debug调试接口、RISC-V中断控制器(PLIC,CLINT)、功耗管理、安全管理、虚拟化、IO一致性(IO Coherency)和内存子系统等。除了用于自研芯片,这些方案也会开放授权给那些...
本地中断:U54内核的本地中断只有2种,软件中断和定时器中断,这两个中断都由本地中断器(CLINT)生成。本地中断通过专用中断异常代码和固定优先级直接发送给单个 hart。 因此,本地中断没有仲裁,也不需要额外的内存访问来确定中断的原因。 全局中断:通过平台级中断控制器 (PLIC) 路由,该控制器可以通过外部中断将中断...