SystemVerilog中program块内创建动态数组报错求助
SystemVerilog Program块中动态数组初始化报错原因及解决方法
报错原因分析
你遇到的语法错误根源在于SystemVerilog的program块不允许直接在块级域中编写过程性语句。new[10]是动态数组的内存分配操作,属于过程性语句,必须包裹在initial或final这类过程块内部执行。
直接将a = new[10];写在program块的顶层(未放入过程块)时,编译器会将其识别为非法语法——因为program块的顶层仅允许变量声明、任务/函数定义,以及initial/final过程块的定义,不能直接放置执行语句。
修正后的代码
将动态数组的分配操作放入initial块内即可解决问题:
program test(); logic [7:0] a[]; initial begin a = new[10]; end endprogram
补充说明
program块是SystemVerilog专为验证环境设计的顶层块,其执行语义与module块类似,但对顶层语句的要求更严格。所有需要在仿真过程中执行的操作,都必须放在initial(仿真启动时执行)或final(仿真结束前执行)过程块中,这是语法规范的硬性要求,VCS等主流编译器都会严格校验这一点。
内容的提问来源于stack exchange,提问作者garails
相关产品推荐
相关产品推荐

