Verilog模块内调用$strobe打印其他模块输出报语法错误求解
问题原因
$strobe属于Verilog的过程性语句,语法要求这类语句必须放在initial、always这类过程块内部,不能直接写在模块的顶层作用域(也就是和模块实例化、信号声明同级的位置)。你直接把$strobe语句放在ibq模块的顶层作用域,不符合语法规则,所以编译器抛出了语法错误、无效模块项的提示。
你之前写在get_quantizer_output模块里的$strobe没有报错,正是因为那些语句都放在了always @(*)的过程块内部,符合语法要求。
解决方法
如果需要打印cluster_index_out的值,把$strobe放到合法的过程块里即可,常用写法参考:
// 写在ibq模块内部,和现有实例化语句同级 // 方案1:时钟沿触发打印,适合时序逻辑调试 always @(posedge clk) begin $strobe("cluster_index_out is %d", cluster_index_out); end // 方案2:信号变化就打印,适合组合逻辑调试 // always @(*) begin // $strobe("cluster_index_out is %d", cluster_index_out); // end
内容的提问来源于stack exchange,提问作者Usman Sajid
相关产品推荐
相关产品推荐

