既然选择了远方,便不顾风雨兼程,一路走下去。  —韩彬

  在看bingo的书时,看到这样写到。做什么事情都不容易,学习也是,所以一个词很重要不忘初心。作为一名大二的学生,我很高兴能够将自己学习FPGA的过程记录下来,一是方便自己以后回头看的时候能够有所感触,而是想分享自己初学入门是的一些经验给予初学者,能尽量少走弯路。

  我是大一暑假开始学习FPGA的,我是微电子专业,学校大三才开数电,大一的时候受老师推荐进了一个实验室,但是没有好好珍惜机会。最后便不退自出。大二学校FPGA创新实验室纳新,我非常想加入所以利用暑假的时间来学习。刚开始学习的时候没有一上来就摸代码,而是先从数电书开始看起,这是我第一次自学一门课,对着数电电子书看没感觉,后来就看ppt,遇到很多第一次接触的概念,但是没有办法没人去问,只能自己硬着头皮硬啃下来,现在回想起来真是非常感谢自己当时能静心去学,在刚开学那么忙的时候能顺利进去实验室去学习。附上数电电子书、ppt以及Verilog基本语法链接链接:http://pan.baidu.com/s/1dFywrpZ 密码:hh1f

  数电PPT和数电书要对应着看PPT上哪里看不懂了就看书上的详解,实在不行就百度,如果是自己自学的话这个过程是很慢的,所以在学校有老师教,这样的学习时间是很宝贵的,去外面学也不是不可,确实花了钱还是能学到东西的。但是我还是选择自学,毕竟囊中羞涩。基本上数电看上俩章的内容后你就会对组合逻辑有简单的理解,然后就可以看Verilog HDL语法了,我博客里有写赛思灵公司的开发工具ISE14.7安装包以及安装教程,使用详解。ISE使用方便适合着,主要是因为仿真激励不用自己写。只要有C语言编程基础,看一些简单的Verilog语法就可以上手操作编译了。

  一路走来,在实验室里做了一些小任务,碰到一些我以为不可解决的难题,最后也都慢慢化解。所以就将自己大一上学期的一些心得体会总结出来,未来的学习之路会更加坎坷曲折,愿我能不忘初心。

心得与体会

  1.FPGA设计思想。记得该开始学习FPGA的时候,总是以读完题目就开始写代码,只是刚开始的工程比较小,只需要一两个always块,输入输出一写,基本也能写出来。但是随着工程逐渐变大,这样一拿到题目就直接敲代码的方法就难免有很多弊端。比如我在编写多功能数字表的时候想加入闹钟,时钟,秒表的功能,但是一上来就敲代码,最后写完了时钟的功能后发现闹钟秒表加进去很麻烦,最后费了很大的力气加进去但是加了一个有十二个输入的模块,这样从布线上讲太繁琐,从利用资源上讲浪费资源,总的来说是没有一个好的的设计思想。

  首先在创建工程之前应该至少画出它的原理图,每个模块想要起什么作用在刚开始设计的时候就应该要考虑到,更细致的话画出它的模块内部连线图,各个always块之间的相互作用要理清楚。然后再照图施工,中间的细节再经过后期编译过程中的在调节修改。

  2.模块化设计。模块化设计在编译的过程中可以提供很多便利。比如串口通信发送模块和接受模块我前面写过,那我在编译发送接收模块的时候就可以直接把整个.v文件拿来用,还有时钟消抖,led流水灯等。另一个便利就是在做比较的工程中避免一个module太大,修改查看代码不方便等,从原理图(RTL)上看起来也简单明了。

我在学习过程中还发现了身边同学有一点,他们在使用模块化设计分过多模块。串口通信发送工程,将分频波特率分出来,将发送接收计数器也分了出来。我认为没有必要分出来很多模块,波特率分频器可以分出来但发送接收计数器是没必要的。模块太多有时候例化连线时也会造成不便。所以我还戏称说咱这不能叫模块化设计了,应该叫always块化设计。

  3.代码书写、命名规范、注释。我觉得这一点也是是十分重要的,比如在使用模块化设计想要将以前的代码拿来复用,但是你的名字起得五花八门,有时候时间长了自己也不知道写的是啥。代码书写也应该要有规范,比如begin end 要成对的打不会丢,多用复制粘贴可以减少书写错误等。对于一些比较难理解的地方应当表明注释,这样自己在阅读和修改的时候很方便,别人看的时候也会比较容易明白。隔一段时间回去看自己的代码也不至于会忘了自己写的意思。总结来说要打得一手漂亮的代码。

  4.学会利用软件小技巧,仿真,编写激励技巧以及观察仿真波形图。以前没有仔细看仿真图的习惯,现在工程大了之后发现看仿真图真的可是省去好多时间。看着波形图去推代码满足条件,这样比直接下板子会节省好多时间。我在仿真串口通信接受模块时,将发送模块和接收块例化一起然后仿真,这样就避免了直接仿真接收模块时激励编写的麻烦,很多人这样做的时候会感到麻烦,我可以直接用我以前写的模块.v文件复制过来,很方便,这就体现了代码书写规范和模块化设计复用的优点。光针对串口通信而言,巧妙的利用他里面的一些信号,会十分方便,忙信号、发送结束信号等等,合理分配资源,最后事半功倍。

  5.多讨论,请教他人。自己一个人单独编写代码的时候难免会碰到这样那样的bug,也容易会陷入思想的死循坏,所以也要多和别人讨论,请教他人。但不是直接要别人的代码,可以请教一下设计思想,想想自己有什么不足,为什么没有想到,多总结,多思考。

  6.要有艰苦奋斗的精神。这学期以来,我为了完成任务,经常是周末一坐就是一整天。一个问题我也会几天连续的调试。最终往往都会找到解决办法。所以我觉得不会就去请教别人是好的,最后最好是自己能将它琢磨出来。

