还在使用FPGA开发环境自带的代码编辑器?还在逐个字母敲击冗长重复的代码?明德扬至简设计法让你快速提高代码编写效率!利用GVIM这一高效的编辑工具并添加自定义模板,通过简短的脚本命令即可自动生成所有常用的逻辑块。

  先来说说WIN系统下VIVADO和quartusII绑定GVIM作为默认代码编辑器的方法:

1 VIVADO:IDE上方主菜单栏Tools ->Options ,选择General项,点击Text Editor右侧“...”按钮。在弹出的Custom Editor Definition 下方的Editor空白内填写xxx /gvim.exe [file name] :[line number] 按下OK退出即可。其中xxx为GVIM软件安装路径。

2 quartusII:同样选择菜单栏中Tools ->Options  

  选择左侧的Preferred Text Editor,1处选中下拉菜单中Vim,并点击2处右侧“...”按钮找到GVIM的安装目录。最后点击OK退回。

  在FPGA设计中一个个复杂的模块均由接口定义、信号定义、时序逻辑和组合了逻辑块等部分组成,因此将代码划分成几种类型的模块,以统一的代码风格通过简短的脚本语言调用可以很大程度提高设计效率,实现“填空式”设计!以下是脚本自动生成代码示例,括号中为根据规定格式的参数输入。

1 计数器

  计数器是FPGA实现时序的基本单元,比如数据帧处理,串并转换等均要用到。命令模式下输入<:Mdyjsq > (注意<>不用输入,加尖括号只是为了与文字区分开) 按下回车自动生成如下计数器模块,连相关的信号定义也可自动生成。

  再次输入同样的命令,会产生另一个计数器模块,同时cnt后编号依次递增,对于需要多个计数器嵌套使用的场合非常实用。

  但如果想自定义定义计数器名称怎么办?难道要手动修改么?例如需要对din_vld这一信号进行计数,计10个一循环。命令模式下输入

<:call MDYJSQ("cnt_din","din_vld",10)>,按下回车生成如下代码。

  格式为call MDYJSQ("计数器名称","加1条件",计数个数)。该模板加1条件和计数个数是可选参数,但建议输入脚本时添加,这样有助于在编写代码之前,思考好计数器最重要的两个要素:加1条件和计数个数。

2 状态机

  较为复杂的时序逻辑中,经常需要状态机与计数器配合使用。如有如下状态转移图:

在命令模式下输入<:call MDYZTJ(3,"IDLE","S1","S2",12,23,31)>,按下回车生成明德扬四段式状态机。

  在生成的框架中添加状态转移条件和相应状态输出。命令格式为call MDYZTJ(状态个数,"状态1名称","状态2名称",...,跳转条件1,跳转条件2,...)

3 always逻辑块

  在逻辑设计中,最常用的就是always时序逻辑块,其内部通过多个if else语句区分不同的情况。当要产生信号dout逻辑且在两种情况下需要赋予不同的值时,命令模式下输入<:call MDYSHIXU("dout",2)>,按下回车生成如下代码。格式为call MDYSHIXU("信号名称",情况个数)

  当然也少不了组合逻辑块,可以很方便地做到连续立即更新信号数值。插入模式下输入<Zuhe> 按下回车:

4 接口与信号定义

  除了核心代码外的信号定义和接口定义同样可以快速生成。如数据包处理模块要输入位宽为8bit的数据包。根据至简设计法命名规范,在命令模式下输入

<:call MDYINPUT(“din_sop”,1, “din_eop”,1, “din”,8, “din_vld”,1) > 回车

  格式为call MDYINPUT("输入接口信号1名称",信号1位宽,"输入接口信号2名称",信号2位宽) 同理,output,reg类型信号,wire类型信号生成方式和格式与input一致。

  有了上述生成代码的脚本命令,对设计人员的帮助不然而喻。接下来通过GVIM工具常用快捷键操作示例,进一步体会什么叫效率!

1.补全命令

  在插入模式,输入din_之后按下<ctrl+p>补全命令,可以快速根据当前文件中已有符号进行补全。有多个符号匹配时可自行选择。

2.跳转命令

  命令模式下,按下<gg>会跳转到当前文件头,按下<G>跳转到文件尾(再也不用不停地滚动鼠标滚轮了)。

3.搜索命令

  命令模式下,在想要找出同样符号位置的符号上按下*键,所有该符号出现位置自动高亮。调试起来很方便。

  当要查找一个已知名称符号时,命令模式下输入</xxx> 直接找到所有xxx符号位置。上述两种搜索命令均可使用<n>跳转到下一个高亮位置,<N>跳转到上一位置。

4.删除复制命令

  复制N整行:命令模式下,光标在一行头位置输入yy,将光标移到欲粘贴位置上一行任意处,按下p即可在下一行粘贴所复制内容。可在yy前加数字表示要从当前行开始向下复制行数。

5.保存退出

  命令模式下,输入<:w xxx.y> 回车为以特定文件名和文件格式保存文件。输入<:wq> 回车保存当前文件退出。

6.替换命令

  全文件替换:命令模式下,输入<:%s/xx/yy/gc> 回车把当前文件所有xx可选择替换成yy,逐个按下y确认替换,按下n否定替换。

  范围替换:命令模式下,输入<:n,ms/xx/yy/gc>回车把n到m行所有xx可选择替换成yy,以相同方式确认。

  如将5到22行clk替换成clk_tx:命令模式下,输入<:5,22s/clk/clk_tx/gc> 回车

  灰色为当前待替换位置,按下<y>或<n>逐一确认。

