卢骏 · 2020年07月19日

system verilog变量定义编译失败

sv中,变量定义,要放在程序的最开头。比如如下:

1.png

这样,编译才能成功。但是如果,变量定义没有放在最前面,而是放到了赋值语句之后,就会编译报错:

2.png

VCS编译,就会出现如下错误:

image.png
irun编译,就会出现如下错误:
image.png
但是在看UVM源代码的时候,发现UVM中,定义一些宏的时候,会定义一些变量,那么宏在使用的时候,就会在代码的中间定义变量,也就是定义的变量没有定义在程序的最开始,但是,编译却不会报错,这又是为什么了?
3.png

如以上代码,定义了matched的局部变量。但是这个代码编译,是不会报错的。

通过测试,发现了如下的规律:

◾在1个代码块中,变量必须要定义在最前面。

◾代码块如果有嵌套,那么变量定义遵循自己所在的代码块的变量定义要求。

直接上代码:

4.png

如上代码,有3个代码块:

◾1是initial begin end包含的代码

◾2是if begin end包含的代码

◾3是else begin end包含的代码

每个代码块中,可以定义变量,但变量的定义,要在本代码块的最开始。否则就会出现编译失败。

变量i定义在1代码块的开始,编译不会失败,变量j是定义在2代码块的开始,因此编译不会失败。变量k是定义在3代码块的开始,因此编译也不会失败。

#### 更多相关阅读
svlib(5) – ini文件操作
svlib(3) – 文件操作
svlib(4) – 正则表达式

原文首发于骏的世界博客
作者:卢骏
更多IC设计相关的文章请关注IC设计极术专栏,每日更新。

推荐阅读
关注数
10967
内容数
1216
主要交流IC以及SoC设计流程相关的技术和知识
目录
极术微信服务号
关注极术微信号
实时接收点赞提醒和评论通知
安谋科技学堂公众号
关注安谋科技学堂
实时获取安谋科技及 Arm 教学资源
安谋科技招聘公众号
关注安谋科技招聘
实时获取安谋科技中国职位信息