nios2移植uClinux硬件架构.doc_第1页
nios2移植uClinux硬件架构.doc_第2页
nios2移植uClinux硬件架构.doc_第3页
nios2移植uClinux硬件架构.doc_第4页
nios2移植uClinux硬件架构.doc_第5页
免费预览已结束,剩余39页可下载查看

下载本文档

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

文档简介

niosII 硬件架构在开始之前,我总是想多说点,因为看了很多的教程,中间也很辛酸,要达到无师自通的境界,在这种领域有些困难,每每遇到问题,总是喜欢百度一下,当找不到符合自己的情况的时候才是最头疼的时候,我们有点懒,有点想走捷径做做笔记,同时也做做教程,在摩尔定律走不下去的时候,我们就会想起FPGA,我们乐此不疲,因为前途无量,当我们轻车熟路,请不要忘了给我们经验的前辈,同时有好的经验的时候,写写教程,小则帮助一二像我们一样的人,大则为中国的科技兴国做做贡献,无所求,只为心里踏实。这个教程分两部分,一个是硬件架构,另一个是软件架构,不免会有错误,希望指正,694768787所需硬件要求:cpu包含硬件乘法器,timer, 串口,至少8M SDRAM usb blaster , pc一台所需软件要求: ubuntu镜像文件,virtualbox虚拟机,quartus II 10.1, NiosII IDE 10.1 ,还要下载altera的nios2gcc-20080203.tar.bz2交叉编译器,nios2-linux-20080519.tar 里面包含了linux的源代码此番硬件架构大体分为以下内容:1. 建立quartusII 工程。2. 利用sopc 工具搭建niosII软核处理器。3. 建立锁相环。4. 编译工程,分配引脚,重新编译。5. 提取所需的ptf文件。1. 建立工程: 选择File - New Project Wizard.会点英文的,或者是用过别的软件的都会知道,wizard是向导的意思,我们就喜欢向导,因为它会给我们剩下很多工作。这个不用管它,点next,向下。这个对话框就有用啦,看第一行,翻译过来就是你要把工程放到哪个文件夹下,然后点.选吧,选择你要放的位置,但是我要提醒一点就是,因为这是个外国人用的软件,它的路径里不能有中文,否则当你用niosII IDE软件的时候会有莫名奇妙的错误,这个就是我的经验,免费告诉大家啦。我设置的路径是D:quartus_prouclinux_nios2,然后点击:打开。看第二个框。工程名字,这次的有点特殊了,我们要同时看看第三个框了,第三个是顶层实体的名字,如果知道硬件描述语言,那么肯定会明白我说的意思,这里的工程名字必须和顶层实体的名字相同,我在工程名字填上uclinux_nios2。你会发现它自己就会设置名字是一样的,有的人会认为我有点罗嗦了,但是我还是照顾那些爱问为什么的,因为我就喜欢,我不太喜欢那些缺胳膊缺腿的教程,太伤脑了。继续点next。这一步向工程添加文件,你如果用硬件描述语言写了一些模块的话就可以添加进去,我没有,所以继续点next。这个是设置硬件型号,上面的family是家族,我的是黑金开发板,型号是Cyclone II EP2C8F256C 那么就按照你开发板上的fpga型号选上就好了,没什么可解释的,继续next。这个对话框时选择工具,其实quartus II的工具已经集成了,没必要选,反而增加学习的难度,继续next。即将完成啦,看一下我们所设置的,工程名字,器件名称,EDA tools ,等等吧,直接finish。看一下我们的左上角就有工程啦,然后呢,我们建立原理图:选择File-New.然后再选择:用过protel 99se的人应该会很熟悉Schematic这个词,尽管不知道是啥意思,但是却知道建立这么一个文件时原理图文件,在这也一样,所以你会看到的也是一个原理图的文件: 看到这些应该会亲切许多吧?2. 利用sopc 工具搭建niosII软核处理器。选择SOPC BuilderSOPC Builder,就是建立niosII软核处理器的工具,我们看一下跑uclinux的最低配置要求:最小系统至少要包括:一个niosii cpu,一个sdram控制器,cfi_flash控制器(在单板上不需要flash),全功能的timer,用于通信的jtag uart或serial uart。可以根据单板的硬件资源来适当配置逻辑,比如加入一些led和key等等。在linux里面中断0是自动识别的,所以在硬件系统里面不要使用0号中断。 这些就是我们在sopc中要建立的啦,按照过程来,少什么填什么,查漏补缺,我写这个教程,希望各位已经有了51单片机的基础,如果什么都不懂得话,我建议你还是从51入手,一步一步走来,很快的,我只用一个月。最起码这里面的名词我们都要知道,尽管我们还不怎么或者根本就不会用,但是我们知道他是干什么的就行了。好啦,继续。这个就是sopc的界面啦。看一下弹出的第一个对话框,system name 系统名称,就是niosII系统的名称,它最后生成一个元器件,有引脚,名字就是它,就像是我们的74LS138在这写的就是名字,它生成的是他的原理图元器件。我给他取个什么名字呢?叫niosII吧。下面的target HDL是目标硬件描述语言,我擅长的是VHDL,我就选VHDL,其实后面也用不到,至少目前用不到,然后点OK。首先我们应该看到的是上面那个黑体的clk_0,它太显眼了,我们稍微研究一下,cpu都需要时钟的嘛,我们的niosII也不例外,看它的source 写的是external 表明是外部时钟,后面是它的频率,在这我们肯定希望我们的cpu频率很高啦,因为它越高速度就越快,不过局限于现在的制造工艺,我们的niosII软核处理器能稳定运行的频率是130MHz左右,那要看我们配置如何啦,不过我相信会有奇迹的,这种频率与arm系列的比起来也就是arm7的水平,不过已经够用啦,毕竟FPGA在这方面不是强项,我们别挑剔那么多,我们学的是技术。我就把clk的时钟(双击就行)改为100MHz。记住哦,后面我们的锁相环PLL也会用到这个值。留意一下。有了时钟了,就像是51单片机的晶振,接下来我们就加上niosII软核处理器,可以双击Nios II Processor 或者点击下面的Add按钮,点击之后会出现niosII 软核cpu的配置界面,这里面有很多细节要注意,也就是按照套路来的,静下心仔细想想就行了,好吧,继续讲解:首先映入眼帘的是一个大的框架,我放大一点看一下都有什么:略懂英文的,我是说计算机方面的英文就能看个大概,这里有三个型号的软核处理器:Nios II/e :e就是经济的缩写,翻译就是经济型,它占用的LE最少,很清楚,但是慢。Nios II/s :s就是stand 标准的,也就是处于旁边两种之间的类型,应该很均衡。Nios II/f :f就是fast ,显然它是最快的,但是消耗很多的LE,性价比高嘛,只要够用, 我们就选它啦接下来说说下一个注意的地方:接下来的就和内存扯上关系了。 Reset Vector 是启动的时候程序开始的位置,就像是我们的电脑,我们按下开机按钮后程序先从硬盘读取程序,然后把程序存到内存中,之后再从内存中执行,既然这样呢,我们就需要一个像硬盘的东西存住我们的代码,这里就要用flash了,闪存,容量够用就行,我的开发板是epcs16,这是个串行的flash,这个时候我们还没添加呢,所以等会还要回来设置它。Exception Vector 是异常时程序执行的位置,当然是内存啦,在内存中执行的,像是看门狗电程序吧。这里就是要用到ram,片上ram太小了,运行小的程序可以,但是这次我们运行的是uclinux,它毕竟也是个操作系统,所以必须把开发板上的sdram用上,它有8Mbit,满足uclinux运行的最低要求了。这个时候我们也没有添加,所以我们还要等会才行。下面还有两个选项,include MMU / MPU 这个是内存管理单元,和内存保护单元,它们是运行大型操作系统必备的硬件资源,原则上现在的niosII处理器已经能够移植Linux和windowCE了,但是这个时候局限它的是它的主频。有点低啊,所以还是处理点低端的吧,其余的还是交给arm9等等的吧。点击next继续: 缓存设置,缓存包括两部分,左面的是指令缓存,我们不去关心它,加上缓存的目的就是提高niosII软核处理器的处理速度,看看右面的那部分,Data Cache 大家应该熟悉点,数据缓存的作用就是存储最近访问过的数据,CPU尽量使用缓存里的数据而不进行外部存储器的操作。至于用法等着以后再摸索吧。我们买电脑的时候关心cpu几级缓存,多大多大等等,这个就是了,但是现在我们不能要它,想一下如果它把你的数据给你存住了,你就看不到你要的结果了,那样多不好,所以点那个下拉按钮,选择null。然后点next:看一下标题:advanced features 高级功能,我们不太怎么需要,所以next:这个是MMU 和 MPU的,因为我们在刚开始的地方没有选择他们。所以他们是灰的了,继续next:这个是JTAG功能,是调试用的,也是cpld和fpga独有的功能,他们相似于串口,但是好像比串口高级很多哦。我们选择Level 1 就足够了,所以继续next:这个没有什么可说的,直接点finish,终于完成一个cpu啦!Cpu设计好了,接下来的就是内存啦,ram,没有ram怎么运行程序啊,这里就需要添加sdram的控制器,看看左面的那些:这有很多已经设计好的模块,我们不用硬件描述语言来描述啦,这些都是IP核,已经写好的,看哪个Memories 我敢肯定sdram的控制器就在这下面,我们依次展开:看,就是这个,双击它。Presets :这个应该就是选择sdram的型号什么的,我的板子上的是位宽16bit的单击下拉按钮,选择custom:然后修改位宽:修改完之后就可以了,直接点finish完成。Sdram控制器已经添加成功了,等着把分配的引脚连接上芯片就可以用sdram了。接下来是添加rom了,板子的rom是epcs16,它是一块2Mbit的串行flash,我们用它来盛放我们的程序,还有fpga的配置信息。还是在memory里面,找flash - EPCS双击添加:这次直接点finish即可,不需修改。这么一个系统在原则上就可以运行啦,但是我们还要实现别的功能呢,继续添加别的功能IP模块:我们添加的System ID,这个模块是用于niosII IDE和quartus II的校验用的,以防止它们的版本不一致而发生错误。双击添加,直接finish,不用在乎那个Warning:添加之后:下面要添加的就是实用的工具了,我们要下载程序到niosII中,必须要有个串口,在这我们就用fpga独有的JTAG UART,它和串口兼容,所以我们在serial中就能找到它啦:双击添加即可:看一下这有两个配置:写和读,我们不用改动,直接选择finish即可,至于为何,以后再研究。Finish添加:接下来要添加的是全功能的时钟,像是单片机一样的定时器,找到Timer:双击添加,进入它的配置界面:它的配置界面也不是很复杂,第一个框就是timeout period 应该就是溢出时间的设置,用过51的人肯定会知道,这个时间我们自己能设置,所以,不去管它。下面那个是定时器的宽度,51的是16位,分高八位低八位,在nios中我们就选择32的吧,下面选择全功能的时钟:直接finish完成即可。看一下还缺什么? 一个niosii cpu, 一个sdram控制器, cfi_flash控制器(在单板上不需要flash), 全功能的timer, 用于通信的jtag uart或serial uart。好啦,重要的什么都不缺了,下面就是稍微修理修理,对了还有个地方需要改一下:大家还记得这个地方吧?设置一下吧:看看这些名字怎么那么别扭呢?回到主界面:修改一下他们的名字:直接选中它的名字右键rename即可:看我改完后的图片:这下就感觉好多了。下面修改一下rom的地址,让他从0开始符合我们的思维方式,直接双击修改就行啦,然后点旁边的小锁,锁住它。看一下,出现error了吧,没关系,点击上面的自动分配基地址:至此呢cpu的搭建基本完成啦,这里还要加一点说明就是中断的问题,在altera的wiki上说的,除了timer不要把中断0分配给别的,这里我从1开始分配的。继续,点击Next:单选框是运行仿真的环境,我们不需要,不用选择,下面是nios II IDE的工具,我们也不写程序,先不管它,点最下面的Generate,生成软核模块,过程有点慢,不过很值得等,呵呵。出现success啦:点Exit,退出,回到原理图编辑器,在图上双击:选择project下的niosII,就是我们刚才费了好大劲才出来的软核cpu,点ok添加到里面去:看一下它的引脚,不是很多呀,呵呵,其实也不少,好多全是sdram的引脚的还有一个clk的,我们在前面说过clk是100Mhz的,可是我的开发板只有20MHz的有缘晶振,怎么给他100MHz呢?这就要用到FPGA器件内部的PLL模块了,PLL模块就是实现倍频功能的,这就把知识一下子顺起来了,想想我们的电脑,里面是不是有个外频,主频,倍频的概念?下面开始建立PLL模块,双击原理图:选择MegaWizard Plug-In Manager:Next继续:我们要找的PLL就是一个I/O接口,所以我们打开它,一下子就找到了:看,这个ALTPLL就是我们要的功能啦,点击它:右面的界面显示的是用何种语言生成这个PLL,存储的位置,以及名字我填上PLL:点next继续:看一下左面的图片,这个有个inclk0,显然这个是PLL输入的时钟引脚,在右面有个c0,这个显然是PLL输出的地方,看右面,general,what is the frequencey of the inlock0 input?这句话就是告诉我们PLL输入时钟设置,这就要看开发板上的晶振啦,我的是20M的,所以选择20.。其余的大家可以baidu一下,继续next:把这些勾全部去掉,可以简单的翻译翻译就知道他们是什么功能了,第一个是建立一个使能的引脚,第二个是片选的引脚去掉之后,界面就简洁了很多:我们就需要一个输入,两个输出,这两个输出,一个是给niosII处理器的,另一个是给sdram的,好啦,我们继续next:看这个是要我们再添加一个时钟信号,我们没有,也没必要,所以继续next:我们把Clock multiplication factor 设置为5,这就相当是倍频了,我们输入时钟是20,倍频为5,输出时钟就是20 * 5 = 100 MHz啦,下面的偏移量什么的不管,因为这个时钟我们是留着给nios II处理器的,什么都不用做,next:首先,我们看到这个是暗的,把Use this clock勾画上再说,因为我们要用到它:画上勾之后我们就能对它进行设置了,我把倍频设置为5,还有一个地方要注意,就是偏移量,因为sdram要在时钟脉冲到来之前稳定数据,所以要有个延迟,官方有公式计算,具体怎么算我没有看,凭经验值来选择-75:继续next:这是让我们用第三个时钟,这儿就不需要了,所以直接finish吧,在空白界面双击,像添加niosII处理器一样把PLL放在原理图上面:接下来我们要做的是给他们添加引脚和导线,右键niosII:生成引脚:好啦,我把它整理整理,添加引脚导线大家应该会吧?呵呵,如果不会我在这就不教了,看我设置完成的图片吧:可以按住CTRL然后滑动鼠标滚珠进行放大缩小,挺方便的。然后进行编译,分配真实的管脚。看到没?Start compilation 点一下,哦对了,这里不叫编译,叫综合,呵呵,等一会:Ok,编译成功,接下来我们要分配引脚:然后把开发板上对应的引脚写上就是了,这个没什么技术可讲,反而倒是件很麻烦的工作,稍微不小心就会弄错。我是将别的导入进去:看一下,没有呵呵,我还没把tcl文件放到我的工程下呢,所以它找不到。把tcl文件拷到我的工程目录下,

温馨提示

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

最新文档

评论

0/150

提交评论