一图看懂
z表示高阻态,x表示不定状态,因此在casex中对于x和z的位置不关注,只关注0-低电平和1-高电平的位置是否相同。
举例
在下面的代码中,如果对于给出的inst_i的高电平1以及低电平0和casex中相同,则将ALUop赋予对应的信号,相当于我们仅关心高低电平的位置信号是否一致
// Instruction Decode
always @ (*) begin
if (rst)
ALUop <= 5'b0;
else begin
casex (inst_i) // inst_i is a 32 bit input wire
32'bxxxxxxxxxxxxxxxxxxxxxxxxx1101111: ALUop <= 5'b10000; // jal
32'bxxxxxxxxxxxxxxxxx000xxxxx1100011: ALUop <= 5'b10001; // beq
32'bxxxxxxxxxxxxxxxxx100xxxxx1100011: ALUop <= 5'b10010; // blt
32'bxxxxxxxxxxxxxxxxx010xxxxx0000011: ALUop <= 5'b10100; // lw
32'bxxxxxxxxxxxxxxxxx010xxxxx0100011: ALUop <= 5'b10101; // sw
32'bxxxxxxxxxxxxxxxxx000xxxxx0010011: ALUop <= 5'b01100; // addi
32'b0000000xxxxxxxxxx000xxxxx0110011: ALUop <= 5'b01101; // add
32'b0100000xxxxxxxxxx000xxxxx0110011: ALUop <= 5'b01110; // sub
32'b0000000xxxxxxxxxx001xxxxx0110011: ALUop <= 5'b01000; // sll
32'b0000000xxxxxxxxxx100xxxxx0110011: ALUop <= 5'b00110; // xor
32'b0000000xxxxxxxxxx101xxxxx0110011: ALUop <= 5'b01001; // srl
32'b0000000xxxxxxxxxx110xxxxx0110011: ALUop <= 5'b00101; // or
32'b0000000xxxxxxxxxx111xxxxx0110011: ALUop <= 5'b00100; // and
default: ALUop <= 5'b0;
endcase
end
end
待补充
参考资料
【 Verilog HDL 】case, casez, casex 之干货总结