概况

常规单发射5级流水线cpu。新增支持指令{mtc0, mfc0, eret, syscall, break, bgezal, bltzal};新增异常处理{Int, AdEL, AdES, Ov, RI},其中Int中断包括软件、硬件、计时器中断(硬件中断未测);新增CP0寄存器{BadVAddr, Count, Compare, Status, Cause, EPC, PrID}。通过Loongson.SRAM功能测试。

(新增设计均为能暂停便暂停,无cache、tlb)

Thinking_Log

1.为何将 取指/访存 地址错误一并归到AdEL异常中?

如此写BadVAddr寄存器的操作又复杂了些

2.为何不约定eret存在延迟槽?

如此eret的相关硬件处理又复杂了些

Bug_Log

1.检测到异常后,未能完全将受害指令之后的指令影响消除

受害指令前后指令“假冲突”产生的阻塞

Stall与Req同时存在时,忽略了增添Req对F_pc写使能的影响,导致Stall单方面使F_pc不可写,F_pc未更新,异常跳转NPC失效。

例: 某时刻 D-E-M : mfhi-syscall-divu;下一周期stall和req同时存在



下方红圈处F_pc值未更新

解决: 顶层Req信号优先级最高,修正IFU的写使能We

错误开始的乘除槽

例: 某时刻 D-E-M : bnez-divu-syscall;req存在,div进入乘除槽HILO开始运算

解决: M级必定能检测出是否发生异常,只有在E级的乘除槽脱离管控;所以异常发生时,受害指令后的指令最多刚刚到乘除槽,所以只需要用Req信号限制乘除槽的运作即可

always @(posedge Clk) begin
if(Rst == 1) begin
HI <= 0;
LO <= 0;
Wait <= 0;
Busy <= 0;
end else if(Req != 1) begin //Req limitation
if(Wait == 0) begin
case(HILOOp)
...
end

2.放走W级指令不意味着W级不需要Req清空

事实上,放走W级指令是只GRF处可以仍写。5级流水各级含义时间长了容易混淆;寄存器是组合信号的源头;顶层信号的来历要清楚(全是组合逻辑,有些搭配了fsm)

3.端口/信号的隐藏意义改变

最初的DMWr是区分Store和Load类指令的必要条件,因而最初设计用DMWr区分AdES和AdEL。

但后续设计令Req==1时强制将传入BE.DMWr端口的信号改0,导致BE.DMWr无法区分L/S指令,但自己仍认为DMWr信号具有相关功能,所以错判异常。



BE.DMWr非最初的CU.DMWr,而是CU.DMWr & ~Req

随着不断增加设计,传入信号的意义可能和最初端口命名的意义有所脱节,从而导致错误。要时刻熟悉设计的部件,同时端口/信号命名仍需完善!

类似问题:顶层寄存器控制信号Stall传入各流水级时,使用了端口名Reg_Rst,导致各级内Reg_Rst端口信号含义不清,需改进!

4.eret指令不存在延迟槽

看了测试程序给的异常处理程序断eret后跟了nop,想当然当作延迟槽了。

结果之后有一段程序,利用eret返回错误epc导致AdEL异常,同时eret后紧跟sw,提前修改了data_sram导致错误。

解决:将错就错,对eret增加清空延迟槽操作。

5.顶层寄存器控制信号冲突的担忧

需弄清各信号产生的逻辑和关联:①产生逻辑;②信号优先级

  • Stall
  • Req
  • linger
  • LoadDelay
  • Clr

6.由于读BRAM IP核在下一拍返回值,因而将D_instr改为的组合逻辑,不在寄存器中

D级指令的一些操作时,要记得这点

7.寄存器信号的可读写性

CP0各寄存器各个位的可读写性不尽相同。

重申了本质问题:寄存器的读/写/复位

