Emacs开发verilog时,如何提供像verdi的信号追踪、显示拓扑等功能?

Vim有一款vtags插件,提供verilog/VHDL的设计代码的类似verdi的信号追踪、显示拓扑等功能。 vtags - verdi like, verilog code signal trace and show topo script : vim online 根据官方介绍,vtags插件完全使用python实现,目前实现了在vim下对verilog设计进行信号追踪、宏定义追踪、显示模块拓扑、快速打开文件、保存和打开vim快照、添加断点等功能。

  1. 请问在Emacs能实现类似功能嘛?
  2. 看了Vim插件的源文件,比较简单,如果想要移植到Emacs,请问该如何入门来做?我是Emacs小白,目前还在摸索使用Emacs的verilog mode。欢迎指教

这个吗? GitHub - dalance/svls: SystemVerilog language server

1 个赞

有大侠可以把svls 和svlangserver加到lsp-bridge里吗

多谢懒猫大神推荐,这个应该是做语法检查flycheck和补全company的吧。功能还是不一样的。 我提到的vim插件,主要的功能是可以自动追踪信号,就是能找到信号被赋值的过程(比如a->b->c->d),一直追踪下去,即使跨文件也能追到。

同求,我现在用flycheck做语法检查,用company做补全,总是卡卡的

哦,不懂呀,看来推荐错了,哈哈哈哈

使用emacs写HDL的人应该很少,如果是emacs小白(其实我也是)我建议还是使用类似vivado的专业工具吧,之前写用vscode装了插件也还是很难用(虽然vivado编辑体验和屎一样) 如果真要移植先学Elisp,从入门到写出插件应该需要一段时间 或者问问verilog mode的维护者

这里是svlangserver的官网配置:GitHub - imc-trading/svlangserver

在lsp-mode, eglot下用没问题:

(use-package lsp-verilog
  :if (and (featurep 'lsp-mode)
           (executable-find "svlangserver"))
  :straight nil
  :custom
  ((lsp-clients-svlangserver-launchConfiguration "/tools/verilator -sv --lint-only -Wall")
   (lsp-clients-svlangserver-formatCommand "/tools/verible-verilog-format"))
  :hook (verilog-mode . lsp-deferred))

(use-package verilog-mode
  :if (and (featurep 'eglot)
           (executable-find "svlangserver"))
  :hook
  (verilog-mode . (lambda ()
                    (add-to-list 'eglot-server-programs '(verilog-mode . ("svlangserver")))
                    (eglot-ensure)))
  :custom
  (eglot-workspace-configuration . (:svlangserver (:settings (:systemverilog.launchConfiguration: "/tools/verilator -sv -Wall --lint-only",
                                                              :systemverilog.formatCommand: "/tools/verible-verilog-format")))))

但是不知道如何转到lsp-bridge的json, 下面的配置可以启svlangserver,但是没有语法检查。还请高人指点。

{
    "name": "verilog",
    "languageId": "systemverilog",
    "command": [
        "svlangserver"
    ],
    "settings": {
        "systemverilog.launchConfiguration": "/tools/verilator -sv -Wall --lint-only",
        "systemverilog.formatCommand": "/tools/verible-verilog-format"
    }
 }

settings 是不是要用 svlangserver 包一层? 你吧 lsp-mode 或 eglot 的 log 打开,看初始化的通信怎么写的。

对, lsp-mode log 打开, 它不管怎么设置, 最终都会给 LSP Server 发送可以工作的 json 格式, 这样就知道少哪些选项了, 知道差哪些就很容易移植到 lsp-bridge

想起来了,当时我也有想过把它在lsp-bridge里用起来,但是看到不支持verification constructs,就放弃了。。。