我行依我素 | 苦苦咸咸就是我 | Snailium的个人网站
有时候面对多个事件同时发生,却没有足够的资源去处理全部事件,或者无需全部处理,这时就要引入“优先事件”的概念。
举个例子,假设现在有一个请求指令同时包含如下错误:
而系统规定:
按照正常思路,这段错误处理代码大致如下:
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
...
这么写虽然没什么毛病,但是如果这样简化一下,既可以提高可维护性,又能达到同样的效果。
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: ...
| 日 | 一 | 二 | 三 | 四 | 五 | 六 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | ||||
| 4 | 5 | 6 | 7 | 8 | 9 | 10 |
| 11 | 12 | 13 | 14 | 15 | 16 | 17 |
| 18 | 19 | 20 | 21 | 22 | 23 | 24 |
| 25 | 26 | 27 | 28 | 29 | 30 | 31 |