【P7&Loongson】支持部分中断/异常处理的更多相关文章

  1. 裸板中中断异常处理,linux中断异常处理 ,linux系统中断处理的API,中断处理函数的要求,内核中登记底半部的方式

    1.linux系统中的中断处理  1.0裸板中中断异常是如何处理的?     以s5p6818+按键为例          1)按键中断的触发        中断源级配置            管脚功 ...

  2. Linux设备驱动之中断支持及中断分层

    快速中断:在开启快速中断时,其他中断不会打断快速中断. 多个中断共享一个中断号. 中断行为受到限制: 1.不能使用可能引起阻塞的函数 2.不能使用可能引起调度的函数 中断注册:request_irq( ...

  3. redis主从中断异常处理

    线上预警主从中断: 查看线上复制信息: # Replication role:slave master_host:master_host master_port:6379 master_link_st ...

  4. 痞子衡嵌入式:探讨i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题

    大家好,我是痞子衡,是正经搞技术的痞子.今天痞子衡给大家介绍的是i.MXRT下FlexSPI driver实现Flash编程时对于中断支持问题. 前段时间有客户在官方社区反映 i.MXRT1170 下 ...

  5. C++异常处理:try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  6. C++异常处理: try,catch,throw,finally的用法

    写在前面 所谓异常处理,即让一个程序运行时遇到自己无法处理的错误时抛出一个异常,希望调用者可以发现处理问题. 异常处理的基本思想是简化程序的错误代码,为程序键壮性提供一个标准检测机制. 也许我们已经使 ...

  7. s5pv210中断体系

    一.什么是中断? 1.中断的发明是用来解决宏观上的并行需要的.宏观就是从整体上来看,并行就是多件事情都完成了. 2.微观上的并行,就是指的真正的并行,就是精确到每一秒甚至每一刻,多个事情都是在同时进行 ...

  8. C++ 异常处理机制的实现

    http://blog.jobbole.com/103925/ 本文深入讨论了VC++编译器异常处理的实现机制.附件源代码包含了一个VC++的异常处理库. 下载源代码 – 19 Kb 介绍 相对于传统 ...

  9. STM32之中断

    在STM32(Cortex-M3)中没有显示的代码拷贝,只有启动代码进行了向量的初始化,一直以为是编译器在程序影像中自己完成了相关向量的拷贝,即,拷贝到固定的NVIC区,事实上并不是这样,cortex ...

  10. [IC]浅谈嵌入式MCU软件开发之中断优先级与中断嵌套

    转自:https://mp.weixin.qq.com/s?__biz=MzI0MDk0ODcxMw==&mid=2247483680&idx=1&sn=c5fd069ab3f ...

随机推荐

  1. Spring Boot轻松理解动态注入,删除bean

    原文地址:http://412887952-qq-com.iteye.com/blog/2348445 ​ 我们通过getBean来获得对象,但这些对象都是事先定义好的,我们有时候要在程序中动态的加入 ...

  2. linux服务器清理指定日期所有垃圾日志文件

    阿里云服务器推荐购买99元 硬盘再大,也架不住日志文件多. 1.找到并清除30天前的所有日志文件. find / -name "*.log" -mtime +30 -exec rm ...

  3. Qt编写安防视频监控系统59-子模块3图文警情

    一.前言 图文警情子模块是为了适应现在各种人脸识别报警应用而增加的,参照现在各种视频监控手机app报警提示信息,基本上都是带了时间.内容.图片缩略图(单击可以查看大图),这种信息排列形式在现代的软件中 ...

  4. Qt编写安防视频监控系统35-onvif抓拍图片

    一.前言 以前不知道onvif也可以做抓拍功能,直到近期重新用Onvif Device Test Tool工具测试的时候,发现还有抓图的接口,于是抓跑分析出要收发的数据,然后加入到自己封装的onvif ...

  5. UDP与TCP+JAVA相关理论

    相关知识 目录 相关知识 UDP UDP认识 UDP的特点(与TCP相比) UDP网络Socket编程(Java实现) 1.创建客户端 2.客户端图形界面 TCP Socket编程通信 JAVA 基础 ...

  6. 注册表判断是否安装微软Edge浏览器

    自己摸索的,注册表判断是否安装微软Edge浏览器: bool checkInstalledMsEdge() { try { using(var ieKey = Registry.LocalMachin ...

  7. Activiti、Flowable和Camunda选型和对比

    https://camunda.com/https://www.jianshu.com/p/5942c4ee513chttps://zhuanlan.zhihu.com/p/484107368http ...

  8. nginx配置参数优化

    ginx作为高性能web服务器,即使不特意调整配置参数也可以处理大量的并发请求.以下的配置参数是借鉴网上的一些调优参数,仅作为参考,不见得适于你的线上业务. worker进程 worker_proce ...

  9. $router.options.routes取不到全部路由

    最近在看老项目的路由逻辑 项目使用constantRoutes和asyncRoutes分别代表基本路由和动态路由.createRouter时,传入的routes参数只有基本路由 在路由导航守卫中,判断 ...

  10. Linux开发帮助参考

    在开发Linux系统下面软件时常常需要查阅手册,但是如果你的开发平台不是Linux系统,那你无法丝滑使用man手册,这里推荐一些方便的Linux开发手册. 手册: 在线man手册:Linux Man ...