Python正则表达式识别Verilog中带有参数实例化的子模块,verilog代码:por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out)),
时间: 2024-02-19 10:58:24 浏览: 167
可以使用下面的正则表达式来识别带有参数实例化的子模块:
```python
import re
verilog_code = "por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out))"
pattern = r"\b\w+\s*\#\s*\(.*?\)\s*\w+\s*\(\s*.*?\s*\)"
match = re.search(pattern, verilog_code)
if match:
print(match.group())
```
输出结果为:
```
por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out))
```
该正则表达式的含义是:
- `\b\w+\b`:匹配子模块名;
- `\s*\#\s*\(`:匹配 `#(`,其中 `\s*` 表示可以有 0 个或多个空格;
- `.*?`:匹配任意数量的字符,但尽可能少地匹配,直到下一个表达式可以匹配;
- `\)`:匹配 `)`;
- `\s*\w+\s*\(`:匹配端口名,其中 `\s*` 表示可以有 0 个或多个空格;
- `.*?`:匹配任意数量的字符,但尽可能少地匹配,直到下一个表达式可以匹配;
- `\)`:匹配 `)`。
阅读全文