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-18 14:00:51 浏览: 25
可以使用以下正则表达式来匹配这段Verilog代码中的模块实例化语句:
```
\w+\s*#\s*\(\s*(\.\w+\(\w+\),\s*)*\.\w+\(\w+\)\s*\)\s+\w+\s*\(\s*\.(\w+\(\w+\),\s*)*\.\w+\(\w+\)\s*\)
```
这个正则表达式可以匹配以下格式的模块实例化语句:
```
por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out))
```
其中,`\w+`表示匹配一个或多个字母或数字,`\s*`表示匹配0个或多个空白字符,`#\s*\(`表示匹配 `#(`,`(\.\w+\(\w+\),\s*)*`表示匹配多个 `.` 开头的参数连接语句,`\.\w+\(\w+\)`表示匹配一个参数连接语句,`\)`表示匹配 `)`,`\w+\s*\(`表示匹配模块名,`\.(\w+\(\w+\),\s*)*\.\w+\(\w+\)`表示匹配多个端口连接语句,其中 `\.\w+\(\w+\)` 表示匹配一个端口连接语句。
相关问题
Python正则表达式识别Verilog中带有参数实例化的子模块,代码:por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out))
可以使用如下的正则表达式来匹配Verilog中带有参数实例化的子模块:
```
\w+\s+#\(\.\w+\(\w+\),\s*\.\w+\(\w+\)\)\s+\w+\s*\(\s*\.(\w+)\(\w+\),\s*\.(\w+)\(\w+\),\s*\.(\w+)\(\w+\),\s*\.(\w+)\(\w+\)\s*\)
```
其中:
- `\w+` 匹配子模块的类型名称
- `#\(` 匹配参数列表的开头
- `\.(\w+)\(\w+\)` 匹配每个参数的名字和值
- `\s+\w+\s*\(` 匹配子模块的名称
- `\.(\w+)\(\w+\)` 匹配子模块的输入输出端口
在上面的Verilog代码中,使用这个正则表达式可以匹配到以下内容:
- `por #(.FIFO_WIDTH(FIFO_WIDTH), .DATA_WIDTH(DATA_WIDTH)) u_fifo(.clk(clk), .reset(reset), .data_in(data_in), .data_out(data_out))`
- `FIFO_WIDTH`
- `DATA_WIDTH`
- `clk`
- `reset`
- `data_in`
- `data_out`
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)),
可以使用下面的正则表达式来识别带有参数实例化的子模块:
```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 个或多个空格;
- `.*?`:匹配任意数量的字符,但尽可能少地匹配,直到下一个表达式可以匹配;
- `\)`:匹配 `)`。
相关推荐
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![rar](https://img-home.csdnimg.cn/images/20210720083606.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)