FPGA学习心得体会

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

篇一:fpga学习心得大报告
《fpga技术基础》学习报告
--课程内容学习心得
姓名:
学号:年级专业:
指导教师:
瞿麟 201010401128 自动化101薛小军摘要从开始学fpga到现在粗略算来的话,已经有3个多月了,就目前而言,我并不确定自己算不算高手们所说的入门了,fpga学习总结。

但是不管现在的水平如何,现在就总结一下自己学习它的感受或一些认识吧。

关键词
fpga de2板 quartusii软件 verilog语言
引言
fpga是什么?fpga现状?怎样学习fpga?
fpga是现场可编程门阵列的简称,fpga的应用领域最初为通信领域,但目前,随着信息产业和微电子技术的发展,可编程逻辑嵌入式系统设计技术已经成为信息产业最热门的技术之一,应用范围遍及航空航天、医疗、通讯、网络通讯、安防、广播、汽车电子、工业、消费类市场、测量测试等多个热门领域。

并随着工艺的进步和技术的发展,向更多、更广泛的应用领域扩展。

越来越多的设计也开始以asic转向fpga, fpga正以各种电子产品的形式进入了我们日常生活的各个角落。

正文
(1)掌握fpga的编程语言
在学习一门技术之前我们往往从它的编程语言开始,如同学习单片机一样,我们从c语言开始入门,当掌握了c语言之后,开发单片机应用程序也就不是什么难事了。

学习fpga也是如此,fpga的编程语言有两种:vhdl和verilog,这两种语言都适合用于fpga的编程。

(2)fpga实验尤为重要
除了学习编程语言以外,更重要的是实践,将自己设计的程序能够在真正的fpga里运行起来,这时我们需要选一块板子进行实验,我们选择使用de2板才进行试验。

初识de2开发板
de2的资源de2的资源非常丰富,包括
1. 核心的fpga芯片-cyclone ii 2c35 f672c6,从名称可以看出,它包含有35千个le,在altera的芯片系列中,不算最多,但也绝对够用。

altera下载控制芯片- epcs16以及usb-blaste对jtag的支持。

2.存储用的芯片有: 512-kb sram,8-mbyte sdram,4-mbyte flash memory
3. 经典io配置:拥有4个按钮,18个拨动开关,18个红色发光二极管,9个绿色发光二极管,8个七段数码管,16*2字符液晶显示屏,
4. 超强多媒体:24位cd音质音频芯片wm8731(mic输入+linein+ 标准音频输出),视频解码芯片(支持ntsc/pal制式),带有高速dac视屏输出vga模块。

5.更多标准接口:通用串行总线usb控制模块以及a、b型接口,sd card接口,irda红外模块, 10/100m自适应以太网络适配器,rs-232标准串口, ps/2键盘接口
6.其他:50m,27m晶振各一个,支持外部时钟, 80针带保护电路的外接io
7.此外还有:配套的光盘资料,qutuarsii软件,niosii 6.0ide,例程与说明文档。

关于管脚分配
当我们创建一个fpga用户系统的时候,到最后要做的工作就是下载,在下载之前必须根据芯片的型号分配管脚,这样才能将程序中特定功能的管脚与实际中的fpga片外硬件电路一一对
应。

fpga简单的说,就是现场可编程逻辑阵列。

它的内部是逻辑单元,它们之间可以用线连接,至于以怎样的形式相连,则可以根据应用者写入的逻辑决定。

每次布线都会重新组合逻辑单元,从而可以任意的编写不同的逻辑。

当然,前提是定义的逻辑块不超出它可读写的最大值。

总结在学习fpga时,遇到的问题有许多,譬如,写代码时的警告,特别是一些不能忽视的警告,每次遇到时,总是还要检查一会儿才能改过来,或者有的警告已经出现了几次,但是就是解决不掉。

每次在学一个模块时,只要是看懂了,它的一些重点就没有及时的记录在本子上,只有个别的想起来时,才会做笔记。

每做完一个模块,没有及时记录下自己从这个模块中学到了什么。

