明德扬论坛

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 144|回复: 2

【FPGA至简设计原理与应用】书籍连载06 第二篇FPGA至简设计原理 第一章高效编辑器GVIM

[复制链接]
发表于 7 天前 | 显示全部楼层 |阅读模式

马上注册,看完整文章,学更多FPGA知识。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x


大家好,近期我们会连载《FPGA至简设计原理与应用》一书,有兴趣的同学可以学习,也希望大家可以对我们的书提出宝贵的意见和建议。

《FPGA
至简设计原理与应用》书籍连载索引目录

http://www.fpgabbs.cn/forum.php?mod=viewthread&tid=989


读过的朋友可积极在贴后留言,书籍正式出版时,我们会从留言者中挑选20位幸运读者,幸运读者可获潘老师亲笔签名书籍一本。

注:手机浏览可能格式会乱,建议用电脑端进行浏览。






第二篇 FPGA至简设计原理

     第一章 高效编辑器GVIM


    GVIM是类似于记事本的代码编辑工具,但相比于记事本其输入效率更高,可以更好的提升工作效率。由于GVIM具有丰富的代码补全、编译及错误跳转等便于编程的功能,其在IC开发领域得到了广泛应用,也为学习FPGA工程提供了助力。GVIM是一款FPGA工程师常用的软件,本章节分享一下该软件的使用方法以及小技巧。本书的所有设计代码都是在此软件上完成的,因此希望同学们可以熟练掌握其使用方法,为自己的FPGA工程师之路打好基础。

    本章节详细讲述了使用GVIM的必备技巧,掌握这些技巧是使用GVIM的前提。如果可以掌握基本技巧,在不追求效率的前提下就足以进行所有设计。对于初学者来讲,一定要认真学习本章节,牢记本章所讲的技巧。打好基础之后才能熟能生巧,只有在最开始将知识掌握扎实才能提高后续程序设计的效率。

    GVIM软件的操作界面如下所示,可以看出设计界面直观简洁,易于操作。
                              

1

1
2.1- 1GVIM软件操作界面
    GVIM软件官方一共有四种操作模式,分别是命令模式(command-mode),插入模式(insert-mode),可视模式(visual-mode)和正常模式(normal-mode)。但是为了方便教学和学习,至简设计法将GVIM界面分为三种模式,分别是命令模式、编辑模式和列操作模式。这种划分虽然不是很严谨,但是可以更好的学习熟悉软件。后续内容分享中本书都会采用至简设计法划分的三种模式,请同学们注意区分。下面就开始对各模式进行逐一学习。

    首先学习命令模式,顾名思义此时键盘上所有的按键都是各种不同的操作命令,因此只能观看代码或者发出命令,而无法像记事本一样进行文本编辑。这时的软件界面是粗光标闪烁的状态,如下图所示。

2.png
2.1- 2命令模式操作界面
    接下来学习编辑模式,依旧可以按照字面意思进行理解,此模式下的GIVM就相当于记事本,在键盘上的所有按键都可以对文件进行输入。此时软件界面为细光标闪烁的状态,并且下方命令栏显示“插入”,如下图所示。

3.png
2.1- 3编辑模式操作界面
    最后介绍列操作模式,此模式下可以在块内实现列对齐的同时对相应块进行添加空格、字符、缩进等操作。此模式下选择的块为加粗阴影显示,如下图所示。
4.png
图2.1- 4列操作模式编辑界面
    在GIVM软件中的三种模式可以进行互相转换。

    GVIM默认模式为命令模式,在此模式下按“i”进入编辑模式,按“Ctrl+q”进入列操作模式。
  

5

5
2.1- 5命令模式下的模式转换
    在编辑模式下按“Esc”可以进入命令模式,选中想要操作的行按“Ctrl+q”可以进入列操作模式。这里需要注意,编辑模式下单独输入“Ctrl+q”无法进入列操作模式,需要使用鼠标协助,如下图所示,对想要编辑的块进行选择后在按下“Ctrl+q”方可进入列操作模式,转换关系如图7。

6.png
2.1- 6编辑模式下选择要编辑的块
  
