FPGA学习之路——一路走来
既然选择了远方,便不顾风雨兼程,一路走下去。 —韩彬
在看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学习之路——一路走来的更多相关文章
- FPGA学习之路——PLL的使用
锁相环(PLL)主要用于频率综合,使用一个 PLL 可以从一个输入时钟信号生成多个时钟信号. PLL 内部的功能框图如下图所示: 在ISE中新建一个PLL的IP核,设置四个输出时钟,分别为25MHz. ...
- 《跟唐老师学习云网络》 -第4篇 router路咋走啊【华为云技术分享】
[摘要] 好了,到这里至少你应该能看懂路由表信息了.给你一个目的IP,你也应该知道它会使用哪一条路由了. 路怎么走就看骚年你了~ 一.路由 其实关于网络大家遇到最多的问题就是:卧 槽,为什么不通啊! ...
- Webwork 学习之路【06】Action 调用
一路走来,终于要开始 webwork 核心业务类的总结,webwork 通过对客户端传递的 web 参数重新包装,进行执行业务 Action 类,并反馈执行结果,本篇源码分析对应下图 WebWork ...
- 我的Linux学习之路的感悟
首先要跟大家说声抱歉,这么久一直没有更新,有负大家对我的期望. 半年的Linux运维的学习到目前已工作一个月零9天,这一路走来的艰辛和挣扎只有自己最清楚. 首先要感谢公司的同事的宽容接纳和耐心指点.感 ...
- 纪录我的iOS学习之路
学习资料的网址 田伟宇(Casa Taloyum)有几篇介绍iOS架构的文章,一级棒!原博客链接. iOS应用架构谈 开篇 iOS应用架构谈 view层的组织和调用方案 iOS应用架构谈 网络层设计方 ...
- (转)如何学习Java技术?谈Java学习之路
51CTO编者注:这篇文章已经是有数年“网龄”的老文,不过在今天看来仍然经典.如何学习Java?本篇文章可以说也是面对编程初学者的一篇指导文章,其中对于如何学习Java的步骤的介绍,很多也适用于开发领 ...
- C++学习之路——1.linux下环境搭建
学习之路,可说各有各的看法和方法.对于我来说,完全是兴趣一下子来了,脑壳发热吧.就想有个干净的环境,只想着与程序有关的东西练一练. 目前想学习C++,可是打开VC++6,再安了VS2010.VS201 ...
- ANDROID学习之路 转
版权声明:本文为 stormzhang 原创文章,可以随意转载,但必须在明确位置注明出处!!! 这篇博客背后的故事 一路走来很不容易,刚好知乎上被人邀请回答如何自学android编程, 就借这个机会在 ...
- Java学习之路:不走弯路,就是捷径
1.如何学习程序设计? JAVA是一种平台,也是一种程序设计语言,如何学好程序设计不仅仅适用于JAVA,对C++等其他程序设计语言也一样管用.有编程高手认为,JAVA也好C也好没什么分别,拿来就用.为 ...
随机推荐
- Java加密与解密笔记(三) 非对称加密
非对称的特点是加密和解密时使用的是不同的钥匙.密钥分为公钥和私钥,用公钥加密的数据只能用私钥进行解密,反之亦然. 另外,密钥还可以用于数字签名.数字签名跟上文说的消息摘要是一个道理,通过一定方法对数据 ...
- Tencent社会招聘scrapy爬虫 --- 已经解决
1.用 scrapy 新建一个 tencent 项目 2.在 items.py 中确定要爬去的内容 # -*- coding: utf- -*- # Define here the models fo ...
- 不可思议的混合模式 background-blend-mode
本文接前文:不可思议的混合模式 mix-blend-mode .由于 mix-blend-mode 这个属性的强大,很多应用场景和动效的制作不断完善和被发掘出来,遂另起一文继续介绍一些使用 mix-b ...
- git 设置和取消代理
# 设置ss git config --global http.proxy 'socks5://127.0.0.1:1080' git config --global https.proxy 'soc ...
- jspsmart(保存文件)+poi(读取excel文件)操作excel文件
写在前面: 项目环境:jdk1.4+weblogic 需求:能上传excel2003+2007 由于项目不仅需要上传excel2003,还要上传excel2007,故我们抛弃了jxl(只能上传exce ...
- 【python】字符串格式化
- iOS 网络监听、判断
一 网络监听 - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary ...
- Python 项目实践二(下载数据)第四篇
接着上节继续学习,在本节中,你将下载JSON格式的人口数据,并使用json模块来处理它们.Pygal提供了一个适合初学者使用的地图创建工具,你将使用它来对人口数据进行可视化,以探索全球人口的分布情况. ...
- MST系列
1.POJ2485 Highways 蛮水的 数组一开始开小了卡了一会儿 我可能是个傻逼 #include<iostream> #include<cstdio> #includ ...
- Python学习(一):编写购物车
1.购物车流程图: 2.代码实现: #!/usr/bin/env python #coding=utf-8 ChoiceOne =''' 1.查看余额 2.购物 3.退出 ''' ChoiceTwo ...