还在使用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. MyBatis《2》

    MyBatis入参考文档:http://mybatis.org/mybatis-3/zh/   1.properties 属性 1.在MyBatis配置文件中引用属性文件     MyBatis允许在 ...

  2. 【Java】java 中的泛型通配符——从“偷偷地”地改变集合元素说起

    一直没注意这方面的内容,想来这也算是基础了,就写了这个笔记. 首先java的通配符共有三种----先别紧张,现在只是粗略的过一下,看不看其实无所谓 类型 介绍 <?> 无限定通配符,等价于 ...

  3. c语言的流程控制

    1. 流程控制 ● 顺序结构:默认的流程结构.按照书写顺序执行每一条语句. ● 选择结构:对给定的条件进行判断,再根据判断结果来决定执行哪一段代码. ● 循环结构:在给定条件成立的情况下,反复执行某一 ...

  4. Tarjan算法:求解图的割点与桥(割边)

    简介: 割边和割点的定义仅限于无向图中.我们可以通过定义以蛮力方式求解出无向图的所有割点和割边,但这样的求解方式效率低.Tarjan提出了一种快速求解的方式,通过一次DFS就求解出图中所有的割点和割边 ...

  5. Unity3D手机斗地主游戏开发实战(04)_出牌判断大小(已完结)

    之前我们实现了叫地主.玩家和电脑自动出牌主要功能,但是还有个问题,出牌的时候,没有有效性检查和比较牌力大小.比如说,出牌3,4,5,目前是可以出牌的,然后下家可以出任何牌如3,6,9. 问题1:出牌检 ...

  6. OC中只有重写没有重载

    一.类的继承 Objective-c中类的继承与C++类似,不同的是Objective-c不支持多重继承,一个类只能有一个父类,单继承使Objective-c的继承关系很简单,易于管理程序. 二.方法 ...

  7. PE文件格式分析

    PE文件格式分析 PE 的意思是 Portable Executable(可移植的执行体).它是 Win32环境自身所带的执行文件格式.它的一些特性继承自Unix的Coff(common object ...

  8. Mariadb Galera Cluster 群集 安装部署

    #Mariadb Galera Cluster 群集 安装部署 openstack pike 部署  目录汇总 http://www.cnblogs.com/elvi/p/7613861.html # ...

  9. SpringMvc+JavaConfig+Idea 搭建项目

    1.介绍 之前搭建SpringMvc项目要配置一系列的配置文件,比如web.xml,applicationContext.xml,dispatcher.xml.Spring 3.X之后推出了基于Jav ...

  10. MySQL安装(yum、二进制、源码)

    MySQL安装(yum.二进制.源码) 目录 1.1 yum安装... 2 1.2 二进制安装-mysql-5.7.17. 3 1.2.1 准备工作... 3 1.2.2 解压.移动.授权... 3 ...