Конвертируйте системный verilog упакованный массив в синтаксис распакованного массива, используя Python - PullRequest
0 голосов
/ 02 мая 2018

Я пытаюсь преобразовать ниже упакованные строки массива в текстовом файле в распакованный, используя 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 голосов
/ 02 мая 2018

Мне удалось очистить регулярное выражение, которое вы использовали:

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

У вас был дополнительный набор скобок, окружающих содержимое второй группы захвата, которое соответствует только одному символу в наборе. Вы также не обрабатывали более одной цифры в выражении диапазона, что означало, что объявление [31:0] не было захвачено.

EDIT:
Я настоятельно рекомендую этот онлайн тестер регулярных выражений . Он анализирует все введенные вами регулярные выражения и сообщает, как именно они будут оцениваться.

...