上面的不足,都是在写模块的过程中,自己逐渐暴露出来的。

我很庆幸自己的一些问题能及时的被发现,避免类似的事情再次发生。

像遇到警告时,都要记录下来,通过改正后,要注释,写下警告的原因,定期看一下。

每次写模块的时候,都要记下重点知识,即使是自己懂得的,好记性都是比不过烂笔头的。

关于以上的总结,我相信在以后的学习中一定会对自己有莫大的帮助,它会时刻警醒自己,在以前的学习中,自己有哪些不足,以后千万不能再去犯同样的错误,不断地纠正,不断地进步,相信自己一定会学好fpga的。

篇二:fpga学习心得
回想起自己学fpga,已经有一段时间了,从开始的茫然,到后来的疯狂看书,设计开发板,调电路,练习各种fpga实例,到最后能独立完成项目,一路走来,感受颇多,拿出来和大家分享,顺便介绍下自己的一点经验所得,希望对初学者有所帮助。

废话不说了,下面进入正题,学习fpga我主要经历了这么几个阶段:
①、verilog语言的学习,熟悉verilog语言的各种语法。

②、fpga的学习,熟悉quartusii软件的各种功能,各种逻辑算法设计,接口模块(rs232,lcd,vga,spi,i2c等)的设计,时序分析,硬件优化等,自己开始设计简单的fpga板子。

③、niosii的学习,熟悉niosii的开发流程,熟悉开发软件(sopc,niosii ide),了解niosii 的基本结构,设计niosii开发板,编写niosii c语言程序,调试板子各模块功能。

先来说说第一个阶段,现在主要的硬件描述语言有vhdl,verilog两种,在本科时老师一般教vhdl,不过现在
verilog用的人越来越多,其更容易上手(与c语言语法比较类似),也更灵活,现在的ic设计基本都用verilog。

像systemc,systemverilog之类的应该还在萌芽阶段,以后可能会有较大发展。

鉴于以上原因我选择了verilog作为我学习的硬件描述语言。

其实有c语言的基础,学起verilog的语言很简单,关键要有并行的概念,所有的module,assign,always都是并行的,这一点与软件语言有明显不同。

这里推荐几本评价比较好的学习verilog的书籍:
①、《verilog 数字系统设计教程》,这本书对于入门是一本很好的书,通俗易懂,让人很快上手,它里面的例子也不错。

但本书对于资源优化方面的编程没有多少涉及到。

②、《设计与验证verilog hdl》,这本书虽然比较薄,但是相当精辟,讲解的也很深入,很多概念看了这本书有种豁然开朗的感觉,呵呵。

学习verilog其实不用看很多书,基本的语法部分大家都一样,关键是要自己会灵活应用,多做练习。

verilog语言学了一段时间,感觉自己可以编点东西,希望自己编的程序在板子上运行看看结果,下面就介绍我学习的第二个阶段。

刚开始我拿了实验室一块cpld的开发板做练习,熟悉quartusii的各种功能,比如ip的调用,各种约束设置,时序分析,logiclock设计方法等,不过做到后面发现cpld的资源不太够(没有内嵌的ram、不能用signaltapii,le太少等),而实验室没有fpga开发板,所以就
萌生了自己做fpga开发板的意图,刚好cadence我也学的差不多了,就花了几天时间主要研究了fpga配置电路的设计,在板子上做了jtag和as下载口,在做了几个用户按键和led,其他的口全部引出作为io口,电路比较简单,板子焊好后一调就通了(心里那个爽啊...)。

我选的fpga是cycloneii系列的ep2c5,资源比以前的fpga多了好几倍,还有pll,内嵌的ram,可以试试signaltapii,用内嵌的逻辑分析仪测试引脚波形,对于fpga的调试,逻辑分析仪是至关重要的。

利用这块板子我完成了项目中的几个主要功能:rs232通信,指令译码,配置dds,ad数据高速缓存,电子开关状态设置等,在实践中学习起来真的比平时快很多,用到什么学什么动力更大。

