欢迎访问博客,Kevin希望通过博客记录下自己在学习FPGA过程中的点点滴滴,使其成为自己一段美好的回忆。^_^点击这里给我发消息

Kevin:如何提高敲代码的速度?

博主吐槽 Kevin 3067℃ 0评论

咱们很多人可能都有这样的情况,敲了几行代码,总感觉前边敲的代码有问题,但是又不确定是否有问题或是哪有问题。总在这几行来来回回耽搁很多时间。

当然,可能也有这样的情况,一个 always 或 negedge 关键字敲了好几遍,始终敲不对。

看过SDRAM第一季和第二季视频的朋友应该注意到过,我在视频中敲代码的速度和你相比,可能还是要稍微快一点的。

这段时间稍微空闲点,借此机会和大家聊一聊如何提高写代码的速度。

一、理顺设计思路

之前公司的一个同事,从硬件转做FPGA,那个时候我刚离职不久,和他关系也非常好,刚进公司的时候和他还住同一个宿舍。

其实他的基础还是可以的,自己纯自学,开发软件还是用得很熟练。因为之前自学的时候,都是看些例程,自己动手比较少。

他刚拿到公司的项目后,稍微了解了一下项目需求,之后就开始写代码。在写代码的过程中,他就出现了刚才我说的情况,花了很长时间,还在那几行代码上徘徊,结果还是不晓得自己写的代码到底是对还是不对。

对于这种情况,属于典型的思路不清晰。思路不清晰,写代码的速度肯定慢!

在SDRAM的视频中,不知道大家有没有注意到过,我在写代码之前,对于一些稍复杂的模块,会先画好时序图。

为什么画时序图呢?

大家接触FPGA之后,有没有发现,FPGA其实玩的就是时序。

我在写代码之前,在时序图上基本上会将一个模块中用到的大部分信号画出来。大家不要小看画时序图这个步骤,画时序图,其实就是在整理自己的思路,时序图反映出来的,就是你的代码。

shixutu

这是在SDRAM第二季中OV5640 IIC配置模块的部分时序图,大家可能会觉得画时序图很浪费时间,其实并不是这样。

在我自己画时序图的过程中,基本上,我画的每一个信号,我都会去想这个信号我该怎么用verilog去实现,也就是每一个信号就对应着一个变量。

时序图出来了,也就是你的思路理顺了,在写代码的时候,对照着时序图去写代码,写代码的速度能不快吗?

当然,画时序图,有很多种方式,可以在草稿纸上直接画,也可以在Visio上画,也可以在timegen软件上画。

二、使用便利的代码编写工具

工欲善其事,必先利其器。古人的智慧真的是令人敬佩的。

我们写的模块中,基本上大部分都是always块。

daima_1017

这个是串口接收模块中的一部分代码,在每个always块,基本上都是这种结构。

always

每定义一个reg型变量就写这么多代码always @(。。。)的话,还是会影响到写代码的速度的。

细心的朋友应该发现了,我在SDRAM第一季中用的编辑器是Notepad++,第二季用的编辑器是 gvim。

在gvim中,我使用到了很多快捷方式,像always块,只需要按一个按键就可以出来。

vim_always

当然,对于gvim,刚开始使用的朋友可能还是会不太习惯的。

有了解过的,知道vim有什么命令模式之类的。说实话,我也没有去仔细去了解他具体有哪些模式,按什么键退出或进入什么模式。因为这对我来讲,我不关心,我只关心怎么用vim让我敲代码更方便。

对于gvim,可以自己在 _vimrc 这个文件中设置自己想要的快捷键。

vim_setup

下面来说一下Kevin使用的这个_vimrc 文件中已定义好的快捷方式。

F3:直接生成always块。

vim_always

F5:生成版权信息。

vim_banquan

F6:将例化的模块端口对齐。

vim_f6

F7:对齐模块定义端口。vim_f7

F8:对齐定义的内部变量。

vim_f8

:cr,生成定义变量注释。

vim_cr

:cc,生成主代码部分注释。

vim_cc

另外,使用gvim还有一个好处,就是TAB键会自动替换成空格键。这个作用,可以让你写的代码不管在哪个编辑器中查看代码,你的代码格式都会像在gvim中编辑的那么好看。

vim_daima

note_daima

两个不同的编辑器,gvim和notepad++中打开,看到的效果一致,当然,在quartus ii 和ISE中打开,看到的效果也还是一样的。

关于gvim就暂时介绍这么多,有想使用gvim来提升敲代码速度的,直接在【开源骚客】公众号(微信号:OpenSoc)中回复关键字 “gvim” 就可以下载的网盘链接地址了。

注意,“gvim”是区分大小写的哈!!!

erweima

转载请注明:邓堪文博客 » Kevin:如何提高敲代码的速度?

喜欢 (12)or分享 (0)
发表我的评论
取消评论
表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址