目录
专栏前言
最近在看《Verilog编程艺术》,里面引用了很多 Cliff Cummings 的文章。Cliff Cummings是著名的Verilog专家,也是Verilog standard的制定者之一。我在阅读这些文章的过程中也对Verilog有了许多新的理解。为了把这些新的理解分享出来,也为了便于自己以后回来复习,我会新开一个Verilog专栏,把我在阅读文章过程中的新发现和新理解写在这个专栏里。
一. 摘要
case语句可谓是Verilog中使用的最多的语句之一。然而,大多数人在使用时可能并没有好好想过语句综合出的电路是怎样的。本文从rtl角度和synthesis角度出发,详细分析了在各种情况下case语句可能综合出的不同电路。
二. 语句形式
在 Verilog 中,case 语句就是所有包含在 case 和endcase 之间的代码(也包括 casex 和 casez),逻辑上等价于if - else if 语句,如下所示:
case (case expression)
case_item1: case_item_statement1;
case_item2: case_item_statement2;
case_item3: case_item_statement3;
case_item4: case_item_statement4;
default: case_item_statement5;
endcase
等价于:
if(case_expression == case_item1)
case_item_statement1;
else if(case_expression == case_item2)
case_item_statement2;
else if(case_expression == case_item3)
case_item_statement3;
else if(case_expression == case_item4)
case_item_statement4;
else
case_item_statement5;
case语句的执行过程如下: