You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 11:55:58