【RISC-V设计-09】- RISC-V处理器设计K0A之CIC

ops/2024/9/20 7:16:50/ 标签: risc-v

【RISC-V设计-09】- RISC-V处理器设计K0A之CIC

文章目录

  • 【RISC-V设计-09】- RISC-V处理器设计K0A之CIC
    • 1.简介
    • 2.顶层设计
    • 3.端口说明
    • 4.代码设计
    • 5.仲裁代码
    • 6.总结

1.简介

核内中断控制器(Core Interrupt Controller,简称CIC)是管理和仲裁中断的模块,能够根据预设的优先级规则,逐一上报中断请求的序号。本模块具有如下几点功能:

  1. 根据全局中断使能,控制中断序号的上报;
  2. 根据独立中断使能,控制对应的中断请求;
  3. 记录中断状态,根据中断状态向指令译码单元发出中断请求;
  4. 根据指令译码单元发出中断应答,清除中断请求;
  5. 通过软件、硬件结合的方式,支持晚到中断、咬尾中断;

2.顶层设计

3.端口说明

序号端口位宽方向说明
1core_clk1input内核时钟
2core_rstn1input内核复位信号,低有效
3irq_lines16input外部中断信号,高电平/脉冲触发
4csr2cic_gie1input全局中断使能
5csr2cic_mie16input独立控制的中断使能
6csr2cic_mip16input中断请求等待
7cic2csr_irq16output外部中断信号,高电平/脉冲触发
8cic2csr_mcause5output中断原因记录
9cic2idu_int_req1output向译码单元发送的中断请求
10idu2cic_int_ack1input译码单元返回的中断应答
11idu2cic_int_mret1input译码单元执行中断返回指令

4.代码设计

