【精品】fpga学习心得_第1页
【精品】fpga学习心得_第2页
【精品】fpga学习心得_第3页
【精品】fpga学习心得_第4页
【精品】fpga学习心得_第5页
已阅读5页,还剩5页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、fpga学习心得学习fpga-个多刀以来,完全从零开始学习,感觉自己学到的东西真不少,虽然还不 是很熟练,不过也对fpga有了很好的了解。以前一点没有想过要來总结些什么,是感觉自 己对于fpga根木就像是一无所知一样,虽然天天在学,不过确实没有一个总体观念,学的 东西太混乱也没有一个总体的框架。到了今天终于觉得口己的学习已经小有成就了,虽然还 是没有能够独立设计的白信。在最初学习的时候最主要就是对于fpga结构的一个基木认识和对硬件描述语言vcrilog hdl语言的学习。z所以选择学习fpga是因为在这一学期找工作中发现,现在很多公司都 需要会一点fpga方而的知识,在笔试的吋候也会偶尔遇到

2、些用hdl语言编程的试题。现 在很多硬件工程师已经不再是单纯的用传统的方法进行电路的设计,至少现在很多招聘的岗 位当屮不再是单纯的电路的设计了,很多都涉及到嵌入式和hdl语言。fpga现在正在以异 常的速度发展,在08年全球金融危机的时候大多数行业都呈现在下滑的趋势,而fpga的厂 商如xilinx和altera等公司的收入却呈现出增长的态势。在我看來fpga必将是将來硬件工程 师不可缺少的一项木领,这也就是我学习fpga的原因之一。一、硬件描述语言:对于硬件描述语言(hdl)语言我选择的是和c语言类似的verilog hdl语言,虽然 vhdl语言在很多方面优于vcrilog hdl语言,但

3、是作为初学,还是先学习一个简单一点的 语言,尽量先将所需要学习的东西过-遍,将來等时间允许的时候再去学习vhdl语言, 在网上有看到现在出來了一个叫system verilog的语言,据说融合了 verilog和vhdl语言 各口的优点,可能将来会成为行业统一的语言吧。verilog hdl现阶段主要接触的就是对组合逻辑电路和时序电路的描述了。所接触的程序中以always (*)模块居多,儿乎是所见过模块的核心部分了,其实在学习这个语言 上而也没有花太多的时间,因为有对c语言的学习,所以就先入为主了。当了解了其基木 语法过后就开始了实例的分析,在此过程中也冇了解fpga的结构,不过感觉没冇真止

4、使用 过fpga所以对于那些什么pll、sram、sdram、norflash等都没有什么直观的感觉,所以对于 程序也根木不知道这样些的原因和到底能实现什么功能,这也成为了我学习vcrilog hdl语 言的一个障碍。二、fpga的基本结构:在这里还是得认识清楚fpga的结构,记得冇一个在外面去面试的时候,别人就问了我 一个问题fpga和mcu的联系与区别?当时我根木都还没有接触过fpga,只知道fpga是 属于硬件方而的开发板。后來通过自己对fpga的接触和网上的相关说明终于有了一个初步 的认识。接卜-來就具体说明一 f:mcu又称为单片机,它为8位的微控制器,主要用在工业控制,fpga则为

5、可编程逻 辑器件的一种,拥有丰富的硬件资源,可实现强大的逻辑功能,山于其硬件重构的特性,适 合各种领域的应用;mcu的编程语言主要为c语言,以软逻辑实现,它通过顺序执行指 令来实现特定功能,避免不了低速的缺点,相比z下,fpga它以verilog或vhdl等硬件 描述语言为编程语言,由于直接由硬件实现逻辑,所以它并行执行,从而使速度人人捉高; mcu的这种同一时间只能处理一条指令的特点也影响了它的应用,它只能用于一些算法的 设计及简单的控制,而fpga山于并行执行的特性,大量应用于复杂逻辑控制以及大量的 数据运算和处理。fpga是在pal、gal、cpld等可编程器件的基础上一步一步发展起来的

6、。pal是与 阵列可编程或阵列固定,它的缺点是:采用熔丝工艺,只能一次编程,并且它的输出是固定 的,不能编程;也就是说芯片一旦选定,输出结构将不可改变。gal是在pal的基础上发 展起来的,可以重复编程。与pal的最人区别是:输出结构可以由用户自己定义。但它结 构简单,"0数目有限。cpld是在gal的基础上发展起来的。它主要由输入输出控制单 元、宏单元和互连炬阵等组成。随着电子市场对功能耍求的不断提高,cpld越来越不能满 足市场的需求。它最大只有512个宏单元,大部分是组合逻辑,难以实现复杂的时序逻辑设 计,并h功耗很大。随着工艺的发展,fpga登上了历史舞台并成为主角,它内部资

