verilog casez casex

1、基本概念

1)?表示z,而不是“dont care”

2)区分:

case语句的表达式的值有4中情况:0、1、z、x。4种是不同的,故表达式要严格的相等才可以操作分支语句。

casez语句中的表达式情况有三种:0、1、x。不用关心z,z可以和任何数值相等,即z =0.z= 1,z=x;

casex语句的表达式情况有二种:0、1.不用关心x和z。即x=z=0,x=z=1.

casex

module top (
    input               clk                     ,
    input               rst                     ,
    input   [3:0]       condition               ,
    output reg [3:0]    result                   
);
//实现查找4bit condition变量中第一个1的位置 
always@(posedge clk )begin
        casex(condition)
            4'bxxx1:  result <=   4'b0001;
            4'bxx10:  result <=   4'b0010;
            4'bx100:  result <=   4'b0100;
            4'b1000:  result <=   4'b1000;
            default:  result <=   4'b0000;
        endcase
end
endmodule

综合后

verilog casez casex_第1张图片

改为if-else

module top2 (
    input               clk                     ,
    input               rst                     ,
    input   [3:0]       condition               ,
    output reg [3:0]    result                   
);
//实现查找4bit condition变量中第一个1的位置 
always@(posedge clk )begin
        if(condition[0])      result <=   4'b0001;
        else if(condition[1]) result <=   4'b0010;
        else if(condition[2]) result <=   4'b0100;
        else if(condition[3]) result <=   4'b1000;
        else                  result <=   4'b0000;
end
endmodule

综合后

和用casex没区别
verilog casez casex_第2张图片

将条件位宽扩大

module top1 (
    input               clk                     ,
    input               rst                     ,
    input   [7:0]       condition               ,
    output reg [7:0]    result                   
);
//实现查找8bit condition变量中第一个1的位置 
always@(posedge clk )begin
        casex(condition)
            8'bxxxx_xxx1:  result <=   8'b1;
            8'bxxxx_xx10:  result <=   8'b10;
            8'bxxxx_x100:  result <=   8'b100;
            8'bxxxx_1000:  result <=   8'b1000;
            8'bxxx1_0000:  result <=   8'b1_0000;
            8'bxx10_0000:  result <=   8'b10_0000;
            8'bx100_0000:  result <=   8'b100_0000;
            8'b1000_0000:  result <=   8'b1000_0000;
            default:  result <=   8'b0000;
        endcase
end
endmodule

综合

verilog casez casex_第3张图片

结论

casex会综合出什么电路?
condition位宽越宽,综合出来的组合逻辑越多。

条件从2 3 …6,最大是LUT6,当条件多于6个,就得用两级组合逻辑实现。

你可能感兴趣的:(casex,casez,verilog)