// -------------------------------------------------------------------------------------------------
// Copyright 2024 Kearn Chen, kearn.chen@aliyun.com
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
// 
//     http://www.apache.org/licenses/LICENSE-2.0
// 
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
// -------------------------------------------------------------------------------------------------
// Description :
//             1. Core Interrupt Controller
// -------------------------------------------------------------------------------------------------module k0a_core_cic (input  wire         core_clk        ,input  wire         core_rstn       ,input  wire [15:0]  irq_lines       ,input  wire         csr2cic_gie     ,input  wire [15:0]  csr2cic_mie     ,input  wire [15:0]  csr2cic_mip     ,output wire [15:0]  cic2csr_irq     ,output reg  [4:0]   cic2csr_mcause  ,output reg          cic2idu_int_req ,input  wire         idu2cic_int_ack ,input  wire         idu2cic_int_mret
);reg     status_irq;wire cic_int_hit = cic2idu_int_req & idu2cic_int_ack;wire [15:0] irq_src = csr2cic_mip & csr2cic_mie;assign cic2csr_irq = irq_lines;always @(posedge core_clk or negedge core_rstn)
beginif(!core_rstn)status_irq <= 1'b0;else if(cic_int_hit)status_irq <= 1'b1;else if(idu2cic_int_mret)status_irq <= 1'b0;
endalways @(posedge core_clk)
beginif(csr2cic_gie) begincase(1'b1)irq_src[ 0] : cic2csr_mcause <= {1'b1, 4'h0};irq_src[ 1] : cic2csr_mcause <= {1'b1, 4'h1};irq_src[ 2] : cic2csr_mcause <= {1'b1, 4'h2};irq_src[ 3] : cic2csr_mcause <= {1'b1, 4'h3};irq_src[ 4] : cic2csr_mcause <= {1'b1, 4'h4};irq_src[ 5] : cic2csr_mcause <= {1'b1, 4'h5};irq_src[ 6] : cic2csr_mcause <= {1'b1, 4'h6};irq_src[ 7] : cic2csr_mcause <= {1'b1, 4'h7};irq_src[ 8] : cic2csr_mcause <= {1'b1, 4'h8};irq_src[ 9] : cic2csr_mcause <= {1'b1, 4'h9};irq_src[10] : cic2csr_mcause <= {1'b1, 4'ha};irq_src[11] : cic2csr_mcause <= {1'b1, 4'hb};irq_src[12] : cic2csr_mcause <= {1'b1, 4'hc};irq_src[13] : cic2csr_mcause <= {1'b1, 4'hd};irq_src[14] : cic2csr_mcause <= {1'b1, 4'he};irq_src[15] : cic2csr_mcause <= {1'b1, 4'hf};default     : cic2csr_mcause <= 5'd0;endcaseend
endalways @(posedge core_clk or negedge core_rstn)
beginif(!core_rstn)cic2idu_int_req <= 1'b0;else if(cic_int_hit)cic2idu_int_req <= 1'b0;else if(~status_irq & (|irq_src))cic2idu_int_req <= 1'b1;
endendmodule

5.仲裁代码

# -------------------------------------------------------------------------------------------------
# Copyright 2024 Kearn Chen, kearn.chen@aliyun.com
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#     http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# -------------------------------------------------------------------------------------------------.section .init, "ax", @progbits.globl  _start.align  2
_start:.option norvc;j       handler_reset.word   handler_irq0.word   handler_irq1.word   handler_irq2.word   handler_irq3.word   handler_irq4.word   handler_irq5.word   handler_irq6.word   handler_irq7.word   handler_irq8.word   handler_irq9.word   handler_irq10.word   handler_irq11.word   handler_irq12.word   handler_irq13.word   handler_irq14.word   handler_irq15.section .text.handler_isr, "ax", @progbits.align    2
handler_isr:addi sp, sp, -56sw x1 , 0(sp)sw x4 , 4(sp)sw x5 , 8(sp)sw x6 , 12(sp)sw x7 , 16(sp)sw x8 , 20(sp)sw x9 , 24(sp)sw x10, 28(sp)sw x11, 32(sp)sw x12, 36(sp)sw x13, 40(sp)sw x14, 44(sp)sw x15, 48(sp)
1:csrr a0, mcausebeq x0, a0, 2fandi a0, a0, 15addi a1, x0, 1sll a2, a1, a0csrrc a2, mip, a2slli a0, a0, 2lw a1, 4(a0)jalr ra, a1, 0jal x0, 1b
2:lw x15, 48(sp)lw x14, 44(sp)lw x13, 40(sp)lw x12, 36(sp)lw x11, 32(sp)lw x10, 28(sp)lw x9 , 24(sp)lw x8 , 20(sp)lw x7 , 16(sp)lw x6 , 12(sp)lw x5 , 8(sp)lw x4 , 4(sp)lw x1 , 0(sp)addi sp, sp, 56mret.section .text.handler_default, "ax", @progbits.align    2.weak   handler_irq0.weak   handler_irq1.weak   handler_irq2.weak   handler_irq3.weak   handler_irq4.weak   handler_irq5.weak   handler_irq6.weak   handler_irq7.weak   handler_irq8.weak   handler_irq9.weak   handler_irq10.weak   handler_irq11.weak   handler_irq12.weak   handler_irq13.weak   handler_irq14.weak   handler_irq15
handler_irq0:
handler_irq1:
handler_irq2:
handler_irq3:
handler_irq4:
handler_irq5:
handler_irq6:
handler_irq7:
handler_irq8:
handler_irq9:
handler_irq10:
handler_irq11:
handler_irq12:
handler_irq13:
handler_irq14:
handler_irq15:
loop_isr:j loop_isr.section  .text.handler_reset, "ax", @progbits.align    2
handler_reset:
.option push
.option norelaxla gp, __global_pointer$
.option pop
1:la sp, _eusrstack
2:la a0, _data_lmala a1, _data_vmala a2, _edatabgeu a1, a2, 2f
1:lw a3, 0(a0)sw a3, 0(a1)addi a0, a0, 4addi a1, a1, 4bgeu a1, a2, 2flw a3, 0(a0)sw a3, 0(a1)addi a0, a0, 4addi a1, a1, 4bltu a1, a2, 1b
2:la a0, _sbssla a1, _ebssbgeu a0, a1, 2f
1:sw x0, 0(a0)addi a0, a0, 4bgeu a0, a1, 2fsw x0, 0(a0)addi a0, a0, 4bgeu a0, a1, 2fsw x0, 0(a0)addi a0, a0, 4bltu a0, a1, 1b
2:la a3, handler_isrcsrw mtvec, a3j main

这段代码是开始运行时初始化的代码,同时还存在中断处理相关的操作,通过读取中断原因、进行一些位操作确定中断序号。如果中断原因不为 0,根据中断序号查找到中断向量表,跳转到特定的地址执行相应的中断处理程序。

6.总结

本文阐述了一种极为简洁的中断控制模块。该模块采用软件与硬件相结合的方式,来达成中断的处理。并且,它还能够支持晚到中断和咬尾中断,一次进出栈就能够处置多个现存的中断。如此一来,节省了中断处理的时间,提高了中断处理的效率。


http://www.ppmy.cn/ops/93729.html

相关文章

flink web监控

作者&#xff1a;南墨 监控指标 进入Flink的原生页面&#xff0c;需要从yarn的原生页面的后台链接进入&#xff0c;如下图&#xff1a; 这里必须要用supergroup组的用户或者flink提交任务的用户&#xff08;如果该用户是机机用户不能登录&#xff09;才能够看到任务。 系统监…

(javaweb)分层解耦

目录 一.三层架构 二.分层解耦 三.IOC&DI入门 四.IOC详解 五. DI详解 一.三层架构 复用性差&#xff0c;难以维护和管理 前端发起请求&#xff0c;先会到达controller&#xff0c;再调用service进行逻辑处理&#xff0c;逻辑处理的前提是先拿到数据&#xff0c;到dao…

基于SpringBoot的体育馆管理系统的设计与实现

TOC springboot162基于SpringBoot的体育馆管理系统的设计与实现 绪论** 1.1 研究背景 当前社会各行业领域竞争压力非常大&#xff0c;随着当前时代的信息化&#xff0c;科学化发展&#xff0c;让社会各行业领域都争相使用新的信息技术&#xff0c;对行业内的各种相关数据进…

PyTorch 基础学习(6)- 函数API

系列文章&#xff1a; PyTorch 基础学习&#xff08;1&#xff09; - 快速入门 PyTorch 基础学习&#xff08;2&#xff09;- 张量 Tensors PyTorch 基础学习&#xff08;3&#xff09; - 张量的数学操作 PyTorch 基础学习&#xff08;4&#xff09;- 张量的类型 PyTorch 基础学…

KillWxapkg-自动化反编译微信小程序工具(附安装包)

KillWxapkg是一款纯Golang实现&#xff0c;一个用于自动化反编译微信小程序、小程序安全评估工具工具&#xff0c;小程序安全利器&#xff0c; 可以自动解密&#xff0c;解包&#xff0c;可还原工程目录&#xff0c;支持Hook&#xff0c;小程序修改&#xff0c;支持微信开发者工…

k8s 单机 部署

k8s 单机 部署 香港服务器 centos7.6 2核4G 30M 搞个k8s单机部署搞了好几天 就是一直出错 遇到了好多次镜像的错误 真的是日了&#x1f415;了索性 搞个香港服务器&#xff0c;不折腾镜像源了Deploy Kubernetes On-Premises Using CentOS 7 — Part 1 https://medium.com/sar…

【单片机】51单片机入门教程(二):定时器的模式详解与中断应用实例

文章目录 51单片机定时器教程:模式详解与中断应用实例1. 介绍2. 51单片机定时器/计数器概述3. 定时器控制寄存器与中断入口4. 模式0:13位定时器/计数器5. 模式1:16位定时器/计数器6. 模式2:8位自动重装载定时器/计数器7. 模式3:分割两个独立的8位定时器/计数器8. 总结51单…

基于SpringBoot的企业资产管理系统

TOC springboot117基于SpringBoot的企业资产管理系统 系统概述 1.1 研究背景 智慧养老是面向居家老人、社区及养老机构的传感网系统与信息平台&#xff0c;并在此基础上提供实时、快捷、高效、低成本的&#xff0c;物联化、互联化、智能化的养老服务。 随着科技进步&#…

【qt】QMainWindow下实现一个记事本

之前我们学过QWidget&#xff0c;QMainWindow会在ui界面多一个菜单 先实现ui界面 1.添加文本编辑&#xff0c;实现可以写多行 2.将文本编辑放大&#xff0c;拖动即可 3.编辑菜单栏 4.然后我们要实现对应子列表的功能&#xff0c;但是在这里不能转到槽&#xff0c;所以我们…

关于自己部署AI大模型踩的坑(一)——硬件篇

最近一直在研究如何打算属于我自己的J.A.R.V.I.S.&#xff08;钢铁侠中的机器人管家&#xff09;。 上一篇写了我最近在部署自己的大模型&#xff0c;使用llama3.1&#xff0c; 和通义千问2。虽然最终结果也是成功了&#xff0c;过程却十分地坎坷。 所以这一篇文章一是总结其中…

uniapp版本更新除了plus.runtime.getProperty的解决办法

以下是展示图 带尺寸的图片: 首先把以下代码放到想要更新弹出的页面 //template部分<uni-popup ref"popup" background-color"#fff"><versionUp handleCloseVersion"closeVersion"></versionUp></uni-popup>//script…

Mysql——对数据基本操作(增删查改)——操纵语言(DML)

之前的创建数据库和创建表&#xff0c;类型、约束都是用的DDL【data definition language】 数据定义语言&#xff0c;用来维护存储数据的结构 代表指令: create, drop, alter 那么现在我们来学习数据操纵语言 DML【data manipulation language】 数据操纵语言&#xff0c;用来…

使用Selenium爬取网络页面

在现代网络数据分析和自动化测试中&#xff0c;Selenium 是一个强大而流行的工具。它不仅可以帮助开发者自动化浏览器操作&#xff0c;还能用于爬取网络页面。本文将介绍如何使用 Selenium 爬取网络页面&#xff0c;包括基本设置、常用操作及一些实用的技巧。 一、什么是 Selen…

腾讯cdg提前批一面0726

介绍项目 黑马商城 为什么使用rabbitmq 用于异步更新订单 扣减余额后异步更新订单失败怎么办 分布式事务回滚 什么是接口幂等性&#xff0c;怎么实现 接口幂等性是指同一个接口在短时间点击多次都之后返回只执行一次的结果。 Token机制&#xff1a; 生成Token&#xff1a;在客户…

点赞功能开发

文章目录 1.点赞收藏功能设计1.示意图2.描述1.使用redis记录的数据2.数据库的设计3.功能设计1.新增点赞2.取消点赞3.查询当前题目被点赞的数量4.查询当前题目被当前用户是否点过赞5.我的点赞 2.代码生成器的使用1.找到代码生成器在磁盘的位置&#xff0c;直接复制到项目下2.导入…

微信小程序中实现自动滚动

使用scroll-view组件的scroll-into-view属性&#xff1a; <scroll-view class"container" scroll-y"{{true}}" scroll-into-view"recordBottomScroll"><view class"text_style" style"color: #252526;">{{te…

16 交换机命令行配置

交换机命令行配置 一、交换机命令行基本配置 &#xff08;一&#xff09;配置主机名 Switch>enable Switch#configure terminal Switch(config)#hostname S1&#xff08;二&#xff09;查看配置信息 Switch#show running-config Building configuration...Current confi…

SpringBoot配置

目录 yaml基本含义 yaml基本语法 yaml数据格式 实操 yaml:参数引用 小结 yaml基本含义 通过对比不同配置文件写法&#xff0c;就可以发现yaml配置文件&#xff0c;更加注重数据本身 原因 1 比properties配置文件&#xff0c;更加注重层级关系 2 和xml文件比起来&#xff…

【Unity-UGUI】UI重建

UGUI UI重建二三事(一) UGUI UI重建二三事(二) [UGUI源码二]Unity UI重建(Rebuild)源码分析 这一部分主要是通过以上几篇文章学习的&#xff0c;总结一下&#xff1a; UI重建主要分类两类&#xff0c;一类是布局重建(Layout Rebuild)&#xff0c;另一类是图形重建(Graphic Reb…

jar包扫描不到,idea如何通过Project Structure设置

目录 一、进入Project Structure二、添加你的项目进来三、手动添加依赖 很多时候jar包文件已经存在&#xff0c;但是无法使用&#xff0c;需要通过Project Structure设置 一、进入Project Structure 选择Modules->点击 二、添加你的项目进来 一直next&#xff0c;最后点…