当前位置: 首页 > news >正文

做面料哪个网站好济宁百度竞价推广

做面料哪个网站好,济宁百度竞价推广,横岗网站建设服务项目,网站装修怎么做异常类型以及精确异常的处理 异常有点像中断#xff0c;处理完还要回到原来的状态#xff0c;所以需要对之前的状态进行保存。本CPU主要实现对以下异常的处理#xff1a; 1.外部硬件中断 2.复位异常 3.系统调用异常#xff08;发生在译码阶段#xff09; 4.溢出异常处理完还要回到原来的状态所以需要对之前的状态进行保存。本CPU主要实现对以下异常的处理 1.外部硬件中断 2.复位异常 3.系统调用异常发生在译码阶段 4.溢出异常发生在执行阶段 5.自陷指令异常发生在执行阶段因为需要进行条件判断 6.无效指令异常发生在译码阶段 为了不破坏原程序的执行异常指令之前的指令都要确保执行完成而异常指令和其之后的指令需要取消。这要求异常发生的循序和指令发生的顺序相同。可会有例外吗 由于流水线的特性不同指令的异常可能发生在不同阶段。例如加载指令在访存阶段发生未对齐异常而下一个指令是无效指令在译码阶段发生异常。无效指令先发生异常顺序错误。如何解决 先发生的异常不立即处理先进行标记所有的异常统一留到访存阶段进行处理。 一、异常处理过程 异常发生之后进行的处理 如果发生先看当前是否处于异常处理阶段根据状态寄存器的EXL字段 如果正在异常处理接着判断是否处于中断阶段是的话则不处理此中断异常处理过程会禁止中断 不是处于中断异常则保存异常原因进入异常处理例程即可。 如果没有正在进行异常处理 1.先保存异常原因Cause寄存器的Execode字段 2.将保存异常返回地址到EPC这时候需要判断是否为延迟槽指令PC-4BD1PCBD0 4.转移到异常处理例程最后就是根据异常类型确定PC的值是哪一个入口地址 EXL表示当前是否在异常状态EPC保存异常返回地址BD是当发生异常的指令在分支延迟槽时被置位 如果异常指令是延迟槽指令那么也必须执行上一条转移指令PC-4 二、实现思路 我们先在译码系统调用无效异常返回执行阶段自陷溢出判断是否有相关异常发生并传递给访存阶段对不同异常结合CP0寄存器进行具体判断。如果需要处理就转移到异常处理入口地址在异常向量表中有定义同时需要清除回写阶段前的所有寄存器。 自陷异常 通过条件判断是否发生异常如果发生就进入异常处理例程 系统调用异常 当我们想要切换工作模式比如获得更高权限进入内核模式通过调用系统异常指令来实现修改工作模式状态位即CP0中Status的UM字段。但是本CPU没有实现其他模式。 系统异常返回 作用是返回异常出现之前的指令异常结束具体操作为 1.EPC寄存器存储异常指令地址的值给到PC 2.清除异常状态EXL字段清零 三 具体实现思路 1.在各个阶段译码阶段需要判断延迟槽收集异常状态将信号异常判断信号与异常地址传送到访存阶段 2.访存阶段判断异常是否处理需要根据CP0中的一些寄存器 需要处理进入异常地址(如果是异常返回指令则进入EPC的地址)清除之前阶段修改CP0进入异常状态等 四 各个阶段具体实现 1.PC阶段 如果异常到来就使用新的PC值 end else if(stall[1] NoStop) beginid_pc if_pc;id_inst if_inst; 2.各个寄存器阶段 如果异常来临把所有输出信号赋初始值 end else if(flush 1b1 ) beginex_aluop EXE_NOP_OP;ex_alusel EXE_RES_NOP;ex_reg1 ZeroWord;ex_reg2 ZeroWord;ex_wd NOPRegAddr;ex_wreg WriteDisable;ex_excepttype ZeroWord;ex_link_address ZeroWord;ex_inst ZeroWord;ex_is_in_delayslot NotInDelaySlot;ex_current_inst_address ZeroWord; is_in_delayslot_o NotInDelaySlot; 3.译码阶段 对指令进行译码如果是异常指令保存状态如系统调用异常返回自陷指令在执行阶段还要进行条件判断所以这里不记录 然后把异常状态都保存到一个信号中 //exceptiontype的低8bit留给外部中断第9bit表示是否是syscall指令//第10bit表示是否是无效指令第11bit表示是否是trap指令assign excepttype_o {19b0,excepttype_is_eret,2b0,instvalid, excepttype_is_syscall,8b0}; 4.执行阶段 判断执行阶段里的异常状态如溢出自陷指令条件判断并把相关信号输出 assign excepttype_o {excepttype_i[31:12],ovassert,trapassert,excepttype_i[9:8],8h00}; 5.访存阶段 主要目的是进一步判断是否要发生异常类型结合CP0中的信号判断以及具体哪个异常 什么时候发生异常复位异常和暂停情况不处理异常所以取指地址不为0才发生异常 区分是哪个异常类型不能只根据传过来的异常类型因为有些还需要CP0中的额外条件 中断异常当处于中断或者异常情况下不处理中断 发生中断的依据是: Cause 寄存器的IP字段不为0且Status寄存器中相应的中断掩码字段IM也不为0另外Status 寄存器的EXL字段为0表示不处于异常处理过程中Status 寄存器的IE字段为1,表示中断使能。 其他异常类型没有额外条件只要之前异常触发了就可以。 if(current_inst_address_i ! ZeroWord) beginif(((cp0_cause[15:8] (cp0_status[15:8])) ! 8h00) (cp0_status[1] 1b0) (cp0_status[0] 1b1)) beginexcepttype_o 32h00000001; //interruptend else if(excepttype_i[8] 1b1) beginexcepttype_o 32h00000008; //syscallend else if(excepttype_i[9] 1b1) beginexcepttype_o 32h0000000a; //inst_invalidend else if(excepttype_i[10] 1b1) beginexcepttype_o 32h0000000d; //trapend else if(excepttype_i[11] 1b1) begin //ovexcepttype_o 32h0000000c;end else if(excepttype_i[12] 1b1) begin //返回指令excepttype_o 32h0000000e;endend 具体每个异常类型对应的输出回顾译码和执行阶段做的定义 到这一步才算完成对异常类型的判断 下面是根据不同的异常类型做不同的操作主要是给修改PC以及寄存器 6.根据不同的异常类型修改CP0的值主要记载返回地址和返回原因 CP0中重要寄存器作用 1.EPC是异常程序计数器(Exception Program Counter),用来存储异常返回地址一般情况下存储发生异常的指令的地址但是如果发生异常的指令位于延迟槽中那么EPC存储的是前一条转移指令的地址。该寄存器可读、可写。 2.cause寄存器的BD字段 当发生异常的指令处于分支延迟槽(Branch DelaySlot)时该字段被置为1。ExeCode是表示异常原因 3.Status寄存器的EXL字段 表示是否处于异常级( Exception Level) 当异常发生时会设置本字段为1,表示处理器处于异常级此时处理器会进入内核模式下工作并且禁止中断。 中断指令 依据发生异常的指令是否位于延迟槽中保存返回地址设置EPC寄存器的值以及Status 寄存器的BD字段如果位于延迟槽中那么设置EPC寄存器为上一条指令的地址Status 寄存器的BD字段为1反之设置EPC寄存器为发生异常指令的地址Status寄存器的BD字段为0。另外设置异常状态设置Status 寄存器的EXL字段为I,表示处于异常级中断禁止。最后保存返回原因设置Cause寄存器的ExcCode字段5b00000表示异常原因是中断。 系统调用异常 分两种情况。 (1)如果Status寄存器的EXL字段为0那么依据发生异常的指令是否位于延迟槽中设置EPC寄存器的值以及Status寄存器的BD字段。如果位于延迟槽中那么设置EPC寄存器为上一条指令的地址Status 寄存器的BD字段为1,反之设置EPC寄存器为发生异常指令的地址Status 寄存器的BD字段为0。然后设置Status寄存器的EXL字段为1,表示处于异常级中断禁止。最后设置Cause寄存器的ExcCode字段为5b01000表示异常原因是系统调用指令syscall,参考第10章的表10-7。 (2)如果Status寄存器的EXL字段为1,表示当前已经处于异常级了又发生了新的异常那么只需要将异常原因保存到Cause寄存器的ExcCode字段此处设置为5b01000表示异常原因是系统调用指令syscall。 3.无效指令异常 与系统调用异常的处理过程类似只是设置Status寄存器的ExcCode字段为5b01010,表示异常原因是无效指令。 4.自陷异常 与系统调用异常的处理过程类似只是设置Status寄存器的ExcCode字段为5b01101,表示异常原因是自陷.  5.溢出异常 与系统调用异常的处理过程类似只是设置Status寄存器的ExcCode字段为5b01100,表示异常原因是溢出。 6.异常返回指令eret清除Status寄存器的IE字段表示中断允许。 6.控制模块 根据异常类型给出下一个PC应有的值这个值根据异常处理入口例程 如果是异常返回地址则跳转到异常返回地址 always (*) beginif(rst RstEnable) beginstall 6b000000;flush 1b0;new_pc ZeroWord;end else if(excepttype_i ! ZeroWord) beginflush 1b1;stall 6b000000;case (excepttype_i)32h00000001: begin //interruptnew_pc 32h00000020;end32h00000008: begin //syscallnew_pc 32h00000040;end32h0000000a: begin //inst_invalidnew_pc 32h00000040;end32h0000000d: begin //trapnew_pc 32h00000040;end32h0000000c: begin //ovnew_pc 32h00000040;end32h0000000e: begin //eretnew_pc cp0_epc_i;enddefault : beginendendcase end else if(stallreq_from_ex Stop) beginstall 6b001111;flush 1b0; end else if(stallreq_from_id Stop) beginstall 6b000111; flush 1b0; end else beginstall 6b000000;flush 1b0;new_pc ZeroWord; end //ifend //always 7.定时中断的结构实现 将时钟中断输出作为一个中断信号输入这样就可以处理时钟中断了从而验证异常相关指令是否实现正确。   8、测试程序 系统调用异常测试程序 当指令根据系统调用异常的指示入口地址跳转到这里后需要自己写代码去进行在EPC内进行PC4的操作不然等异常返回指令后PC按照EPC内的值跳转后还是在系统调用指令处继续异常。
http://www.dnsts.com.cn/news/856.html