7.列操作模式

  在编写testbench时,要例化待测试模块。这是复制待测试模块中以下部分。

  a.鼠标选中待删除区域,按下<ctrl+q>进入列选模式。b.按下delete直接删除,之后用tab键在每行前流出空白。c.命令模式下,输入<ctrl+q>进入列操作模式,通过<j><k><h><l>(下 上 左 右)键选择欲编辑区域。d.输入大写字母“I”,再输入想要列插入符号“.”,最后按下Esc键退出完成列插入。以同样方式插入每行后()

 

  合理规范的代码是设计成功关键,通过上述一个个简短便于记忆的脚本命令,可以让设计人员从低级重复性的工作中解脱出来,将时间花在“刀刃”上。从代码搬运工变成专注于功能算法的设计师,让解答题变成填空题,从此开始!

GVIM与模板——让FPGA开发变得更简单的更多相关文章

  1. spring 第一篇(1-1):让java开发变得更简单(下)

    切面(aspects)应用 DI能够让你的软件组件间保持松耦合,而面向切面编程(AOP)能够让你捕获到在整个应用中可重用的组件功能.在软件系统中,AOP通常被定义为提升关注点分离的一个技术.系统由很多 ...

  2. spring 第一篇(1-1):让java开发变得更简单(下)转

    spring 第一篇(1-1):让java开发变得更简单(下) 这个波主虽然只发了几篇,但是写的很好 上面一篇文章写的很好,其中提及到了Spring的jdbcTemplate,templet方式我之前 ...

  3. spring 第一篇(1-1):让java开发变得更简单(上)

    1.释放POJOS能量 传统开发中是如何束缚POJOS呢,如果你开发过java很长时间,那你一定有接触过EJB的开发.那时候开发一个小小的功能都要扩展框架的类或者实现其接口.所以你很容易在早期的Str ...

  4. .net敏捷开发框架 力软敏捷开发(learun) 让开发变的更简单

    版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471

  5. .net敏捷开发框架 力软(learun) 让开发变的更简单

    版本:6.1.6.2 体验地址:www.fishcmonkey.com 联系QQ:6539471

  6. 深入解析 Kubebuilder:让编写 CRD 变得更简单

    作者 | 刘洋(炎寻) 阿里云高级开发工程师 导读:自定义资源 CRD(Custom Resource Definition)可以扩展 Kubernetes API,掌握 CRD 是成为 Kubern ...

  7. 快开宝PDA开单器出入库扫码:让批发零售变得更简单

    快开宝PDA开单器出现前 批发商户是这样开单和管理的 ★员工痛苦:需要记客户.价格.库存等等,应对报错价.错漏单.盘错货等各种状况. ★老板麻烦:每天要守店.对单.核账,经常因错漏单.库存乱.积压货. ...

  8. [翻译]Kafka Streams简介: 让流处理变得更简单

    Introducing Kafka Streams: Stream Processing Made Simple 这是Jay Kreps在三月写的一篇文章,用来介绍Kafka Streams.当时Ka ...

  9. Moq让单元测试变得更简单

    [ASP.Net MVC3 ]使用Moq让单元测试变得更简单 前几天调查完了unity.现在给我的任务是让我调查Moq. 以下是自己找了资料,总结并实践的内容.如果有表述和理解错误的地方.恳请指正. ...

随机推荐

  1. J2SE-反射

    目录 1 什么是反射?主要提供了哪些功能? 2 如何通过反射获取类的信息? 3 数组的特殊处理. 4 反射的应用场景. 5 其他. 正文 1 什么是反射?主要提供了哪些功能? 1) Java的反射机制 ...

  2. phython廖雪峰

    这是小白的Python新手教程,具有如下特点: 中文,免费,零起点,完整示例,基于最新的Python 3版本. Python是一种计算机程序设计语言.你可能已经听说过很多种流行的编程语言,比如非常难学 ...

  3. The requested URL / was not found on this server——Apache配置虚拟域名后无法访问localhost

    今天为了做项目,在Apache中配置了项目域名,成功访问.但是忽然发现要访问localhost突然出现The requested URL / was not found on this server. ...

  4. 用tortoiseGit管理GitHub项目代码(完整教程)

    一.为什么要写这篇博客呢,因为在一开始用tortoiseGit来管理项目的时候,在百度上找了很多教程,但是感觉说的都不是很全,有些东西以及操作没写清楚,所以想写一片比较完整用tortoiseGit管理 ...

  5. mac下出现xcrun: error导致git、svn无法使用的解决办法

    现象:xcrun: error: invalid active developer path (/Library/Developer/CommandLineTools), missing xcrun ...

  6. 学习python登录demo

    要求编写登录接口 : 1. 输入用户名和密码 2.认证成功后显示欢迎信息 3.用户名输错,提示用户不存在,重新输入(5次错误,提示尝试次数过多,退出程序) 4.用户名正确,密码错误,提示密码错误,重新 ...

  7. Solr中Field常用属性

    FieldType 实例:<fieldType name="text_ik" class="solr.TextField"></fieldTy ...

  8. c++简单编写线性表(实验)

    哇 好久没更博客了  因为从上次更文到现在为止,我一直在学c#,然后也觉得没什么太大的东西想写在博客上, 总之这次就简单的传一下学校安排的数据结构的实验,我还是学生,是新手,希望能继续跟大家一起学习, ...

  9. 浏览器抓包(post)

    谁能想到我写的第一个wp竟然是个web题??? 以Geek2017_Buy me a Tesla 为例 来看看题目 emmmm有理想还是很好的,火狐打开(事实证明FF对web题是最友好的) 能点的地方 ...

  10. java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@412d7230

    近期遇到了如标题这种错误,再次记录解决方法.本文參考帖子: http://bbs.csdn.net/topics/390196217 出现此bug的原因是在内存回收上.里面用Bitamp的代码为: t ...