使用Python将系统verilog压缩数组转换为非压缩数组语法

2024-06-01 00:23:54 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试使用python regex将文本文件中的以下压缩数组行转换为非压缩数组行:

以下是文件内容:

inout [5:0]  IO_PMU_LED;

input [7:0]  PMU_DI_SCAN_IN_VCORE;
inout   [31:0]   PMU_DI_RIF_WR_DATA_VLP ;
output  [9:0]  PMU_DI_RIF_ADDR_VLP;
 input [5:0]  PMU_DI_LED_PAD_DRIVE_VALUE_VLP;
output   [5:0]  PMU_DI_LED_PAD_DRIVE_ENABLE_VLP;

以下是所需的输出:

inout IO_PMU_LED [5:0];
input PMU_DI_SCAN_IN_VCORE [7:0];
inout PMU_DI_RIF_WR_DATA_VLP [31:0];
output PMU_DI_RIF_ADDR_VLP [9:0];
input PMU_DI_LED_PAD_DRIVE_VALUE_VLP [5:0];
output PMU_DI_LED_PAD_DRIVE_ENABLE_VLP [5:0];

以下是我尝试过的代码,它与文件中的任何模式都不匹配:

with open ('input.txt', 'r' ) as f:
    print("Opening file:{}".format(f.name))
    content = f.read()
content_new = re.sub('^\s*(input|output|inout)\s+([\[\d:\d\]])\s+(\w+)\s*;', r'\1 \3 \2;', content, flags = re.M)
print("Finished replacing content")

有什么建议吗?你知道吗


Tags: 文件ioinputoutputscanled数组drive
2条回答

我设法清理了你使用的正则表达式:

content_new = re.sub('^\s*(input|output|inout)\s+(\[\d+:\d+\])\s+(\w+)\s*;', ...)

您在第二个捕获组的内容周围有一个额外的括号集,它只匹配集合中的一个字符。您在range语句中也没有处理多个数字,这意味着没有捕获[31:0]声明。你知道吗

编辑:
我强烈推荐this online regex tester。它解析您输入的任何正则表达式,并确切地告诉您如何计算它。你知道吗

相关问题 更多 >