偶然發現case的另一用法case(1’b1),這樣的寫法表示case裡的條件有先後之分,可利用此特性編寫優先編碼器,以下為4到2優先編碼器真值表。
i[3] | i[2] | i[1] | i[0] | o[1] | o[0] |
x | x | x | 1 | 0 | 0 |
x | x | 1 | 0 | 0 | 1 |
x | 1 | 0 | 0 | 1 | 0 |
1 | 0 | 0 | 0 | 1 | 1 |
在RTL實現上,case條件中越上面的條件優先權越高(i[0] > i[1] > i[2] > i[3])。
module case1 (
input [3:0] i,
output reg [1:0] o
);
always @(*) begin
case(1'b1)
i[0]: o = 2'b00;
i[1]: o = 2'b01;
i[2]: o = 2'b10;
i[3]: o = 2'b11;
default: o = 2'bxx;
endcase
end
endmodule
模擬如下:
