SystemVerilog中$system调用awk命令报右括号缺失错误的解决咨询
问题原因与修复方案
错误原因
SystemVerilog里$system的参数是双引号包裹的字符串,但你在awk命令内部直接用了双引号,这会让SystemVerilog误以为字符串提前闭合。比如第一个print "0000..."里的双引号会被解析为整个$system参数字符串的结束标记,剩下的代码就成了无效语法,自然触发expecting a right parenthesis报错。
修复方法
有两种常用方式解决双引号嵌套的问题:
方案1:转义内部双引号
在SystemVerilog的双引号字符串里,用反斜杠\转义awk命令里的双引号,让它们被当成字符串的一部分传递给awk:
$system("awk '{print \"00000000000000000000000000000000\"; print \"00000000000000000000000000000000\"; print \"00000000000000000000000000000000\"; print \"00\"$1\"0000000000000000000000\"}' input.hex > output.hex");
方案2:替换awk内部字符串为单引号
awk支持用单引号定义字符串,这样可以避免双引号嵌套冲突。SystemVerilog里要在双引号字符串中插入单引号,需要用'\''的写法(闭合当前字符串→插入单引号→重新开启字符串):
$system("awk '{print '\''00000000000000000000000000000000'\''; print '\''00000000000000000000000000000000'\''; print '\''00000000000000000000000000000000'\''; print '\''00'\''$1'\''0000000000000000000000'\''}' input.hex > output.hex");
预期输出
修复后执行代码,output.hex会生成符合要求的内容:
00000000000000000000000000000000 00000000000000000000000000000000 00000000000000000000000000000000 00ABCDABCD0000000000000000000000
内容的提问来源于stack exchange,提问作者din ohayon
相关产品推荐
相关产品推荐

