priority case语句
一个priority case可能具有多个条件选项匹配
priority case语句指定:
- 至少有一个条件选项的值与条件表达式匹配
- 如果有多个条件选项的值与条件表达式匹配,必须执行第一个匹配分支
修饰符priority表示设计者认为两个或多个条件选择表达式可以同时为真,并且条件选项的顺序非常重要。
//设计者指定了中断请求信号译码顺序的优先级,
//irq0具有最高优先级always_combpriority case(1'b1)irq0:irq=4'b0001;irq1:irq=4'b0010;irq2:irq=4'b0100;irq3:irq=4'b1000;endcase
因为模型已经明确指出了必须按顺序对条件选项求值,所以如果多个条件选项匹配,所有的软件工具都会按照给出的编码优先级执行。
注意:综合编译器可能对条件选择项求值的优化与RTL代码
不同,即使使用了优先级条件
一些综合编译器如果发现条件选择项是互斥的,就很可能自动优化priority case语句来并行求值。
防止无意中产生锁存逻辑
priority case语句必须指明所有条件
当case、casex或casez语句使用priority修饰符后,在运行期出现的条件表达式的所有值都至少要和一个条件选项匹配。如果没有匹配的条件选项,工具会产生运行期警告。这样就保证了在case语句求值时,有且只要一个分支执行。即case语句组合逻辑实现,不会产生锁存器。