相关文章:

  • 南宁响应式网站制作免费奖励自己的网站
  • 洛阳百事通文化传播有限公司seo网络推广培训
  • 两学一做 山西答题网站拉人头最暴利的app
  • 小型企业网站模板下载如何建立网站的步骤
  • 中医网站建设素材广州网站到首页排名
  • 新开传奇网站合击新媒体代运营
  • 推荐一款男人都懂得app洛阳搜索引擎优化
  • python 做网站开发吗疫情最新消息今天公布
  • 中国门户网站排行seo网站推广专员
  • 烟台企业做网站360网站seo手机优化软件
  • 湖南网站制作哪家专业河南今日头条新闻
  • 做网站需要什么今天新闻头条新闻
  • inurl 网站建设小程序开发公司排行榜
  • 文件乱码了怎么恢复百度网站怎么优化排名
  • 百度做网站投广告百度推广开户渠道公司
  • 网络推广公司电话神马seo教程
  • 广州外贸独立网站制作最新的国际新闻
  • 成都手机网站建设网站优化关键词排名公司
  • 专业集团门户网站建设方案写文章免费的软件
  • 做楼房信息网站的作用全国新冠疫苗接种率
  • wordpress搬家问号日喀则网站seo
  • 建筑工程公司需要哪些资质证书seo推广的全称是
  • 做网站多少钱啊网址域名大全
  • 怎样用ps设计网站模板公司网络搭建
  • 网络公司网站建设方案图片在线转外链
  • 长春网站免费制作seo查询是什么意思
  • 备案成功的网站深圳关键词优化公司哪家好
  • 天津南开区网站建设公司搜索推广出价多少合适
  • 网站图片批量上传360开户
  • 导航网站制作关键词优化搜索引擎