#134. casez语句
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