很久没有发帖子了,很对不住大家。工作上已经不做FPGA了,并且工作上太忙。今天跟一个人聊FPGA,我就将我当时的一些话贴出来,大家就当随便看看,浪费一两分钟时间。
有人问我,三态门自己写了一个程序,却调试不出来。当然,我现在也没有用语言自己写一个三态门出来,我更习惯Ip Core里面的Tribuffer。自己编写的,是需要有点技巧,尤其是在控制信号那个地方。最好还是用ipcore,用ipcore的好处在于整个电路非常清晰。我曾经尝试着自己写一个三态门,但是调试过程中发现问题很多,所有后来干脆用系统提供的了。
另外,她说学习语言学了一个月,我觉得大可没有这个必要。语言那东西,只是工具。并且,常用的语法也就那么多,所以根本没有必要去专门学习。最好是用到的时候去查一下书,或者查一下外国人写的那个电子版的handbook。
拿到一个设计要求后,首先就用你学到的数字电路知识把整个系统大体给搭一个原理图出来,就像是用protel作电路板一样。什么地方能用一个译码器就可以解决了,什么地方能用一个复用器就可以解决了,等等。等到你明白了这些,就应该很容易的做FPGA了。我一开始也是总在看别人说哪个语言好\哪个工具好,并且一开始觉得原理图设计输入方法是最笨的,但是到后来,我忽然发现,这才是真正的高手。系统设计的顶层最好采用原理图模式,这样整个系统非常清晰,便于多人和自己维护,而在一些低层模块,可以用ip core的,尽量用ip core;不行的,就把功能细分,每一个子功能写一个vhd或v文件,然后编译成symbol,在原理图中调用symbol。
我只是在这里泛泛而谈,希望能够对初学者有一点帮助,如果有说得不对的地方,希望大家多多指正。
by channelelle
*******************************************************************
其实FPGA不是学会的,是做会的。遇到问题,解决问题和总结经验,不断往复,水平就提高了。
刚开始做,谁都会遇到问题。这时候不要动不动就张口问别人,要自己多想一想,试一试。比如,刚焊好的板子,上电后,下载不了,这是一个新手经常遇到的问题。
一般来说,大多数人会去检查下载电路的原理图,如果发现和正确的原理图没有区别就没办法了,开始怀疑芯片是不是坏了,焊接是不是有问题,是不是哪里有干扰啊等等。
而有的细心一些的人,就会仔细的看看下载的原理,信号的时序,用示波器看看板上信号的时序,一步一步的找原因。如果没有找到,就会仔细检查FPGA的电路,从电源设计,到去耦电容摆放等等方面去动手查找原因。如果觉得那里有问题,就动手改一看看,测一侧有没有改变,而不是坐着想哪里出问题。
可能最后就是芯片坏了,或者没有焊接好,但是后者确在这个过程中学到了很多东西,至少对FPGA下载的原理了解的十分清楚。
以上是随便举的一个例子,还有一点要忠告大家的就是不要轻易的怀疑芯片有问题,如果电路工作不正常,那么99%的原因是和设计有关的,是可以找到确定的原因的,而不是偶然的,即使是噪声或者干扰。
by RedLogic
****************************************************************
FPGA这东西最需要的就是自己去实际动手编写程序,哪怕仅仅是编写一个737,只有在不断的编写调试的过程中才能找到感觉。同意楼上的观点,不要过分的去看语法,常用的其实不多。我刚开始也是认为整个系统全部用语言编写最好,通过个人的经验教训才发现,顶层文件最后用原理图。
还有个建议就是平时多自己编写联系一些东西,比如花点时间编一点任意分频器啊锁相环啊什么的,从中会找到很多乐趣。当然必须要遇到很多困难才有乐趣了。如果什么困难都没有,那只能说您是高手了。
还有就是要互相之间多讨论,每个人的观点都可能是你学习的内容。
也乱想到这里.
还有要补充一点就是如果是做系统的设计,最后一定用同步系统。
by bluetooth884
****************************************************************
我是一个新新手,我也来说几句。我开始学EDA也有一年时间,开始我学verilog语言,当时没有条件,电脑没有,学习板也没有。我就天天看语法,看别人的程序。一直到今年3月份条件才改善,有自己的电脑和学习板,老师教是用VHDL,所以我就改学这个了。因为要准备9月份的电子竞赛,所以要提前学,凭老师教的那点东西肯定是不够的,我只花了一个星期的时间把很常用的语法记住,然后再花两个星期的时间看别人的程序,从别人的程序中学会基本格式。开始进步很慢,主要阻力是软件不会使用,全凭自己去摸索要很长时间,4月 12,13两天听了潘松老师的两天课,他主要是讲quartus的使用,感觉那两天学了很多东西。软件基本会使用后开始自己慢慢的编小程序,但真正要提高还是具体做点什么东西。接下来两个星期老师布置了一个数字频率计的题目,FPGA做处理,MCU做控制。但我对单片机不熟悉,结果下来感觉是单片机不能从FPGA读数据,题目没有完成。但这次具体的应用让我也学到很多东西,系统时钟,保持时间,建立时间等等一些很基本的概念,这些在高手们看来可能是再简单不过的东西,但一个新手全凭自己的摸索去了解这些东西已经是很不容易了。我没有夸自己的意思,我是想说真正要学到东西,一定要投入到具体的项目中去,这些话前辈们已经说过很多次。还有一点想说的就是,新手不要好高骛远,我就犯了这样的错误,最基本的没搞懂,我就想去学嵌入式系统。
我现在水平还非常非常有限,真正要我独立完成一个小系统的设计还很困难。有很多基本的东西我还不懂,但我很想学好这个。上次那个题目没有做出来,老师好像不怎么相信我的EDA了(呵呵)。再老师对这个不熟悉,他就什么东西只想用模电和单片机做出来,其实给我很大感觉就是对于同一个题目EDA可以在很大程度上弱化单片机,使题目变的更加容易实现。所以现在要加紧学好,到9月份还不到半年的时间了,我能学成什么样子呢?我们这里教EDA的老师很少,就2个,给我们上课的老师讲了半学期的ABEL。很多不懂的东西没人问,只能在这里发发帖子问问这里热心的人了。
感谢曾经给过我莫大帮助的DX们。希望你们的帮助让我有质的飞跃!
by fenglouto1
***************************************************************
to channelelle:虽然前面回文的评价还可以,但是我想我还是应该很直接要指出你其中很多的错误思想,我不想有更多的受到误导,请原谅我说的比较直接。
系统级的设计我们为什么还需要画原理图?我们在总体设计方案中可以将一级模块划分好,将一级模块的接口时序定义好,完完全全没有必要用画原理图,除非你在做设计之前是不做方案的或者方案做的很差。
我们要求设计要尽量的做到与器件无关(除了FIFO、PLL等),你这样画原理怎么实现平台的无关性?如果我之前用的是altera的器件,现在要转成xilinx的,你那原理图还能用?
一般来说芯片厂家的EDA工具综合性能都一般,如果你要用第三方综合工具怎么办?
还有,你这样画原理图那仿真怎么办?你该不会用quartus下画波形图吧?我们大的设计用modelsim都要跑几个小时,你画原理图怎么在第三方仿真软件下做仿真?
还有,如果画原理图有用,人家还要弄个systemC、E语言、system verilog做什么?
另外,你为什么连写个三态门还要调core,一行就可以描述出来的呀!
by wangdian
*************************************************************
看了大家的发言,觉得自己还是要暴露一下自己的问题了。我呢,毕业时到公司直接就接触了公司以前的设计内容,为了更快的完成任务,只能在以前的系统设计上修修改改,慢慢的发现一些问题,但是也只能一步一步来,所以就开始学习语言,因为有些东西确实用语言来设计输入比较快。但是为了和以前的系统一起工作,就有了很多限制。现在一直比较烦恼,为了这个系统。不知道何时才是一个头。自己设计其实已经比较习惯了原理图的形式,因为刚开始的时候都学习的那些,在这个转换过程中是不是都会有一段比较迷茫?谢谢大侠们分享那么多的心得和知识,在这里我们学习到了很多。
by kuangshunlan
**************************************************************
看到了很多和自己相似的经历。。。。
TO wangdian:channelelle的意思你可能理解错了,他其实是想说,对系统而言要模块化,便于大系统调试,调用IP CORE是一种优化、快捷的方式。也许channelelle的思想更适合技术的市场化,对企业而言讲求的是效率、速度,做研究嘛,你可以从三级管去研究起,呵呵~~这也是北京与深圳的区别,不可否认北京牛人很多。。。但是。。。。。
当然FPGA还是属于硬件,对综合出来的各个功能模块要有深刻的理解,尽量从寄存器级去考虑它的性能,而不是行为级。
by xiaozheng
**************************************************************
:同意wangdian。
原理图输入应该尽量抛弃,系统设计必须考虑前期调试、后期维护和移植。
xiaozheng的话有些牵强,说什么北京和深圳的区别就是风凉话了,大家都是搞技术的,就事论事,IP Core要看什么场合,三态门一句话就搞定了你还要用Ip core,在这里开坛讲座如何让人信服?
by duohaodai
****************************************************************
re:duohaodai
我不反对各分模块用语言来描述,但是顶层用原理图描述条理更加清晰,也方便别人参阅,元件例化一大堆谁明白?当然,如果你的资料整理的比较好,并另给出总体结构图也是可以的,移植的确是个问题,不过现在的企业有又谁同时在使用几个平台的呢。
IPcore为什么老是要咬住三态门来讨论?说白了,大多数企业干的就是调函数包,底层核心的开发你还是去altera\xilinx\micosoft\ibm去研究吧
by xiaozheng
***************************************************************
我也来说两句吧,
做设计前就应该考虑好系统结构,这叫成竹在胸:)
而具体到设计实现阶段的话,原理图输入是没有必要地,
还有、对于一些小的底层单元,比如shifter,mux,adder等等,
还是不要采用实例化ip core模块的方式为好,用HDL语言描述就好了(这叫引用模块的方式叫inference),
原因就是在设计实现的阶段、要充分考虑到design portable ,code reusable 。
by chips
*************************************************************
我觉得大家有些误解原理图输入方法了,在做大系统时,一定要自顶向下的设计,当每个底层模块用语言设计完毕并且仿真调试OK后,将其编译为图形模块,然后在顶层用原理图输入的方法调用这些模块,将各个模块用信号线连接起来,构成整个系统。这里所说的原理图输入的方法并不是一定要用各种标准的逻辑元件组装电路,而是用语言设计的功能模块组成系统。看这样设计的顶层文件,系统结构一目了然,这和纯语言设计前所做的系统逻辑框图是一样的,都是为了清晰的描述系统结构。
当然,是用纯语言设计好,还是用图形输入法设计顶层再调用用语言设计的底层模块也好,我看这两种方法都好,应根据个人的爱好和习惯而定,就象用VHDL语言或用VerilogHDL语言都能设计好的系统一样,大家说呢?
by 枫
***********************************************************
各位,你们做过多大的系统啊,老是在这里误导别人?这篇文章写的几乎全是误导别人的话,就拜托你们别在叫好了!
层次结构不是靠原理图保证的,是靠文档!系统级建模也不会用原理图去做啊,不然大家去弄个system C、system verilog做什么?
by wangdian
***********************************************************
迫不及待的看完六页,有很多是跟我想法相同的,也有不一样的。
工具这东西(包含语言)只要用熟了应该都好用。但相比之下肯定有个容不容易上手的问题,当然前提是都对新手而言,如果要一个画了几年原理图的去用Verilog或是VHDL语言,当然感觉很不爽。
我个人认为为什么在有了原理图设计法的前提下又开发出Verilog等语言,肯定是有一定道理的。对新手而言,这些语言绝对更容易上手,而且还有很多其它的优点。但肯定也有它自身的不足,呵呵。
重要的不是开发工具,而是开发思想。
by dsp20tlh
**********************************************************
首先就用你学到的数字电路知识把整个系统大体给搭一个原理图出来,就像是用protel作电路板一样。什么地方能用一个译码器就可以解决了,什么地方能用一个复用器就可以解决了,等等。等到你明白了这些,就应该很容易的做FPGA了
听起来好象整个FPGA设计都是在做数字电路设计了
by tianhun
*********************************************************
我认为,你说的非常客观、也很诚恳。我也作了一段时间的FPGA了。
由于我自小就对电子技术很感兴趣,经常摆弄一些电子器件,所以对硬件的理解更深入一些,所以对于我来说,我开始做FPGA设计的时候,就是直接从原理图输入开始的。我认为这样容易理解,而且非常直观。当让致命的缺点就是设计移植性能不好。
我现在也在强迫自己将一些简单模块用语言去写出来,封装成模块,到原理图中去调用。
今天看到您的帖子,我很高兴自己的一些设计方法可以得到高手的认同。
我现在也是刚刚开始学习Verilog。由于习惯于理解原理图输入,我只能强迫自己去用语言。因为很多人都告诫我,很多大公司都要求用语言进行设计,所以为了以后能混口饭吃,还是要学些语言。
我的邮箱地址:fylouis@126.com
期待着与高手交流经验与心得。
by fylouis
*******************************************************
虽然来晚了,还是要双手赞同。
在总体设计方案中将一级模块划分好,将接口时序定义好,没有必要用画原理图。这种方法似乎清楚,但是既然把设计都能画出来,那在在文档中体现功能框图和接口连接关系应该比较容易,可能在设计初期修改方案采用原理图比较方便而已。我们采用高级语言来设计,尽量要作到和器件无关。况且,当产品上量后,要不要投 ASIC来降低成本?当工艺提高后,采用ASIC实现的成本有可能比采用FPGA低很多。这个时候就出现问题了,设计怎么移植?有可能重新设计,仿真。
by goldlion98
*****************************************************
在FPGA领域可能还有原理图一说,但在ASIC基本无此观点,可能说玄了就是电路在我心,基本两个字同步。
对于设计而言,我也不反对用原理图,因为每个人都有一个学习得过程成长的过程,但如果你要做IC,就可以在以后抛调原理图。
对于初学者可以先用原理图,在顶层用原理图是一些FPGA设计者喜欢的方法,其实无可厚非因为不作IC,但是在底层用原理图我不推荐,因为那会阻碍你前进的步伐。
by jjliu
*****************************************************
呵呵,在FPGA做顶层模块时,原理图也好,程序描述也好,看个人习惯了,总之就是要做到结构清晰,便于修改和维护即可。不过个人觉得,使用原理图方式的确会碰到程序移植方面的问题,我自己更习惯于用程序来描述各模块之间的连接。
至于看前面帖子有人这么说“真正的牛人都是搭底层电路设计的…” 我是这么理解的,能用底层电路搭起自己所需要的设计的,证明ta对整个设计理解很深,理解已经到了rtl级,而不是只停留在行为级的理解上。因此所谓之牛~ 呵呵,个人理解,欢迎拍砖。
不过,还是觉得hdl语言方便些,当然可能有人觉得自己用基本电路搭更得心应手,更可控;但如果你能够充分地理解你用hdl语言,并保证描述的电路综合之后就是你想要的,那我觉得那也是高手~ 只是高手和高手的习惯不同而已… :)