7.png
图2.1- 7编辑模式下的模式转换
    在列操作模式下,按“Esc”可以进入命令模式,在任意位置点击鼠标即可进入编辑模式,转换关系如下图所示。
  
8.png
2.1- 8列操作模式下的模式转换
三种模式互换关系如下:

                 
  

9

9

图2.1- 9三种模式互换关系

           
第1节 基本技巧

    了解GVIM的模式后来学习使用GVIM的基本技巧。这里不会详细介绍GVIM的所有命令,只会分享日常中的常见命令,这些命令足以覆盖所需的大部分场合。与此同时,这些小技巧也提高了工作的效率。为便于后续学习,也为了提高自身能力,建议同学们尽可能掌握这些技巧。
当然对初学者来说,在还不会设计代码的前提下熟练使用快捷方式的确有些困难。但是在学习之初,希望初学者可以花费一些时间,将这些小技巧逐一进行尝试并进行操作练习。“磨刀不误砍柴工”,不要小看用在快捷命令的练习时间,如果各位工程师真正掌握了这些命令的使用方法,一定可以在工作中受益无穷。

1.1 补全命令
    补全命令(Ctrl+p):在进行代码编写的过程中可能会出现同一工程内需要重复输入很多代码的情况,此时可以使用补全命令。即输入代码第一个字母后按下“Ctrl+p”,随后会出现前面已经输入过的具有相同首字母的所有代码,此时可以选择需要的对应代码。这里需要注意,只有本文档中已经完整编写过的代码才可以在相同首字母下拉菜单中看到,没有出现过代码的无法调用。

    举个例子,假设希望输入“else”,就可以在编辑状态下,输入“e”后按“Ctrl+p”,此时会出现下拉菜单。可以看到会出现已经编写过的所有以字母“e”为开头的代码,按上下键选择所需代码,点击回车后就可以得到最终代码。

10.png
2.1- 10补全命令示例
1.2 跳转命令
    文件内跳转(gg, G, :100):跳转命令一共有三个快捷方式,“gg”、“G”、“:100”。当一个工程比较复杂的时候,代码可能达到了上千行,此时手动翻页寻找代码的方式效率很低,而跳转命令可以快速跳转到指定位置,从而节省时间,提高效率。
    先来看“gg”,命令模式下在文档任意位置按下“gg”即可跳转到文档的最顶端开头部分。需要注意的是此命令的使用环境是命令模式,前面有讲过在其他两种模式下可以按下“Esc”进入命令模式,在命令模式下输入两个小写“g”,即可成功跳转到顶端。跳转后结果如下图所示。

11.png
2.1- 11gg”跳转结果
    接下来是“G”,命令模式下在文档任意位置按下“G”即可跳转到文档的底端部分。注意此命令的使用环境依旧是命令模式,在其他两种模式下需要按“Esc”进入命令模式,在命令模式下输入一个大写“G”即可成功跳转到底端,跳转后结果如下图所示。

12.png
2.1- 12G”跳转结果
    顶端底端都有了,如何跳转到指定页呢?这里就需要“:”了。在命令模式下输入“:”,最下面命令栏就会显示出来,接着输入想要跳转的行数,点击回车就会跳转到对应行。例如想要跳转到100行,命令状态下在任意位置按“:”后输入100,如图2.1- 13所示,点击回车就会跳转到第100行。跳转后结果如图2.1- 14所示。

13

13
2.1- 13输入“:100”命令

14.png
2.1- 14“:100”跳转结果
1.3 搜索命令
    搜索命令(*/, n, N):搜索命令中需要用到“*”、“/”、“n”、“N”等快捷键。
    一个工程中想要知道都有哪些地方出现了某一代码,就可以使用“*”号键。命令状态下将光标移动到想要搜索的代码后按下“*”号键即“Shift+8”,随后此工程所有相同的代码都会高亮显示。
    通过“n”和“N”可以实现这些高亮代码之间的选择切换。小写“n”可以切换到下一个高亮代码,大写“N”可以切换到上一个高亮代码。这样就可以在搜索出的高亮代码之间实现跳转,用搜索命令搜索出的“reg”代码如下图所示。

