Verilog-case、casez和casex的區別


參考博客:https://www.cnblogs.com/guolongnv/articles/6906929.html

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.

2、測試代碼

`timescale 1ns / 1ps
module case_compare(
    input[1:0] sel,
    output reg [1:0] y,
    
    input[1:0] z_sel,
    output reg [1:0] z_y,
    
    input[1:0] x_sel,
    output reg [1:0] x_y
    
    );

always @(*) begin
    case(sel)
        2'b00: y = 2'b00;
        2'b01: y = 2'b01;
        2'b1?: y = 2'b10;
        default: y = 2'b11;
    endcase
end

always @(*) begin
    casez(z_sel)
        2'b00: z_y = 2'b00;
        2'b01: z_y = 2'b01;
        2'b1?: z_y = 2'b10;
        default: z_y = 2'b11;
    endcase
end

always @(*) begin
    casex(x_sel)
        2'b00: x_y = 2'b00;
        2'b01: x_y = 2'b01;
        2'b1?: x_y = 2'b10;
        default: x_y = 2'b11;
    endcase
end


endmodule

1)前仿真波形

2)綜合后仿真波形

 

 

 對比波形可以看出來,case(不是casez/casex的時候)的index列表里面的x和z,都被綜合工具認為是不可達到的狀態就被去掉了。

casez和casex里面的x/z都被認為是don't care,所以綜合出的電路會是一致的。

3、使用建議

1)我們在寫代碼的時候如果用了case,那么就不要在index列表里面出現x/z/?,綜合工具認不出這些,都會當做don't care
2)casez和casex綜合的結果是一致的。
3)casez稍好用一些,因為它可以用來代表don't care的值
4)最重要的一點就是,casez和casex其實沒有孰優孰劣

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM