今天自己在使用verilog mode的过程中,遇到两个信号需要屏蔽掉auto output的功能,中间遇到了一些问题,作下记录。
在 verilog-mode 工具中,如果你想同时忽略两个输出(比如含有 avgsnr 和 cursnr 的自动生成的 output),可以利用正则表达式的过滤功能,通过配置 verilog-mode 的 auto output 生成规则来达到这个目的。
具体步骤如下:
1. 修改 verilog-auto 的输出规则
verilog-mode 中,verilog-auto 负责自动生成信号声明。如果你希望忽略特定信号的输出,可以在 verilog-mode 的配置中通过正则表达式或者手动调整自动生成的代码。
2. 通过 verilog-auto-output-ignore-regexp 进行过滤
在 verilog-mode 中,你可以设置 verilog-auto-output-ignore-regexp 这个变量,指定要忽略的输出信号。这个正则表达式会匹配并忽略那些自动生成的 output。
假设你希望忽略含有 avgsnr 和 cursnr 的输出,可以通过以下步骤实现:
配置 verilog-auto-output-ignore-regexp:
-
打开
~/.emacs或者~/.emacs.d/init.el(或者直接在gvim的:Emacs模式下配置)。 -
添加以下配置:
(setq verilog-auto-output-ignore-regexp "\\(avgsnr\\|cqi_1x1\\)")\\( ... \\| ... \\)是正则表达式中的“或”运算符,表示忽略avgsnr或cursnr的输出。- 这段代码设置了一个正则表达式,自动忽略所有与
avgsnr或cursnr匹配的 output。
-
保存配置并重新加载
verilog-mode。
3. 如何使用
每次你使用 verilog-mode 的 verilog-auto 功能时,它会自动根据你的设置忽略输出信号中包含 avgsnr 和 cursnr 的项。
4. 手动编辑(如果需要)
如果你想手动控制哪些 output 被忽略,也可以直接在 Verilog 文件中注释掉自动生成的 output 声明,或者在 AUTOOUTPUT 块中移除不需要的信号。
总结
通过设置 verilog-auto-output-ignore-regexp,你可以在 verilog-mode 中自动忽略含有 avgsnr 和 cursnr 的 output。正则表达式将控制这些输出在自动生成时被跳过。
需要两个"\"的原因
在很多编程语言和工具(比如 Emacs、Verilog-mode)中,两个反斜杠 (\\) 是用来转义特殊字符的。这里的 \\ 实际上代表一个单一的反斜杠 (\)。
原因解析:
-
反斜杠是转义字符:
反斜杠\是正则表达式和编程语言中的转义字符,它用于表示特殊含义的符号。例如,\(表示左括号(在正则表达式中有特殊意义(表示分组)。 -
编程语言中的转义机制:
在某些编程语言(如 Python、Emacs Lisp)中,反斜杠\也被用作字符串转义符。例如,如果你在字符串中写\n,它代表换行符,而不是字面意义上的两个字符\和n。因此,如果你想在这些语言中使用字面上的反斜杠
\,需要使用两个反斜杠\\来进行转义。这样,编译器或解释器在处理时会将两个反斜杠识别为一个实际的反斜杠。
在正则表达式中的双反斜杠:
-
\(和\):在正则表达式中表示分组,但在编程语言或工具的字符串中,必须写作\\(和\\),因为第一个反斜杠是对第二个反斜杠的转义,实际传递给正则表达式引擎的还是\(和\)。 -
\|:表示“或”逻辑,同样的道理,在需要转义反斜杠的语言或工具中,你必须写成\\|来表示实际的\|。
举个例子:
假设你在 Emacs 中使用正则表达式搜索,你想匹配分组和“或”逻辑,比如 (avgsnr|cursnr)。因为 Emacs 的正则表达式中 () 和 | 有特殊含义,你必须用 \( 来表示分组,用 \| 来表示“或”。
但是,在 Emacs 的 Lisp 配置中,你需要写作:
"\\(avgsnr\\|cqi_1x1\\)"
在这个例子中:
\\(是实际的正则表达式中的\(,表示分组。\\|是正则表达式中的\|,表示“或”。\\)是正则表达式中的\),表示分组结束。
819

被折叠的 条评论
为什么被折叠?