7、源丰富, 不管是时序逻辑述是组合逻辑都很多。它是作为专用集成电路领域屮的一种半定制电路而出 现的,既解决了定制电路的不足,又克服了原有町编程器件门电路数有限的缺点。三、altera公司的软件使用:其实真正对fpga有一个整体了解是在其软件的使用过程屮。我在实验室里使用的是 altera公司的syclonell系列的ep2c35f484c8,所以使用的软件就是altera公司提供的 quartusll和nios eds。在quartus的使川屮其他的没什么说的,只是有儿点需要注意:一就 是顶层文件名一定要和工程名一致;二就是工程一定不能放在含中文的h录下,否者编译会 岀错。在最初使用quanus

8、的时候就涉及到仿真和引脚分配的问题。关于引脚分配,最开始没 人提示所以我以为只要弄上去不报错就行了,后来在下载到实验板上的吋候,发觉根本就达 不到预期的效果,于是在网上找了很多相关的技巧,也尝试过通过tel脚本配置,网上还特 推荐这种方法。后来在handbook里面终于找到了相应的治疗,发觉还是我一个一个的敲进 去方彪。然后就是仿真了,在最初使用的quartusll 9.0版本中还自带仿真工具,所以就没有 借用第三方的modelsim,因为感觉编写testbench也是一个很麻烦的事情,但是自从 quartusll 10版本以后altera公诃就取消了仿真工具,而推荐大家使用第三方的moder

9、sim,哎 没办法只有再去研究一下modersim破解了方法和testbench的书写了。其实quartusll里面还有很多实用的工具,比如说像signaltap il timcqucst、sopc builder 等。现在我还欠缺的就是使用timequest进行时序收敛,这个在特权同学的视频教程中有, 还需要好好去学习,而对于signaltap ii和sopc builder已经有了一定的了解。其实sopc builder就是以前的nios和niosll的一个后继者,它主耍就是调用別人已经写 好了的一些程序來控制fpga的各个组件,当然也可以根据白己的需要进行h定义组件以达 到自己的设计要求

10、。在配置sopc的时候一定要根据自己所使用的fpga型号就行参数的设置, 所以阅读开发板使用手册就显得至关重要了。而我在配置sopc的过程中也遇到过很多的问题,现在也还冇很多技巧没冇学会,我在 这个方血花费的时间也是特别的多的,儿乎用去了我2/3的时间。刚开始配置的时候还是感 觉自己学到了很多东西,也作岀了很多实际的效果,给自己带来了不少的信心,可是到示而 发觉口己好像只是在做一个简单的模仿的工作,于是越来越觉得口己偏离了学习的重心,而 且在这个过程屮也遇到了很多没有解决的问题,于是学习就有点停滞不前了。很多器件为什 么需要,为什么不需要?成了困扰我的主要问题,而«nios_ii_嵌

11、入式软核sopc设计原理 及应用、nios ii的那些事儿以及用户手册和网友博客给了我很大的帮助,也补充了自 己在这方而的理论知识。在学习sopc过程中到现在也还有很多难题没有得到解决,当然不一定就是sopc的问题, 也有hdl语言的问题:第一、在配置锁相环的时候遇到一个很奇怪的问题。首先来说说锁相环的功能,锁相环 主要的功能是能够进行倍频和分频并且能够产牛和移。而一般的niosll软核能够工作在 100mhz的频率下,而syclonell系列的晶振时钟是50mhz,所以一般在配置sopc的时候都 需要用到锁相环,当然也可以不用。然而如果要用到sdram组件的吋候就一定耍用pll 了,因为sd

12、ram的时钟和系统时钟之间有一个相移,必须通过pll來实现相移。而pll 的使用冇两种方法,一种就是在quartusll里|fli添加,一种就是在sopc里面添加pllcontrol 來生成。第一种没有多少好说的,这里主要就是说一下第二种方法,因为我在第二种配置下 没有成功过。当时一肓不知道原因所在,也在网上看了很多想过质料,依i口没有找到权威的 解释,终于在特权同学的i専客上面得到了解答: 1 -09/231304 4055a.html#articlctop 我发觉 自己很多知 识都是通过特权同学的博客、书籍和视频而得到,看到很多网友推荐购买特权同学的书籍学 习看来真是对的。第二、在观看了特

13、权同学的视频后,试着将那些繁琐的程序分模块来进行帖写。但是对 于顶层例化模块的书写一直还没來得及仔细去学习。大多时候都是通过生成板块图在bdf文 件里而用连线的方式来代替例化,对于我现阶段这种小工程来说这样还并没有多人的影响, 也和同学讨论过例化。他们的观点是这个东西可以通过连线的方式来完成,所以没必耍再去 做那个“麻烦而看似作川不大”的例化了。具实例化模块的存在是有很人的意义的,或许在 我们现阶段的这种小系统中还体现不出它的作用。我们这样设想一下,假如在公司里面要做 某个工程,这个工程由1000个模块组成,分给不同的小组完成,每个小组负责一个模块, 最后山总工程师将各个模块整合,如來没有例化