15.png
图2.1- 15“*”搜索出的“reg”代码
    前文可知“*”号键可以对光标所在的代码进行亮显示,但有几千行代码的时候设计师一时无法寻找到需要的代码,此时就需要另外一种快捷方式,即“/”键。在命令状态下按“/+想要查找的代码”,此时该文当中此代码都会高亮显示。依旧以“reg”代码为例,在命令状态下输入“/reg”,如下图命令栏所示,按下回车即可高亮显示代码“reg”。

16.png
图2.1- 16 “/reg”搜索”reg”代码
1.4 删除复制命令
    删除命令(ddd2d):删除命令需要用到“dd”快捷方式。
    将光标放在想要删除的位置,命令模式下按“dd”即可删除该行。那如果需要一下子删除很多行要如何操作呢?这种情况下可以计算需要删除的行数后进行操作。比如想要删除2行则可以按下“d2d”或“2dd”,此时光标后两行内容将被删除。
    复制命令(yyy5y):复制命令需要用到“yy”快捷方式。
    在这里,复制的快捷方式“Ctrl+c”依然可以使用,除此之外再向同学们分享另外一种复制方式。命令模式下,将光标放在想要复制的位置后按“yy”即可复制该行。如果想要复制多行,比如复制当前及向下的5行,将光标放在需要复制的第一行后按下“y5y”或“5yy”,这时光标后5行内容就 复制成功了。如下图所示,可以看到命令栏显示“复制了5行”,此时复制的是570-574行。

17

17
图2.1- 17复制命令“y5y”操作结果
    粘贴命令(p):粘贴命令需要用到“p”快捷方式。
    命令模式下,在有复制内容的状态时按“p”就可以将复制的内容进行粘贴。此时命令栏会显示“多了*行”,同样在此软件中常用的“Ctrl+v”快捷方式依旧可以使用。
    例如想要粘贴刚刚复制的5行,在命令模式下按“p”则可以看到粘贴成功,并且命令栏会显示“多了5行”,如下图所示,第582-586为粘贴的内容。

18.png
图2.1- 18粘贴命令“p”操作结果


第2节 高级技巧
    除了上一节所述的基础技巧外,还有一些更加高级的技巧。掌握了这些技巧后则可以在更加大型的设计上能达到事半功倍的效果。

2.1 替换命令
    替换命令(:%s/xx/yy/gc:63,72s/xx/yy/gc):替换命令需要用到的是“:%s/xx/yy/gc”快捷方式。
    在设计中有时可能会遇到把某段代码替换成另一段代码的情况,这个时候就要用到替换命令。在命令模式下,输入“:%s/xx/yy/gc”,点击回车后按下“y”即可对代码进行依次替换。其中“:%s”代表着作用于整个文档,“xx”代表着文档中需要替换的内容,“yy”表示替换后的内容,“gc”是快捷命令的指令不需要进行修改,随后按下的“y”表示“yes”,即确定进行修改。
   
    举个例子,如果想要将整个文档中的“reg”替换为“wire”,则在命令模式下输入“:%s/reg/wire/gc”,如2.1- 19所示;接着点击回车,就会看到如图2.1- 20所示的状态,文档中所有“reg”都高亮显示,唯有第一个reg显示更浅,命令栏提示是否换为“wire”。此时按下“y”则可以看到替换成功,如图2.1- 21所示,可以看到第63行的“reg”已经成功替换为“wire”,灰色光标进行到了下一个高亮代码。

19.png
图2.1- 19命令模式下输入“:%s/reg/wire/gc”

20.png
图2.1- 20确认是否将“reg”替换为“wire”



21

21
2.1- 21依次将“reg”替换为“wire
    上面讲述的是整个文档中的某一代码需要替换,但有时候可能需要在某个范围进行替换。这种情况下将刚刚代表整个文档的符号“%”替换为范围即可。如果上例中想要替换第63到第72行的“reg”为“wire”,那么在命令模式下输入“:63,72s/reg/wire/gc”,如图2.1- 22所示;点击回车则可以看到reg都进行高亮显示;此时按下“y”即替换成功,如图2.1- 23所示。按照该方法依次替换可以发现,第72行以后就无法继续进行替换反而会显示“9次替换,共9行”表示替换完成,如图2.1- 22所示,以上则为部分区域内替换代码的方法。

