蜗牛的壳 - rtl
type: channel
link: https://snailium.net/tag/rtl/
items: 电路设计中优先级处理的实现

电路设计中优先级处理的实现
type: item
date: 2007-03-27T20:47:26-04:00
description: 有时候面对多个事件同时发生，却没有足够的资源去处理全部事件，或者无需全部处理，这时就要引入“优先事件”的概念。举个例子，假设现在有一个请求指令同时包含如下错误： 校验检测错误（ECC error或者parity error） 无效操作代码（Illegal opcode） 无效地址（Invalid address） 而系统规定： 如果出现无效操作代码，则抛弃当前指令并引发中断； 如果操作代码正确，但地址错误，则记录错误地址并引发中断； 如果操作代码和地址均正确，ECC错误，则向源设备返回错误信号。 按照正常思路，这段错误处理代码大致如下： [code lang="verilog"] if (ill_opcode) // Illegal opcode begin interrupt = 1'b1; end else if (inv_addr) // Invalid address begin rec_addr <= addr; interrupt = 1'b1; end else if (ecc_err) // ECC error begin err_resp = 1'b1; end else ... [/code] 这么写虽然没什么毛病，但是如果这样简化一下，既可以提高可维护性，又能达到同样的效果。 [code lang="verilog"] case(1'b1) ill_opcode: interrupt = 1'b1; // Illegal opcode inv_addr: // Invalid address begin rec_addr <= addr; interrupt = 1'b1; end ecc_err: err_resp = 1'b1; // ECC error default: ... [/code]