14、文件那么总工程师就用对这1000个模块图 进行连接,而通过例化模块对管脚进行分配后就只有一个模块图了,差別可想而知了吧。当 然学习编写例化模块还有一个好处就是能够让自己对所编写的程序有一个总体概念,增强自 己对于程序的理解能力,这样能提高自己的编程能力。第三、就是涉及到一个自定义组件的问题了,其实任何组件都可以通过pio端口进行 外加,但是这个和模块例化也有一样的问题。既然能够使模块的数量减少又何乐而不为呢?笫四、就是吋序收敛了,这个真的述没有仔细左研究过,只是观看了特权同学的教学视 频,感觉太繁琐了,还是等以后乂充足的时间的时候再去学习了。第五、而在我的毕业设计当中需要用到vga显示,这成了

15、我这段时间的主要难题,刚开始的时候自己走进了一个误区,总以为vga的各种显示都是通过hdl语言来控制的,而我 就在想怎么才能做到动态的显示。于是遍历互联网终不得其解,也许是我白己没能找到,但 是就算我找到了,我想那个难度也足以让我反胃一周了。通过在网上看相关的论坛也専客最 终不得不放弃纯硬件的方法。我在想可以通过写vga的驱动,然后通过eds软件编程来实 现,当然现在还只是一个想法。在这里我也找到了一个vga的驱动程序:的时序如图21、图22所示。它分为行数据时序和帧数据时序。datausy(:bade porch (b)active video time (c)< sync (a)sc

16、anline time ( c )front porch (d)图24 vga行j时序datavsyncback porch (p)active video time ( q)i ront porch (r)图2-2 vga帧数据时序表2常见刷新率时序表:显示模式(mhz )行时序(像素数)桢时序(行数)abcdeopqrs640x48()6025.1759648644)168()02334801052531.564120640!684031648015008(m>x6<x6o40.()12888mm)4()1056423600162849.58()1608(n)161056321

17、60016251024x7686065136160102424134462976838061024x7687578.8176176102416131232«76«1800也 60108.()11224«128048168x33«102411()66!280x8(mxti6()83.4613620012806416803248(m)18281440x900(ir60106.4715223214408019043289001932表3常见刷新率时序表(时间):显示模式(mhz )行时序时间(妙)帧时序时间(ms )abcdeopqrs64(k480i;602

18、5.1753.811.925.40.63531.7.0061.04815.25031716.664ox48o7531.52.033.82030.5(t26.70.080.4261280.026133800x6006040.03.22.220126.40.10.615.840.02616.6800x6007549.51.623.216.1603232130.060.451280.0211331024x76860652092.4615.70.3720.60.120.59915.870.0621&61024x76875651.222.2312990.20316.60.050.46612780

19、.0161331280x1024601081.042311.850.44415.60.050,616.00.01516.61280x8(x)6083.461.632a1530.7620.10.060.4816.10.0216.61440x90(60106.471.4321813320.7517.90.050.516j0.01716.61.二分频电路二分频把50mhz吋钟频率分成25mhz并捉供给其它模块作为吋钟。显示器的像素分辨率 是640x480,像索时钟25mhz,刷新频率60hz±l。开发板提供的系统时钟50mhz,所以 要对板载时钟进行分频后才能使用。分频电路的设计部分程序如

20、下:module clkdiv(input wire mclk,input wire clr,output wire clk25);reg24:0j q;/25-bit counteralways (posedge mclk or posedge clr)beginif(clr=l)q<=0;elseqv二q+l;endassign clk25=q0; 25mhzendmodule 2.时序控制模块vga时序控制模块用于产生640*480显示范|韦并控制显示范围和消隐范围以及产生 水平同步时序信号hs和垂点同步时序信号vs的值。一般来说,时钟计数器通过像素时钟来控制水平时序信号。译码计数

21、器的值产生hs信 号。在指定的行,计数器产生当前像素显示的位置。一个独立的计数器产生垂直时序信号。垂直同步计数器在每个hs脉冲信号來临时自动 加1,译码值产生vs信号。计数器产生当前显示行。这两个计数器从地址到显示缓冲器连 续计数。开发板的ddr sdram提供了一个足够的显示缓冲区。在hs脉冲的开始和vs脉冲的开始没冇具体规定相对的时序关系。因此,计数器被分 配到简单格式的视频ram地址,或分配到同步脉冲产生器的最小译码逻辑。设计对时序控制部分的部分代码如下:module vga640480(input wire elk,input wire clr,output reg hsync,out

22、put reg vsync,output reg 9:0hc,output reg 9:0jvc,output reg vidon);parameter hpixcls= 10'b 1100100000;行像素点=800parameter vlines= 10'b 1000001001;行数=521parameter hbp= lowo 10010000;彳亍显示后沿=144 (128+16)parameter hfp= 10'b 1100010000;行显示前沿=784( 128+16+640)parameter vbp= 10'booooo 11111;场显

23、示丿rf沿=31 (2+29)parameter vfp= 10*b0111111111;场显示前沿=511 (2+29+480)reg vsenable; /enbale for the vertical counter行同步信号计数器always(poscdgc elk or posedge clr)beginif(clr=l)hc<=0;elsebeginif(hc=hpixels-l)begin/the counter has reached the end of pixel counthc<=0; 计数器复位vsenable<= 1;/enable the vertical counter to incrementendels

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论