22.png
2.1- 22命令模式下输入“:63,72s/reg/wire/gc

23.png
2.1- 23确认是否将“reg”替换为“wire

24.png
图2.1- 24完成区域内“reg”替换为“wire”
2.2 列删除方法
    在日常编程中相信同学们都会使用删除的用法,即直接按“Delete”键删除想要的内容。但是有时候可能想要实现删除连续几行的某几个字符,这个时候就需要列删除的操作方法了。举个例子,假定想要删除下图中第43到第49行的第35个字符,通过观察可以发现下图想要删除的是“input”后的“put”。

25

25
2.1- 25待删除代码
    首先在编辑模式下选择想要删除的区域,注意需要选到删除对应行和列。如下图所示,从第43行第3个字符开始选择,到第49行第5个字符结束。

26.png
2.1- 26选中待删除区域
    接着按下“Ctrl+q”,可以看到想要删除的部分被选中了,如果这里没有选对则要返回到上一步重新选取范围。

27.png
2.1- 27选中所有待删除字符
    最后按下“Delete”键,结果如下图所示,可以看到43行到49行的三到五个字符都已经被删除,行删除操作完毕。

28.png
2.1- 28完成删除操作
    可以发现这里其实是从编辑模式转换到列操作模式从而完成了删除操作,可见列操作模式十分便捷。但是与此同时也要注意,刚刚可以实现删除内容都为“put”是因为至简设计法代码书写的比较规范整齐。如果代码写的乱七八糟,列删除后很难不影响文档后续编辑效果。养成良好习惯,后续会受益无穷。

2.3 列插入方法
    刚刚学会了列删除的操作,但有时候也会需要列插入的操作。下面来通过例子学习一下列插入,即在列的前面插入相同的内容。假定需要在第51-60行前面插入“output”,如下图所示。

29

29
2.1- 29待插入代码
    首先在51行按下“Ctrl+q”进入列操作模式,使用“h”、“j”、“k”、“l”四个按键”来控制上下左右,选择范围需要插入内容的范围,如下图所示。

30.png
2.1- 30选择插入范围
    选定好范围后按下大写的“I”,接着输入需要插入的数据“output”,然后按“Esc”退出。此时可以看到选中的每一列都加上了同样内容,如下图所示。

31

31
2.1- 31插入“output”操作结果
    当然此方法不是必须使用键盘进行区域的选择,也可以使用鼠标选择范围后再按下“ctrl+q”,学会插入的方法后同学们可以按照个人习惯使用相应的区域选择方式。







上一篇:【FPGA至简设计原理与应用】书籍连载05 第一篇 FPGA基础知识 第五章 在线逻辑分析仪
下一篇:【FPGA至简设计原理与应用】书籍连载07第二篇FPGA至简设计原理第二章多用模板专注设计
MP801开发板 网络培训班 就业培训班 FPGA学习资料
周老师 17002067067(微信同号) Q1727673675

0

主题

2

帖子

29

积分

新手上路

Rank: 1

积分
29
发表于 7 天前 | 显示全部楼层
明德杨出的书都是实实在在的干货,手把手教你学FPGA讲述了一套非常实用的FPGA设计方法,平时学习可能感觉不到学习方法的重要性,但是一旦参加工作,需要对项目进行长期的维护和修改,一套好的设计方法可以大大节省后期维护和设计的时间,感谢MDY,支持新书初版!!
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|手机版|小黑屋|MDYBBS ( 粤ICP备16061416号-1

GMT+8, 2020-5-26 13:24 , Processed in 0.585850 second(s), 84 queries , File On.

Powered by Discuz! X3.4

本论坛由广州健飞通信有限公司所有

© 2001-2019 Comsenz Inc.

快速回复 返回顶部 返回列表