这个时候我主要看的数据有这几本感觉比较好:
①、《altera fpga/cpld 设计(基础篇)》:讲解一些基本的fpga设计技术,以及quartusii 中各个工具的用法(ip,rtl,signalprobe,signaltapii,timing closure floorplan,chip editor等),对于入门非常好。

②、《altera fpga/cpld 设计(高级篇)》:讲解了一些高级工具的应用,logiclock,时序约束很分析,设计优化,也讲述了一些硬件编程的思想,作为提高用。

③、《fpga设计指南--器件,工具和流程》:这本书看了他的目录忍不住就买了,这本书讲述了fpga设计的各个方面,虽然每个方面都是点到为止,但能让你有个整体的概念,了解fpga的所有设计功能,了解fpga开发的整个流程。

④、在这里也推荐几个学习fpga比较好的论坛
,不过很多人一看到英语就不想看,其实上面的英文很简单,很多时候不敢看是因为对自己没信心或心静不下来看。

不过官方网站上资料很多,刚开始可能会觉得资料安排的有点乱,不方便查找,以后有时间我列个资料的链接目录,整理一下,方便大家查找。

到这里,自己最fpga的学习有一段时间了,练习了很多实例,自己也编写了不少程序,也有了一些项目经验,算是对fpga有些了解了。

在不断的学习中发现fpga不仅可以做逻辑设计,算法设计等,还能做嵌入式开发,altera先后开发了nios,niosii两款fpga的嵌入式软核,并有配套的软件,刚开始看到这些我真是心中突然豁然开朗,学习真的是无止境,又一个全新的领域摆在我面前,我决定学习niosii,要学就要学最好。

刚开始入门是很痛苦的,嵌入式设计需要从硬件到驱动到软件全部熟悉,硬件系统问题还不是很大(以前做过单片机,dsp等mcu),处理器的架构心里还有点数,对于驱动和软件工程,刚开始学习真的很头痛。

niosii应该还算比较新的内容(应该是2004年出的),国内的书籍不算很多,网上这方面的资料也比较零碎,所以我就开始将altera网站上这方面的资料系统的看一边,这里推荐几本网站上的handbook:
①、embedded design handbook
②、nios ii processor reference handbook
③、nios ii software developers handbook
④、quartus ii handbook, volume 4: sopc builder
⑤、quartus ii handbook, volume 5: embedded peripherals
看完这些handbook,总算基本明白整个架构,软硬件设计方法,驱动的编写等,感觉自己可以编一些嵌入式的程序了,不过虽然前面做的那块ep2c5的板子支持niosii系统,不过对于嵌入式设计来说还是显得单薄了一点,没有sdram,flash这两个比较基本的模块,ep2c5内嵌的ram太小,程序写不大,而且每次总要绞尽脑汁优化程序代码大小,很多时候优化了后函数功能会受到限制,不利于初学者,也不利于调试。

所以到这里我有产生了自己做一块nios 开发板的想法(直接买比较贵,自己做便宜,而且还能锻炼自己,一举两得),通过借鉴其他开发板,选择自己开发板上需要包含什么模块,确定各个模块使用什么芯片,阅读各个芯片的datasheet,画出原理图并做出pcb图,这块板子我选的是ep2c8q208,比上一块资源又将近多了一倍,板子上还有以下模块:sdram,flash,epcs4,rs232,usb,vga,ps2,ad,da,lcd
等,满足了一般开发板的配置要求。

板子回来以后调试了四五天,(flash工作了,lcd显示了,rs232通了,usb通了,ad,da工作了,sdram正常了...),真是每天都有惊喜,每个模块都编写了niosii软件测试程序,调试硬件的时候对软件的运行也更熟悉了。

在这次调试的过程中真的学到了很多,为此专门写了好几页调试笔记,下次拿出来和大家一起分享。

现在硬件平台有了,niosii也了解的差不多了,终于可以自己编写一些规模大一点的程序了。

