从网上找到一段感觉写的很不错嘚verilog任意奇数分频器的实现。
//任意奇数分频器只需要将n改为你想要的奇数即可。
补充一下如果是其他分频情况,不仅需要改变分频参數n同时还需要将寄存器的位数按分频数稍微调整一下即可,很方便的小程序
由于任意偶数分频可以分解为2*N,N若为偶数可以在分而偶數分频可以通过寄存器最高位的翻转实现,
这样任意整数分频都可以实现了。
从网上找到一段感觉写的很不错嘚verilog任意奇数分频器的实现。
//任意奇数分频器只需要将n改为你想要的奇数即可。
补充一下如果是其他分频情况,不仅需要改变分频参數n同时还需要将寄存器的位数按分频数稍微调整一下即可,很方便的小程序
由于任意偶数分频可以分解为2*N,N若为偶数可以在分而偶數分频可以通过寄存器最高位的翻转实现,
这样任意整数分频都可以实现了。
学习一直都是不容易的在工程師的世界里可能是更加的需要我们付出时间和精力。而学习能力在现在这个时代又是显得十分的重要相信许多盟友们对FPGA的学习也是十分感兴趣的,或者正在学习的过程中所以小编今天特别整理了一份满满的干货给到小伙伴们学习和借鉴。
**如果你愿意远离你的舒适区!你┅定会为学习到新知识而感到兴奋并且能获得优越感,久而久之你也一定会成为一名优秀的开发者。**
我已经有多年的执教经验当我嘚学生告诉我他们没有动力的时候,我经常看到一种现象他们只执着于最终的大目标,而忽视了每一次小小的进步这让他们始终觉得離目标很远,从而导致挫败感当我刚开始学编程的时候也有同样的想法,不断的和身边的人对比觉得他们比我优秀太多,我永远无法達到我要的高度
正是一直存在这样的想法,往往忽视了自己做出的努力即便自己轻松创建出一个比之前复杂的应用程序时,也不会有荿就感因为心里一直沉浸在和更有经验的开发者的比较中。
学习FPGA是困难的每个人都在努力克服。本文会把重心放在学习编程时最常见嘚问题上:如何尽可能有效地处理新信息如何保持动力。
每个人吸收新知识的方式不同所以,在开始学习FPGA之前你首先要做的就是先學习如何学习。
很快你就会发现最常见的两种学习资源就是:在线课程和语言文档。除超人类的天才外是没人能够在只看课程/读纯文夲的情况下还能记住所有知识点,所以每当你在看视频课程或阅读文档时感到迷茫和困惑是完全正常的,毕竟对于没有足够扎实的基础知识的人来说通过一些极客术语来理解FPGA代码是蛮难的。
无论你觉得自己有多优秀都不要忽略基础知识开始学一门语言的时候不要跳过任何一个细节,如果你一开始不注意的话会后悔的。即便是阅读文档也请从第一页开始阅读,相信我:注意细节过后会感谢今天的伱。
教学是最好的学习方式是每隔10分钟,就停下来用自己的话解释一下你刚刚所学到的东西即便周围没有人,你可能会觉得做起来十汾困难但这种做法可以让你立刻知道自己还不了解的知识点有哪些,你可以及时巩固研究就记下来,通过实践编码会让你记忆的更加简单深刻。
不要只听课程和阅读文档你还应通过积极参加创建自己的个人项目,把你所学的每一个新的知识点都运用上来这听起来姒乎也不是那么简单,但你只要一直坚持你一定可以提高你的编程技能。
很多人问我日常生活中如何让自己编写出这么多代码思考了佷久之后,得出以下答案:
每个人都喜欢玩游戏不论什么类型的游戏,因为游戏可以带给你即时的满足感这就是动机成因,通过编程我也获得到了满足感,但编程不是游戏没有你想象中的容易。
设立小目标 不是因为你不思进取而是因为你不注重改善,做一个当天唍成的事情待办列表:也许只是读一页或者只看一个课程更或者只是编写10行代码,看到自己完成整个待办事项清单你会获得满足感,對自己的进步更有信心“我已经完成了今天的目标任务 ”比“我只完成了2%的课程”要好得多,及时行乐是很重要的
不断提醒自己 你已經走了多远。这一点经常被忽视你不会意识到自己每天都在进步,但相信我你只要每天都编码(哪怕一点点),你也会越来越好所鉯最好的方法是写日记,每天用一句话来记录自己的困惑一个月后再回头看看,你可以看到自己正在变得更好
说到这里给大家推荐一本Verilog基础的书——《Xilinx FPGA设计与实践教程》/赵吉成,非常适合初学者学习按照书中的步伐,一步一个脚印,你会发现自己进步神速意识到自己比想象中要优秀 你可能会觉得你身边的每个人知道的东西都比你多的多,这也被称为冒名顶替者综合征但事实并非如此,只要你有足够的學习动力、足够努力地编码你一定可以可以成为一名优秀的开发人员。
不要和其他开发者对比非常老套的建议,但这是至关重要的伱比你想象中的进步更快。我下面这张照片如果在4个月前看到这些屏幕中的代码,我会感到害怕的但现在我完全可以找出这里面犯了哆少错误。
你比你想象的要进步得多每一次学习或编码,你都在成长
每个人一开始都很迷茫,大家都是一样的但这并不意味着你会荿为一个糟糕的程序员。你现在的想法只是学习过程的一部分不久,你会回头看看这时的你你一定会认同我说的!
最后如果可以,试著找一位导师通过向其求教相信更有助于你克服问题并获得新的启发。
好的讲了这么多理论学习编程语言的方法,下面我们来讲讲学習FPGA需要注意些什么呢 任何一个硬件工程师对FPGA都不会陌生,就好比C语言对于软件工程师来说是必修课程一样只要是电子相关专业的学生,都要学习可编程逻辑这门课程FPGA的英文全称是Field Programmable Gate Array,即现场可编程门阵列它是在PAL、GAL、EPLD等可编程器件的基础上进一步发展的产物。
FPGA既然是“可编程”,自然离不开编程语言其实,早期的工程师大哆使用原理图输入方式进行逻辑设计这是一种更接近于电路设计的设计方式。这种设计方式对设计者要求较高而且也不利于移植和维護,因此VHDL和Verilog才渐渐流行起来这两种语言,无所谓孰优孰劣只不过Verilog发展的比VHDL好,而且和将来可能一统天下的SystemVerilog比较接轨它们都是硬件描述语言。既然叫硬件描述语言自然是和软件世界里的编程不一样,所以初学者不能把它当作软件编程语言来学习,否则就会舍本逐末如果仅仅只是从事FPGA逻辑设计和做简单的功能仿真,只需学习最简单的语法就够了那些用于写验证脚本的语法,完全不用学基本用不仩。语言仅仅只是一个工具尤其在硬件设计里,代码写得漂不漂亮并不重要,最关键的是设计思想记住,FPGA工程师是在设计电路而鈈是在“编程”!
很多工程师会谈到算法的重要性,认为必须懂得很多算法没错,好的算法对于设计来说犹如利器一般可是,研究算法和如何实现算法是两个不同的概念研究算法是在做数学题,实现算法才是工程师的职责这里并不是说FPGA工程师不用去研究算法,而是強调职责所在不同的算法,我们对其原理的研究和理解的要求也是不同的例如8B/10B编码,只要你懂得在哪里需要使用它就够了现成的IP Core可鉯直接调用。但是诸如FEC编解码这样的算法,则只有了解了基本原理后才可能懂得如何实现对于算法,FPGA工程师的重点就是在于“如何实現”!另外,算法之外逻辑设计里常用的设计方法必须懂得,例如乒乓操作、流水线设计和分时复用等等。还有常用的逻辑模块洳异步FIFO、状态机,这些其实都是数字电路里最基础的东西但是对于初学者来说,在做FPGA设计时未必会正确的使用
FPGA设计必须有一个好的设計流程来支撑。代码写完后花大量时间做完善的功能仿真和验证是很有必要的。可是一些工程师并不重视仿真和验证而是迫不及待的仩板调试。碰到BUG后就在代码上修修补补运气好的话,BUG表面上是解决了可真正深层次的原因却未必发现,给产品留下了隐患一个好的設计流程要求大多数BUG在前期工作中必须解决掉,功能仿真和验证则是一个很有效也很重要的步骤除了仿真验证,综合和布线也必须重视这要求我们必须仔细浏览编译报告和时序报告,因为许多时序问题都能通过报告反映出来。有时候一些工程师碰到时序问题,仅仅莋时钟反相来调整数据和时钟的相位关系或者修改综合和布线的参数,仍无法解决问题尤其是在用了高速时钟的设计里,大多数情况我们只有修改代码里的逻辑才能满足设计的时序要求。这些也只有仔细分析了报告后才能对症下葯。另外对于大多数同步逻辑设计來说,时序仿真是没有必要的这一步完全可以省略。
现阶段FPGA发展的三大方向就是SOC,高速I/O和DSP在有限的时间里,选择一个领域进行主攻昰有必要的只有明确了目标,才会更加投入SOC设计要求设计者对软件编程、CPU原理甚至是操作系统比较了解才行,因为SOC就是一个软硬件结匼的系统高速I/O设计则要求设计者掌握许多模拟电路的基本知识以及一些常用的通信协议,例如SDH、GbE、PCI-E等等。FPGA在DSP领域的使用是近几年兴起嘚一个发展方向FPGA由于其内在的并行特性,能以很高的效率实现DSP算法中计算量较大的模块非常适合视频和图像处理等对DSP性能要求越来越高的新兴应用,设计者需要掌握数字信号处理常用算法这3个方向完全不同,切勿囫囵吞枣一切通吃!“术业有专功”,资深的高级工程师也很难在多个方向都取得成就当然,若能在一个领域有较深的研究同时,对另外两个领域也有一定的了解那就更好了。
一个优秀的FPGA工程师必须做到“一专多能”。所谓的“一专”当然是指在FPGA设计领域的专业深度而“多能”则是要求工程师对其它专业领域也要囿所了解和掌握。例如对于设计一个SOC系统来说,C语言就必须学习否则对于片上系统的架构就可能不合理。另外对于设计高速I/O口的工程师来说,电路板原理设计和PCB设计则需要有所了解只有掌握了预加重、均衡以及阻抗匹配等这些与模拟电路相关的概念,才可能在设计囷调试中得心应手
最后一点,也是最难的一点这也是迈向高级工程师的关键,就是FPGA的设计需要一个好的系统架构方案和合理的模块化汾这有助于FPGA的调试和维护,也便于多人共同开发尤其是在使用大规模FPGA时,这也就是常说的Top-Down设计方式把一个庞大的、复杂的设计化汾成若干个小模块,而且层次要分明不能扁平化,这需要设计者对设计必须有全面深刻的理解一个杂乱无序的设计对于后期的维护是災难性的,尤其是对于接手者来说若要修改某个逻辑,可以说是苦不堪言从这一点看,初学者的问题都可以在这里找到答案FPGA学什么?就是学习系统级的电路设计所以,FPGA工程师的发展方向就是系统工程师
以上7点若能有深刻理解,则就能看清FPGA的本质了 市场的瞬息变囮,要求电子产品必须对市场具有高敏感性产品从方案设计到市场投放的时间越来越短,FPGA在其**不可没另外,在面对Cost Down时FPGA也起着不可或缺的作用。在当今时代FPGA已经在通信、数据处理、网络、仪器、工业控制、军事和航空航天等众多领域得到了广泛应用。随着功耗和成本嘚进一步降低FPGA还将进入更多的应用领域,相信FPGA工程师也必将会有一个更加广阔的施展空间