3

我遇到了优先级编码器设计,并发现了一种使用案例语句的新方法。唯一令人困惑的是,案例陈述是否优先考虑案例?例子:

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

在这里,如果我A按原样1111 Y给出,1000即它优先考虑第一个 case 语句。为什么会这样?

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 SYSTEMVERILOG 标准)

12.5.2 case 语句中
的常量表达式 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 关键字限定以执行某些违规检查。这些统称为优先案例、独特案例或独特案例。优先案例仅对第一个匹配项起作用。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项表达式与括号中给出的 case 表达式匹配,则应执行与该 case 项关联的语句。

于 2013-03-14T20:15:32.633 回答