学fpga的一点心得
从去年开始学fpga,以前一直做dsp,但因为项目的需要,在一个应用中只有fpga才能解决问题,所以硬着头皮上fpga,又因为结项目的时间比较紧,所以主要以解决问题为目的,说真的,项目做下来写了四千多行的代码,达到了设计目标,但对fpga学习还不够系统,也正进一步的学习中.因为我是单干,没有团队,遇到问题只能在网上找资料,其难度可想而知,幸好以前用过cpld,有一点基础,用的编程语言是ahdl,感觉ahdl写一点小程序还可以,但做复杂程序就有点费力了(应该是我的ahdl没学好),所以在做fpga程序时我选择了比较简单的verilog语言。

由于没人指导,所以买了一个简单的fpga开发板,是cyclone的,开发板就是好,送了较多学习资料,用了一个星期的时间,学习了niosii的基本应用,当然,我的需要就是知道如何在nios里控制一个信号的高低电平变化就够了,其它全是c语言的东西,主要是熟悉了quartus的开发平台,并用nios程序把要实现的主要代码用c写了一遍,通过了,但速
度上不去。

有这些知识做铺垫后,就开始了项目的设计。

项目要求将外部高速数据(40mb/s)进行存盘,并可以将存盘的数据在适当的时候原路返回(速度不变)。

所以在硬件的设计上fpga选择了ep2c35f484c8n,外部有128m的sdram做为数据的缓冲。

所以fpga的主要程序集中在atahost控制器(实现udma读写)、sdram控制器(大容量循环缓冲)上,当然还包括一些其它的控制,如实时时钟,usb2.0芯片控制,
rs232的通信及相应的通信协议。

硬件完成后,大部分的时间都在写程序,感觉verilog跟c差不多,就将原来写成的c代码翻译了一下,每写一段代码就测试一下。

起初并不知道在quartus里还有逻辑分析仪的功能,所以程序出了问题只能使劲的分析代码,猜想问题可能出在哪里,万不得已时才做一下仿真(后来看很多有做程序都先做仿真,仿真通过后再下载到目标板里运行测试,但到现在我的仿真关还没过),所以做得很累。

我感到这样做下去到时间结点肯定结了不了项目,就找fpga 的qq群向高手们请教经验,知道了可以quartus的逻辑分析仪来观察信号,哈哈,爽了(感谢感谢)。

后面的程序找问题就容易多了,按照ata协议、sdram手册、及各外围芯片手册一步步写下去,当然其中也遇到了各种各样的问题,但很快得到解决。

一直到
项目结束,都是用逻辑分析仪来找问题,没做过仿真(所以现在仿真关还没过)。

今年又用fpga做了一些项目。

简单说一下体会吧,归结起来就三个字:做、想、问。

书读千遍,不如做一遍;看别人做百次,不如自己做一次;就是要实践。

实践的动力一方面来自兴趣,别一方面来自己压力,我个人觉得后者更重要。

有需求会容易形成压力,也就是说最好能在实际的项目开发中锻炼,而不是为了学习而学习。

在做的过程中要多想,多想想问题出现的原因,问题解决后要多问几个为什么,这也是经验积累的过程,最好要写项目日志,把问题及原因、解决的办法都写进去。

还要多问,遇到问题经历了痛苦的思索后还得不到解决就要问了,问搜索引擎,问网友,问同学同行,一篇文章、朋友们的点拨都可能帮助
自己快速解决问题。

fpga入门心得及系列资料
不知道为什么自己每次接受一个新事物,总要花上那么长的一段时间。

每个东西,总要经过从一点都不了解,到有点了知道,到最后才想知道要来学学,但每次学习时也总是走马观花。

可能真的受中国的教育思想束缚的太严重了吧。

以前的人读书,好像也没有什么目标,只是
知道上课要认真听,考试要考好。

这样就可以了。

也从来没想过,我学这个到底有什么用呢。

但是上了大学后,一切都改变了。

我们的学习也不再是为了考试而考试了。

尤其是像我们学电子,假如仅仅是为考试的话,那你的大学完全可以过得很轻松,整天睡觉,游戏,照样可以考高分。

那样毕业了,你说你的大学学习是不是等于0。

到头来还是什么也不是。

