当前位置: 首页 > news >正文

芯片AI深度实战:进阶篇之vim内verilog实时自定义检视

【痛点】  
传统Verilog开发中,工程师不断"编码→仿真→查错"的循环。本文整合AST解析与Vim编辑器,在编码阶段即实现:  
✔️ 自动标记逻辑问题  
✔️ AI+ 发现涉及多模块逻辑错误 

✔️ 强制代码风格

【解决方案】  
1️⃣ 基于AST的精准模式匹配  
- 深度集成ast-grep与coc.nvim    
- 可视化错误标注 

2️⃣ 开箱即用的开发环境   
- my-language.so高性能解析器  
- 支持Verilog/SystemVerilog

【基础环境】  

1️⃣ vim + coc.nvim
- 安装

git clone https://github.com/neoclide/coc.nvim.git    ~/.vim/pack/others/start/ast-grep
- ~/.vimrc 配置

  :filetype on

" https://raw.githubusercontent.com/neoclide/coc.nvim/master/doc/coc-example-config.vim“可能需要 Vim(不是 Neovim),因为 coc.nvim 通过计数计算字节偏移量
” utf-8 字节序列
set encoding=utf-8
“某些服务器的备份文件存在问题,请参阅#649
set nobackup
set nowritebackup“更新时间过长(默认为 4000 毫秒 = 4 秒)会导致明显的
”延迟和糟糕的用户体验
set updatetime=300“始终显示符号列,否则每次都会移动文本
”诊断出现/得到解决
set signcolumn=yes

2️⃣ ast-grep
- 安装 

pip install ast-grep-cli

  sg --version 查看是否成功

【订阅即得】  
👉 文末附my-language.so下载链接(百度网盘)  

本文基于Editor Integration | ast-grep,以及coc.nvim,并基于以下verilog parser(my-language.so,文末下载链接), 可以在vim中实时显示自定义的verilog 匹配。效果图如下:

这个标记来自一个id为‘b‘的rule。它寻找always块。 rule在rules/x.yml中定义。

当然可以定义更复杂的规则。

除了rules,再设置sgconfig.yml以支持自定义的verilog语言。其中就要用到这个my-language.so库,库已经编好。开箱即用。

coc.nvim的设定中,也就是coc-settings.json中应该把ast-grep设置为lsp。这样vim内就可以实时的检查ast-grep定义的规则!

需要的配置如下:

大模型火了之后,有非常多的LLM 代码生成,编辑,和普通对话的开源vim/neovim插件,下面列了一下github上几乎所有的了。

但是,并不是各个都好用。其实star多的就那么几个,为什么呢,

从aider, cursor这些火的软件大概可以看出端倪。这两个软件都利用了AST来indexing或者map codebase。

这也是ast重要性的体现。

下面是aider的支持的语言列表,对verilog默认是不支持的。。

Supported languages | aider


如何添加对其他语言的支持
Aider 应该可以很好地支持其他语言,即使那些没有 repo map 或 linter 支持的语言也是如此。在假设它需要更好地支持您的语言之前,您应该尝试使用 aider 进行编码。

也就是说,如果 aider 已经支持对您的语言进行 linting,那么应该可以添加 repo map 支持。要构建 repo map,aider 需要给定语言的 tree-sitter 语法中的 tags.scm 文件。如果您可以在 GitHub 问题中找到并共享该文件,那么可能可以添加 repo map 支持。

http://www.lryc.cn/news/529596.html

相关文章:

  • 数据结构实战之线性表(一)
  • jdk8项目升级到jdk17——岁月云实战
  • 商品列表及商品详情展示
  • 使用where子句筛选记录
  • SQL Server查询计划操作符(7.3)——查询计划相关操作符(5)
  • C++中常用的十大排序方法之4——希尔排序
  • 扶摇计划--从失业的寒冬,慢慢的走出来
  • unity学习24:场景scene相关生成,加载,卸载,加载进度,异步加载场景等
  • [cg] 使用snapgragon 对UE5.3抓帧
  • 一元函数微积分的几何应用:二维平面光滑曲线的曲率公式
  • ISBN 号码——蓝桥杯
  • Spring Boot - 数据库集成06 - 集成ElasticSearch
  • 51单片机CLD1602显示万年历+闹钟+农历+整点报时
  • C++ 中的类(class)和对象(object)
  • 安卓通过网络获取位置的方法
  • 2025 年,链上固定收益领域迈向新时代
  • npm启动前端项目时报错(vue) error:0308010C:digital envelope routines::unsupported
  • 11.QT控件:输入类控件
  • deepseek核心技术:MLA架构-多头潜在注意力
  • 讯飞星火大模型API使用Python调用
  • C#面试常考随笔7:什么是匿名⽅法?还有Lambda表达式?
  • Elasticsearch:如何搜索含有复合词的语言
  • 【Numpy核心编程攻略:Python数据处理、分析详解与科学计算】1.25 视觉风暴:NumPy驱动数据可视化
  • idea maven本地有jar包,但还要从远程下载
  • C++编程语言:抽象机制:模板(Bjarne Stroustrup)
  • 深入解析 Linux 内核中的页面错误处理机制
  • 【AIGC专栏】AI在自然语言中的应用场景
  • Ubuntu 20.04安装Protocol Buffers 2.5.0
  • 解锁豆瓣高清海报(一) 深度爬虫与requests进阶之路
  • 计算机组成原理——数据运算与运算器(二)