尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
gvim快捷键声明wire和reg
摘要在verilog的编写中可能存在很多的wire和reg需要去声明。gvim中的verilog-mode插件对于写的组合或者时序逻辑这部分的支持貌似并不好。可以使用gvim的快捷键做辅助对这部分进行快捷声明。步骤1在.vimrc中复制如下代码并source Verilog declare: append aligned jump Assumption: one signal per line(wire/reg/input/output xxx;) Keys: leaderdw : declare wire under /*AUTOWIRE*/ leaderdr : declare reg under/*AUTOREG*/ leaderdi : declare input under /*autoinput*/ leaderdo: declare output under/*autooutput*/if!exists(g:verilog_decl_name_col)let g:verilog_decl_name_col 13 Signal name start column (1-based) endif if !exists(g:verilog_decl_indent) let g:verilog_decl_indent indent string: or\tendiffunction!s:FindMarker(marker)abortreturnsearch(\c\/\*\s*.a:marker.\s*\*\/,nw)endfunctionfunction!s:AlreadyDeclared(name)abort 全局上下搜索支持 wire/reg/input/output let pat ^\s*\%(wire\|reg\|input\|output\)\\s*\%(\[[^]]\\]\s*\)\?\ . escape(a:name, \) . \\s*; return search(pat, n) 0 || search(pat, bn) 0 endfunction function! s:PadToNameCol(keyword) abort let name_col get(g:, verilog_decl_name_col, 13) let prefix g:verilog_decl_indent . a:keyword . let spaces name_col - strlen(prefix) return repeat( , spaces 1 ? 1 : spaces) endfunction function! s:IsOnePerLineDecl(kind, line) abort return a:line ~# ^\s* . a:kind . \\s*\%(\[[^]]\\]\s*\)\?\h\w*\s*;\s*$ endfunction function! s:FindInsertAfterDeclBlock(anchor, kind) abort let lnum a:anchor 1 let last a:anchor while lnum line($) let txt getline(lnum) if SIDIsOnePerLineDecl(a:kind, txt) let last lnum let lnum 1 continue endif break endwhile return last endfunction function! s:Declare(marker, kind) abort let name expand(cword) if empty(name) echoerr No identifier under cursor return endif if SIDAlreadyDeclared(name) echom Already declared: . name return endif let anchor SIDFindMarker(a:marker) if anchor 0 echoerr Marker not found:/* . a:marker . */(case-insensitive) return endif let prefix g:verilog_decl_indent . a:kind let newline prefix . SIDPadToNameCol(a:kind) . name . ; let insert_after SIDFindInsertAfterDeclBlock(anchor, a:kind) call append(insert_after, newline) 光标跳到新行定位到信号名 let target_lnum insert_after1 call cursor(target_lnum,1)let name_start strlen(prefix.SIDPadToNameCol(a:kind))1 call cursor(target_lnum,name_start)endfunction nnoremap leaderdw :call SIDDeclare(autowire,wire)CR nnoremap leaderdr :call SIDDeclare(autoreg,reg)CR nnoremap leaderdi :call SIDDeclare(autoinput,input)CR nnoremap leaderdo:call SIDDeclare(autooutput,output)CR 可选一键插入标记映射 nnoremap leadermw :call append(line(.)1,/*AUTOWIRE*/)CR nnoremap leadermr :call append(line(.)1,/*AUTOREG*/)CR nnoremap leadermi:call append(line(.)1,/*autoinput*/)CR nnoremap leadermo :call append(line(.)1,/*autooutput*/)CR需要在verilog的.v文件中存在/*autowire*/和/*autoreg*/。module top ( input clk, input rst_n, input a, input b ); /*autowire*/ /*autoreg*/ always (*) begin comb_sum a ^ b; end always (posedge clk or negedge rst_n) begin if (!rst_n) q 1b0; else q comb_sum; end endmodule在要声明的wire信号光标出按下\dw,在要声明的reg信号光标处按下\dr。/*autowire*/ wire comb_sum; /*autoreg*/ reg q;效果如上。缺点在产生的声明中不会有位宽的识别每次产生声明后光标会自动跳转到声明行可以手动补齐位宽。
RELATED

相关推荐

如何免费听遍全网歌曲:LX Music 五音源聚合搜索、批量下载与定制播放完整教程

如何免费听遍全网歌曲:LX Music 五音源聚合搜索、批量下载与定制播放完整教程

如何免费听遍全网歌曲:LX Music 五音源聚合搜索、批量下载与定制播放完整教程 【免费下载链接】lx-music-desktop 一个基于 Electron 的音乐软件 项目地址: https://gitcode.com/GitHub_Trending/lx/lx-music-desktop LX Music 是基于 Electron 与 Vue 3 的开…

📅 2026/10/22 17:18:50
搭建机器人仿真资产库:V2D Challenge的GLB纹理网格与URDF文件完整使用指南

搭建机器人仿真资产库:V2D Challenge的GLB纹理网格与URDF文件完整使用指南

【免费下载链接】video_to_data_challenge 项目地址: https://ai.gitcode.com/hf_mirrors/nvidia/video_to_data_challenge 点击查看 免费下载 V2D Challenge(Video to Data Challenge)是 NVIDIA 推出的机器人操作基准数据集,内置…

📅 2026/10/22 17:13:50
MySQL:每个查询的定义与用法

MySQL:每个查询的定义与用法

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

📅 2026/10/22 17:13:50
MORE NEWS

更多资讯

📰

电厂DCS数据接入与LSTM燃烧优化实战路径

简介:本资源是一份面向电力行业从业者、数字化转型规划人员及能源信息化建设工程师的电厂数字化转型系统性实施方案,聚焦解决传统电厂在运营效率、能耗管控、安全预警与绿色低碳发展中的核心痛点。文档为单文件Word格式(.doc)&…

📰

浅析C/C++中动态链接库的创建和调用

前言 动态链接库(dynamic link library,DLL)是 Windows 上把可执行代码拆分成独立模块的机制。它的价值在于:多个程序可以共享同一份代码、库可以独立升级而不必重新链接主程序、插件式架构可以在运行期决定加载哪个模块。Linux 和…

📰

数字工厂PPT不是汇报材料,而是可执行的技术契约

简介:本资源是一份面向制造业数字化转型从业者、企业IT规划人员及工业自动化工程师的《数字工厂规划蓝图报告》PPT,系统梳理了数字化工厂从需求分析、蓝图设计到实施落地的全周期方法论。报告共69页,涵盖项目整体进度管理、六大核心专业&…

📰

浅谈C++ 容器查找效率

前言 「哪个容器查找最快」是 C 里最容易被一句话回答、也最容易被这句话误导的问题。教科书式的答案是「unordered_map 是 O(1),map 是 O(log n),vector 是 O(n)」,但真实程序里的差异往往来自常数因子、内存布局与数据规模,而不…

📰

6G太赫兹信道建模:从物理约束到可复现CIR生成

简介:本资源是一份面向通信工程高年级本科生、研究生及6G前沿研究者的专业技术综述文档,聚焦6G无线信道建模这一核心基础问题,系统梳理全频谱(毫米波/太赫兹/光波段)、全场景(卫星、无人机、海洋、水声、高…

📰

【Java】线程初阶 中

线程安全线程不安全//定义静态共享变量count , t1和t2两个线程会同时操作这同一个变量private static int count0;public static void main(String[] args) throws InterruptedException {//创建线程1Thread t1new Thread(()->{//循环5000次,每次对count执行自增…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