verilog语法,有关case语句

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了verilog语法,有关case语句相关的知识,希望对你有一定的参考价值。

请问各位有没有遇到这种情况,case里面是一个常数,而不是一个寄存器型变量?比如
case (1'b1)
IicSeq[0]: begin。。。。end

IicSeq[1]:begin .....end
endcase

其中licSeq是一个寄存器型变量。
这是一个同事写的代码,看不懂,这会综合出一个什么东西?

在这里不能以C语言的语法来理解这段逻辑,应该考虑case语句在verilog里面综合完之后生成的什么电路。
case语句是分支比较语句,也就是说,本质上就是case后面括号中的值与下面每个分支开头的值作比较,相同则执行。
看你在楼上的代码,因该是licSeq的哪一位等于1,就执行哪一个对应分支语句。
参考技术A case括弧内的表达式称为控制表达式,case分支项中的表达式称为分支表达式。
控制表达式通常表示为控制信号的某些位,分支表达式则用这些控制信号的具体状态值来表示,
因此分支表达式又可以称为常量表达式。所以我感觉这个代码估计不能实现吧,到时我测试下看看。追问

嗯,另一同事也这么认为,完整一点的代码如下:
parameter IicIdle1 = 3'b001;
parameter IicIdle2 = 3'b010;
case (1'b1)

IicSeq[0]:begin IicSeq<=IicIdle1...end;
IicSeq[1]:begin licSeq<=IicIdle2...end;
...

只把其中1位赋值为1.类似独热码状态机。

本回答被提问者和网友采纳
参考技术B 没见过。这能编译过去?追问

可以编译过去的,可以在FPGA里运行。
不过是2003年的同事写的代码,估计可能现在很少这么用。
详细内容请看上面的回答

请教delphi中有关case语句的用法

参考技术A case是个分支语句。就是按照case
...
of
中间的那个内容,对应是什么,就运行那个后面的语句。比如succ(sun)表示sun后面的那个元素,就应该是
mon
。然后case
mon
of,就是只运行mon后面的那个语句,也就是write('monday');然后就跳到end后面了。

以上是关于verilog语法,有关case语句的主要内容,如果未能解决你的问题,请参考以下文章

verilog中用if语句替换case D idea: one: two: three: end case

请教delphi中有关case语句的用法

Verilog的If语句和Case语句

case语句用法 case语句怎么用

Verilog语言中casecasexcasez的用法和区别

VERILOG中IF和CASE 语句的互换问题