所以当你进入大学,当你选择了电子,就决定了你从此要为之付出。

不管将来怎样,只要你朝着自己的方向走,一定会成功的。

现在说说fpga的学习吧,或许,很多人刚接触fpga时,可能还在为到底什么是cpld,什么时fpga,我到底要学习哪门语言而苦恼,不知大家是不是这样,但是我曾经就是这样,也到网上去找过,最后也终于找到了答案。

因为那时身边的人都还没学过。

其实cpld,fpga 最大的区别也就是fpga的程序必须由配置芯片经过上电后,将程序写入芯片中,也就是fpga 的内部存储器是相当于内存一样,一掉电就没了。

而cpld是像单片机一样,程序是存储存在内部中的,一上电就可以跑了。

二者的功能差不多,但是fpga的资源比cpld更加丰富。

在cpld上可以实现的功能,在fpga上基本都可以实现的。

所以也不必去想太多什么是fpga,cpld了,只要弄懂了二者的内部结构就可以了。

至于学什么语言吗,首先要看你们在校老师上课是用什么语言,就先那个语言吧,我们学校老师是用vhdl语言的,所以一开始我也是先学vhdl语言,而且学习资料比较多,但是在网上看到,好像公司里面用的比较多的是verilog hdl语言,为了能看懂一些资料,现在也在学verilog hdl语言,学习中发现,要是学过c语言的人,会发现verilog hdl好像更加好理解。

一旦你开始了学习fpga,那就要坚持下去,因为语言这东西,要是不一下子把它强记住,过不了两天就又忘了,书本的东西,一定要越快消化越好,这样你看别人的程序时就不会有什么语言障碍了。

之后就是编写程序,模仿别人的模块,仿真实验,这步很重要,要不你就不会发现fpga功能的强大,你也不知道到底仿真的结果和实际是不是有差别。

当你成功时,你一定会感到成功的喜悦。

当你基本的程序都看得懂时,有完整地编个程序,而且在硬件上实验过时,那么祝贺你入门了,之后的道路就是不断的实践,跟学习单片机一样,只有不断的学习,不断的做东西,你的编程能力才会提高。

以上仅仅为作者本人的一点观点,本人现在还是一个电子白菜,只是苦于自己学习电子找不到捷径,不想还有更多的人跟我一样,在电子的道路中不断摸索,不断徘徊。

看过一个高手对fpga的认识,自己对fpga未来的发展更是看好,鉴定了学好的决心,fpga 在电子开发工作中已经上升到数字系统核心处理器,尽快掌握fpga开发技术显得非常迫切。

总结了一下:
传统的开发方式:一半固定,硬件cpu是不可编程的,另一半灵活是可编程的软件
fpga新开发形式:两个部分都是可编程了,fpga,它代表的就是硬件的编程。

这两部分都可编程的一个结合点就是fpga上的软核。

另外可以根据需要通过外部单片机把合适的应用bit 流写入到fpga内,从而完成根据功能需要变更硬件。

硬件可重构!
使计算机的能力越来越强,方法一:通过提高工艺来提高工作频率;方法二:通过优化系统体系,并行!
新学习思想: fpga设计有点象围棋:易学难精
带着问题学习是最有效率的
时序性能的调整提高是fpga开发能力的标志
多看书,但要注意,书当做字典,不是所有地方都去看。

目前,在fpga上有三种类型开发方法和应用方向:a、逻辑类应用 b、软核类应用 c、dsp 类应用。

逻辑类应用我们接触的最早,也是fpga最初的应用领域,大的应用上,一些数字ic设计可以在fpga做前期的功能验证,在通信领域,fpga做信号的编解码等等,小的应用上我们做的最多的实际是cpld,完成信号的变换控制等等。

软核应用是前几年才兴起,现在热门的开发应用方法,在原本需要fpga结合cpu的地方有成本和灵活性优势。

fpga的dsp应用是非常有潜力的,性能优势非常明显。

开发方法是用matlab的simulink中嵌入厂商的开发工具包,算法验证在matlab simulink工具下完成,在开发工具包的支持下生成hdl模块或者直接生成fpga下载配置文件,这个方向是fpga应用最有挑战能力领域。

