我最近开始使用旺盛的ctags和emacs来实现verilog&系统verilog编码和代码浏览。我目前使用命令
生成标签ctags -e -R --tag-relative=yes --langmap=verilog:.v.vh.sv.svh
我的代码包含很多`定义宏,这些宏都在某些头文件中指定,扩展名为“.vh”& “.svh”。对于例如名为 foo.vh 的头文件具有以下代码
`define WIDTH_ADDRESS 32;
并且文件 top.v 按如下方式调用宏
input [`WIDTH_ADDRESS - 1 : 0] InAddress;
在使用emacs浏览 top.v 文件时,有什么方法可以直接跳转到 foo.vh 文件中的宏定义?< / p>
我一直在使用M-x tags-search <RET> WIDTH_ADDRESS <RET>
一段时间,但在到达foo.vh文件之前,它会跳转到其他文件中的WIDTH_ADDRESS的其他几个实例。
经过一些研究,我确实看到了一个选项,可以在标签生成过程中使用-h
选项和ctags指定头文件。但是我无法让它工作,我想我的部分存在一些语法错误。
首先,使用-h
选项指定头文件有什么明显的好处?如果是这样,指定头文件的正确语法是什么?我也可以指定emacs在解析其他文件之前首先查看这些头文件(扩展名为“.vh”&amp;“。svh”的文件)(扩展名为“.v”&amp;“.sv”)
答案 0 :(得分:1)
-h选项的语法是-h .vh.svh
我不确定为什么ctags会选择`WIDTH_ADDRESS宏调用。如果多次定义WIDTH_ADDRESS,它应该选择所有定义,而不是调用。也许这是Verilog插件的一个问题。您始终可以编辑标签文件并删除不需要的条目。使用sed或perl脚本应该很容易。