#134. casez语句

    ID: 134 Type: Default 1000ms 256MiB

casez语句

题目描述

对于一个8bit输入信号的优先级编码器。例如,输入8'b10010000应该输出3'd4,因为位[4]是第一个高位。如果使用上例中的case语句,则需要包含256个条目。但如果case语句中的case项支持don-care位,我们可以将其减少到9个条目。这就是casez的用途:它将值为z的位在比较中视为无关紧要。 例如,这将实现上一练习中的4输入优先级编码器:

always @(*) begin

casez (in[3:0])

4'bzzz1: out = 0; // in[3:1] can be anything

4'bzz1z: out = 1;

4'bz1zz: out = 2;

4'b1zzz: out = 3;

default: out = 0;

endcase

end

case语句的行为就好像每个项都是按顺序检查的。有某些输入(例如4'b1111)匹配多个条目,则选择第一个匹配项(因此4'b1111匹配第一个项,out=0,而不匹配后面的任何项)。 还有一个类似的casex,它将x和z都视为不在乎,此处不再介绍。 创建一Verilog模块,实现8bit信号输入的优先级编码器

输入格式

8'b10010000

输出格式

3'd4

示例代码

module top (
    input [7:0] in,
    output reg [2:0] pos  );

endmodule