3

プライオリティエンコーダの設計に出くわし、caseステートメントを使用してそれを行う新しい方法を見つけました。紛らわしいのは、caseステートメントがcaseを優先するかどうかだけです。例:

case(1'b1)                                
  A[3]: Y<=4'b1000;             
  A[2]: Y<=4'b0100;  
  A[1]: Y<=4'b0010;  
  A[0]: Y<=4'b0001;  
  default:Y<=4'b0000;
endcase

ここで、私がgetsAとして与える場合、つまり、最初のcaseステートメントが優先されます。なんでそうなの?1111 Y1000

4

2 に答える 2

11

これをリファクタリングします:

casez(A)                                
  4'b1???: Y<=4'b1000;             
  4'b01??: Y<=4'b0100;  
  4'b001?: Y<=4'b0010;  
  4'b0001: Y<=4'b0001;  
  default: Y<=4'b0000;
endcase

そうすれば、優先順位を気にする必要はありません。各試合は一意です。

IEEE Std 1800-2009(IEEE STANDARD FOR SYSTEMVERILOG)から

12.5.2caseステートメント
の定数式case_expressionには定数式を使用できます。定数式の値は、case_item_expressionsと比較されます。

次の例は、3ビットプライオリティエンコーダをモデル化することによる使用法を示しています。

logic [2:0] encode ;

case (1)
  encode[2] : $display("Select Line 2") ;
  encode[1] : $display("Select Line 1") ;
  encode[0] : $display("Select Line 0") ;
  default $display("Error: One of the bits expected ON");
endcase

12.5.3 unique-case、unique0-case、およびpriority-case
case、casez、およびcasexキーワードは、priority、unique、またはunique0キーワードで修飾して、特定の違反チェックを実行できます。これらはまとめて、priority-case、unique-case、またはunique0-caseと呼ばれます。優先ケースは、最初の試合にのみ作用します。unique-caseとunique0-caseは、重複するcase_itemsがないため、case_itemsを並行して評価しても安全であると主張します。

..。

priority casez(a) // values 4,5,6,7 cause a violation report 
  3’b00?: $display("0 or 1");
  3’b0??: $display("2 or 3");
endcase

ただし、優先ケースステートメントが合成ツールでどの程度サポートされているかはわかりません。

于 2013-03-14T20:07:09.477 に答える
7

はい、順序に基づいて優先順位があります。Verilog-2001仕様によると、セクション9.5:

ケースアイテムの表現は、与えられた正確な順序で評価および比較されるものとします。線形探索中に、case項目式の1つが括弧内に示されているケース式と一致する場合、そのケース項目に関連付けられたステートメントが実行されます。

于 2013-03-14T20:15:32.633 に答える