转载请注明出处:NingHeChuan(宁河川)

个人微信订阅号:NingHeChuan

如果你想及时收到个人撰写的博文推送,可以扫描左边二维码(或者长按识别二维码)关注个人微信订阅号

知乎ID:NingHeChuan

微博ID:NingHeChuan

原文地址:http://www.cnblogs.com/ninghechuan/p/6238392.html

FPGA学习之路——一路走来的更多相关文章

  1. FPGA学习之路——PLL的使用

    锁相环(PLL)主要用于频率综合,使用一个 PLL 可以从一个输入时钟信号生成多个时钟信号. PLL 内部的功能框图如下图所示: 在ISE中新建一个PLL的IP核,设置四个输出时钟,分别为25MHz. ...

  2. 《跟唐老师学习云网络》 -第4篇 router路咋走啊【华为云技术分享】

    [摘要] 好了,到这里至少你应该能看懂路由表信息了.给你一个目的IP,你也应该知道它会使用哪一条路由了. 路怎么走就看骚年你了~ 一.路由 其实关于网络大家遇到最多的问题就是:卧 槽,为什么不通啊! ...

  3. Webwork 学习之路【06】Action 调用

    一路走来,终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork ...

  4. 我的Linux学习之路的感悟

    首先要跟大家说声抱歉,这么久一直没有更新,有负大家对我的期望. 半年的Linux运维的学习到目前已工作一个月零9天,这一路走来的艰辛和挣扎只有自己最清楚. 首先要感谢公司的同事的宽容接纳和耐心指点.感 ...

  5. 纪录我的iOS学习之路

    学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...

  6. (转)如何学习Java技术?谈Java学习之路

    51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...

  7. C++学习之路——1.linux下环境搭建

    学习之路,可说各有各的看法和方法.对于我来说,完全是兴趣一下子来了,脑壳发热吧.就想有个干净的环境,只想着与程序有关的东西练一练. 目前想学习C++,可是打开VC++6,再安了VS2010.VS201 ...

  8. ANDROID学习之路 转

    版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...

  9. Java学习之路:不走弯路,就是捷径

    1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...

随机推荐

  1. Oracle自动备份数据

    一. Oracle自动备份单表一个月数据 方式一:三步处理(建批处理文件,写sql文件,设置任务计划) 1. 第一步:建立一个批处理文件 @echo off Set OrclSid=orcl Set ...

  2. mongodb 3.4 集群搭建:分片+副本集

    mongodb是最常用的nodql数据库,在数据库排名中已经上升到了前六.这篇文章介绍如何搭建高可用的mongodb(分片+副本)集群. 在搭建集群之前,需要首先了解几个概念:路由,分片.副本集.配置 ...

  3. 《Google软件测试之道》【PDF】下载

    <Google软件测试之道>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230382198 内容介绍 每天,Google都要测试和发布 ...

  4. Platt SMO 和遗传算法优化 SVM

    机器学习算法实践:Platt SMO 和遗传算法优化 SVM 之前实现了简单的SMO算法来优化SVM的对偶问题,其中在选取α的时候使用的是两重循环通过完全随机的方式选取,具体的实现参考<机器学习 ...

  5. 小白的Python之路 day1 表达式if ... else ,while循环,for循环

    表达式if ... else 一.用户登陆验证 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 # 提示输入用户名和密码    # 验 ...

  6. 【adb】连接BlueStacks

    1.在任务管理器中找到

  7. ucore lab1练习2 qemu+gdb 不能协作调试的问题make lab1-mon

    本练习是qemu结合gdb调试,但是我做实验的时候并不能像视频输入make lab1-mon那样顺利调试,期间有各种error,后来我找到原因,请看解决方法. 请先把ucore_lab文件删除,以下全 ...

  8. 关于git的一些理论知识

    一.什么是版本控制器 好多刚用git的coder一说起git,就随口会说出版本控制器嘛,我问那是干嘛的,大部分人就回答上传代码的.然后会用,但是有些理论你问他们他们就不知道了,比如不是代码的文件就不能 ...

  9. 1.1 About Percona XtraDB Cluster

    摘要: 出处:kelvin19840813 的博客 http://www.cnblogs.com/kelvin19840813/ 您的支持是对博主最大的鼓励,感谢您的认真阅读.本文版权归作者所有,欢迎 ...

  10. 理解JavaScript原型

    Javascript原型总会给人产生一些困惑,无论是经验丰富的专家,还是作者自己也时常表现出对这个概念某些有限的理解,我认为这样的困惑在我们一开始接触原型时就已经产生了,它们常常和new.constr ...