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

时间:2018-05-02 17:27:13

标签: python system-verilog

我尝试使用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")

有什么建议吗?

1 个答案:

答案 0 :(得分:0)

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

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

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

编辑:
我强烈推荐this online regex tester。它解析您输入的任何正则表达式,并准确地告诉您如何评估它。