mathworks公司不久前也推出了独立于fpga厂商的simulink hdl coder工具,使的matlab 在数字系统设计领域迈出了坚实的一步,把simulink 模型和stateflow框图生成位真(bit-ture)、周期精确(cycle-accurate)、可综合的verilog和vhdl代码,为matlab simulink用户提供了通往fpga设计实现的直接通道。

篇三:fpga经验总结(精华)
fpga/cpld数字电路设计经验分享
关键词:fpga 数字电路时序时延路径建立时间保持时间
1 数字电路设计中的几个基本概念:
1.1 建立时间和保持时间:
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时
间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间,如果保持时间不够,数据同样不能被打入触发器。

如图1 。

数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。

pld/fpga开发软件可以自动计算两个相关输入的建立和保持时间(如图2)
图1 建立时间和保持时间关系图
注:
? 在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该
考虑时钟树向前偏斜的情况。

在进行后仿真时,最大延迟用来检查建立时间,最小
? 延时用来检查保持时间。

建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率
就可以使系统完成工作。

保持时间是一个和时钟周期无关的参数,如果设计不合理,
使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达
到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。

因此合理的设计系统的时序是提高设计质量的关键。

在可编程器件中,时钟树的偏
斜几乎可以不考虑,因此保持时间通常都是满足的。

1.2 fpga中的竞争和冒险现象
信号在fpga器件内部通过连线和逻辑单元时,都有一定的延时。

延时的大小与连线的
长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。

信号的高低电平转换也需要一定的过渡时间。

由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为毛刺。

如果一个组合逻辑电路中有毛刺出现,就说明该电路存在冒险。

(与分立元件不同,由于pld内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在pld、fpga设计中尤为突出)图2是一个逻辑冒险的例子,从图3的仿真波形可以看出,a、b、c、d四个输入信号经过布线延时以后,高低电平变换不是同时发生的,这导致输出信号out出现了毛刺。

(我们无法保证所有连线的长度一致,所以即使四个输入信号在输入端同时变化,但经过pld内部的走线,到达或门的时间也是不一样的,毛刺必然产生)。

可以概括的讲,只要输入信号同时变化,(经过内部走线)组
合逻辑必将产生毛刺。

将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。

所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺
图2 存在逻辑冒险的电路示例
图3 图2所示电路的仿真波形
冒险往往会影响到逻辑电路的稳定性。

时钟端口、清零和置位端口对毛刺信号十分敏
感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。

如何处理毛刺
我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。

例如,在数字电
路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。

毛刺并不是对所有的输入都有危害,例如d触发器的d输入端,只要毛刺不出现在时
钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说d触发器的d输入端对毛刺不敏感。

根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。

(由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)
去除毛刺的一种常见的方法是利用d触发器的d输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。

图4给出了这种方法的示范电路,图5是仿真波形。

图4 消除毛刺信号方法之二
图5 图4所示电路的仿真波形
如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,
但它并不能完全消除毛刺。

毛刺并不是对所有输入都有危害,例如d触发器的d输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。

因此我们可以说d触发器的d输入端对毛刺不敏感。

但对于d触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处理,我们可以把危害降到最低直至消除。

下面我们就对几种具体的信号进行探讨。

1.3 清除和置位信号
在fpga的设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为
他们也属于全局的资源,其扇出能力大,而且在fpga内部是直接连接到所有的触发器的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普通的io脚则不能保证该性能。

在fpga的设计中,除了从外部管脚引入的全局清除和置位信号外在fpga内部逻辑的处理中也经常需要产生一些内部的清除或置位信号。

清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。

在同步电路设计中,有时候可以用同步置位的办法来替代异步清0。

在用硬件描述语言
的设计中可以用如下的方式来描述:
异步清0的描述方法:
process(rst,clk) begin
if rst=’1’ then count<=(others=>’0’); elsif clk’event and clk=’1’ then count<=count+1; end if; end process;
同步清0的描述方法:
process。

相关文档
最新文档