概况

常规单发射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. mybatis-plus 使用In查询

    第一种在Dao接口中自定义SQL查询,拼接xml字符串 UserDaoMapper.java @Select("<script>" +"select * fr ...

  2. @EnableWebMvc 注解会让Swagger无效访问的问题

    在工作中,通过Swagger2对项目的controller进行配置,以便于用户测试restful服务接口提高开发效率. 但是今天却出现了一个让我匪夷所思的问题就是在配置类里面加上@EnableWebM ...

  3. Qt开发经验小技巧161-165

    经常有人说Qt垃圾,说用Qt在1毫秒绘制几千个数据点卡成屎.其实显示器最高刷新频率一般才60帧,1毫秒就绘制一次有意义吗?不仅显示器没刷新过来,人肉眼也看不过来(有人可能又要抬杠说这是老板要求的,显示 ...

  4. Qt编写地图综合应用24-miniblink内核

    一.前言 用Qt做项目过程中,遇到需要用到浏览器控件的项目,可能都会绕不开一个问题,那就是从Qt5.6版本开始mingw编译器的Qt构建套件,不再提供浏览器控件了,之前还可以用webkit控件,这下很 ...

  5. C#中字符串格式化string.Forma中需要使用t转义字符的情况处理

    此处汇总一下C#中字符串格式化string.Forma中需要使用t转义字符的情况处理. 1.C# string.Format() 方法中占位大括号的外面还有大括号,此时就需要使用转义大括号{}. 处理 ...

  6. 展锐SE8451E 开启硬件流控

    Dear Customer:  如电话沟通,若将uart0配置成3M波特率,需进行如下更改:  1.时钟源更改为96M/sprdroid10_trunk_19c_rls1/bsp/kernel/ker ...

  7. Pulsar客户端如何控制内存使用

    摘要 本文围绕一个常见的使用场景深入分析在高吞吐场景下,使用Pulsar客户端收发消息可能会遇到的若干问题.并以此为切入点,梳理一下Pulsar客户端在内存控制上所做的优化改进. 使用场景 假设这样一 ...

  8. git与svn的对比-copy

    SVN与Git比较的优缺点差异   目录: SVN与Git比较(一)集中式vs分布式 SVN与Git比较(二)版本库与工作区 SVN与Git比较(三)全局版本号和全球版本号 SVN与Git比较(四)部 ...

  9. weixueyuan-Nginx HTTP模块3

    https://www.weixueyuan.net/nginx/http/ Nginx镜像模块:ngx_http_mirror_module Nginx 中镜像模块的功能是将用户的访问请求镜像复制到 ...

  10. linux:计划任务

    at 计划执行一次性任务 at  + time 表示方法: atq  -c:查看目前等待执行的任务 atrm  任务编号 :删除at任务  [root账户才能删除,其他用户只能查询] crontab ...