您的位置 首页 硬件

零根底学FPGA (十九) 探秘SOPC

今天是来北京的第8天了,想想过的蛮快的,在这8天里呢,由于这边正在开SOPC的课程,自己对这方面之前只是了解过,知道有SOPC这回事,但是从来没有接触过,正好有这个机会让我蹭了几天的课,算是对这东

  今天是来北京的第8天了,想想过的蛮快的,在这8天里呢,因为这边正在开SOPC的课程,自己对这方面之前仅仅了解过,知道有SOPC这回事,可是从来没有触摸过,正好有这个时机让我蹭了几天的课,算是对这东西有了深化的了解吧。课程讲的很快,短短4天的功夫就从入门讲到了我以为比较难明的方面,不过还好,经过我这几天的消化,之前也有点根底,了解一下仍是没什么问题的,只不过让我去操作一个有点难度的外设的话,我估量还得下点功夫了~

  讲SOPC的郝教师跟我住一个屋,郝教师人很不错,也很年青,也是个90后,这几天跟着郝教师学到了不少东西,不仅仅是SOPC方面的,更多还有对工程师这个职业,对这个社会的一些新的知道。

  因为我也是刚触摸SOPC,不能像大神们讲的那么有条不紊,思路谨慎,我仅仅把我最近几天学到的东西跟咱们共享一下,也作为自己的一份笔记。再下面的几篇文章中,我都会给咱们发一些SOPC的笔记,从根本的概念,到根本硬件体系的树立,一些常用IP核的运用,像什么PIO核,UART核,USB,EPCS操控器,SDRAM操控器等,还有后边的自界说外设等,估量用四五篇文章的长度来讲这部分吧。

  学这一部分常识要软硬结合,硬件信任咱们都没问题了,软件呢需求用到C言语的常识,因为我之前好久没用C言语了,假如咱们对C言语还不是很熟的话,主张咱们回去补一下C言语的课,尽管咱们是搞硬件的,可是越到后边,软硬就不分了~

  榜首篇文章我就先来说说我了解中的SOPC,再教咱们手把手树立一个硬件渠道,这个硬件渠道树立好了,咱们今后的软件就悉数是依据这个渠道的编程了。

  一、我了解中的SOPC

  SOPC呢,也便是所谓的可编程片上体系,一般一个体系所包含的,什么CPU,存储器,DSP和一些IO外设等都放在FPGA的周围,这样大大增加的体系的面积然后增加了体系的本钱,SOPC技能呢便是把CPU,DSP,守时器,IO模块都放到FPGA里边,经过Quartus II供给的SOPC builder这个东西,在里边嵌入NIOS II处理器和一些常用的IP 核,NIOS II处理器作为主机,其他外设作为从机,主机和从机之间经过AVALON MM总线进行通讯与拜访,每一个外设都有一个地址,NIOS II处理器能够经过这条总线对外设进行操作,可是每次只能拜访一个外设,体系硬件树立好了之后,经过Quartus II对其进行归纳,布局布线,时序束缚等硬件体系树立作业,然后咱们用C言语经过NIOS II eclipse 这个东西来给咱们的硬件体系编程,并进行运转调试,最终将咱们规划好的硬件与软件文件烧入FPGA的装备芯片或许FILASH中,经过相应的总线来操控相应的外设。下面是我画的一个联系图

  

360桌面截图20150126172651.jpg

 

  下面咱们就经过一个详细的实例来了解这个进程

  二 、硬件体系树立

  

360桌面截图20150126174352.jpg

 

  上面这个图便是咱们要树立的硬件体系,硬件体系的树立需求用到Quartus II软件 和它供给的SOPC builder 东西,一步步来,Quartus II树立工程就不说了,树立工程之后,tool ——sopc builder,依照上面的框图一个个增加咱们需求的IP

  首要我喜爱增加时钟,即PLL,直接在左上方的查找框里输入PLL双击即可,至于PLL的装备办法我就不说了,信任咱们都现已很熟了,因为咱们的输入时钟是50M,咱们需求的内部时钟首要用来操控各种IP,用50M的c0时钟,可是咱们体系规划SDRAM,咱们需求100M的c1时钟来操控SDRAM操控器,即SDRAM接口,相同还需求一个时钟输出到FPGA芯片外部来操控SDRAM芯片,咱们用C2时钟,C2时钟跟C1时钟同频不同相,依据经验值,这个相位偏移咱们选-75deg,频率100M

  

360桌面截图20150126180311.jpg

 

  接着增加守时器,在查找框输入timer 装备守时单位,位宽,这儿咱们设置为1ms,32位,在硬件选项对话框里一般挑选 full—featured,当然也能够手动装备一些参数选custom

  

360桌面截图20150126180844.jpg

 

  然后咱们能够装备SDRAM,即咱们的内存,SDRAM的装备参数是依照咱们板子上芯片的详细参数装备的,因为体系供给的SDRAM芯片跟咱们不匹配,所以咱们用custom手动装备

  

360桌面截图20150126181757.jpg

 

  之后能够装备EPCS操控器啊,JTAG操控器,UART,PIO,sysid等相应IP

  EPCS操控器是咱们要操控操控片外的EPCS芯片用到的一个IP核,因为咱们的CPU每次运转起来都是从内存,即SDRAM中读取数据的,而咱们要做的便是将FPGA的硬件装备文件和咱们的软件装备文件烧入到EPCS芯片中,这样CPU运转的时分就需求从EPCS芯片中将数据搬运到SDRAM中运转,然后进步运转速度,EPCS芯片操控器不需求装备,直接增加即可。

  JTAG操控器是咱们调试用的,包含咱们将软件代码下载的时分,在窗口回来的一些数据便是经过JTAG口传回的,这个IP也不需求装备,直接增加即可

  UART操控器即串口,为咱们今后做串口调试试验做好硬件根底,这儿咱们能够手动装备波特率,和相应数据位

  sysID说白了便是咱们这个体系的标号,跟身份证差不多意思,即一个体系对应一个标号,标号咱们能够随意取

  PIO外设即咱们的IO口,分为输入输出,咱们能够手动装备他们的输入输出,位宽等参数,输出没什么说的,说一下输入,输入咱们首要是按键输入,我的开发板上是4位按键,所以位宽设为4,因为是按键输入,所以咱们要检测的是按键的下降沿,并且是沿中止而不是电平中止,这儿咱们需求手动改一下。PIO外设咱们能够随意加,包含什么数码管,蜂鸣器,键盘,led等

  

360桌面截图20150126183138.jpg

 

  最终咱们增加CPU,即咱们的NIOS II 处理器,NIOS II处理器分为三种形式,即经济型,稳定型和快速型,当然越高端的类型所占的逻辑资源就越多,咱们做一些小试验用经济型或许稳定型就够了

  

360桌面截图20150126183705.jpg

 

  还有一点要注意,装备参数中的两个选项,Reset Vector——复位向量

  Exception Vector——履行向量,咱们别离选EPCS和SDRAM,即咱们复位的时分,CPU从EPCS中将数据搬入SDRAM中从头履行,不复位的进程中,CPU从SDRAM中履行(这个当地或许了解的不对,望大神点拨)

  悉数装备完结之后,咱们需求对每一个IP核改下姓名,右键,rename改成咱们习气的姓名,不改的话后边总是跟着一些后缀。其实装备完结之后,体系就主动将这些模块衔接好了,咱们需求做的便是改一下时钟,让内部处理SDRAM操控器模块的其他IP用PLL模块输出的c0时钟,SDRAM操控器用c1时钟

  

360桌面截图20150126184833.jpg

 

  接下来咱们需求体系主动分配基地址和中止号,其实仔细的朋友或许发现,在右面IRQ一栏下有些中止号是重复的,所以咱们要体系从头分配一下中止优先级。点system——Assign base address 和 Assign interrupt numbers 即可,最终点下面的generate生成咱们的体系即可

  这样咱们在sopc builder里的作业就完结了,硬件一旦生成,就不要容易改了,剩余的事便是咱们要在软件里折腾。

  其实还能够这么了解,咱们刚刚生成的体系就相当于一个调集了各种IP的模块,咱们直接拿来调用即可。翻开文件目录下后缀名为.inst的文件,就例化了咱们方才生成的体系,咱们在quartus II顶层文件中调用这个体系,生成顶层模块,装备好管脚,这样咱们的硬件部分才算是真的完结了

  

360桌面截图20150126190012.jpg

 

  三、软件部分

  硬件搞好了就要做软件,养成一个好的习气,在工程目录中树立一个文件夹,专门放软件部分的文件

  做软件,无非便是拜访咱们硬件体系中的寄存器,用C言语来操控,这儿咱们先简略做一个操控PIO核的小工程,经过操控PIO核来操控LED

  软件方面的工程树立我不想多说,只想跟咱们谈一下学习办法,当咱们拿到一个外设,肯定要首要看一下他的datasheet,看他的寄存器映射图,拿PIO这个核来说,咱们能够从网上下载n2cpu_nii5v3这个文件,里边详细介绍了各种IP核的材料

  

360桌面截图20150126191207.jpg

 

  看datasheet 一般先看他的overview嘛,英文功底仍是有的

  然后咱们需求看他的软件文件software files,即操控这个IP核需求的头文件,这儿是altera_avalon_pio_regs.h

  

360桌面截图20150126191752.jpg

 

  然后便是看寄存器视图了,寄存器视图告知了咱们怎么详细操作这个IP以及相应位的介绍

  

360桌面截图20150126192040.jpg

 

  例如,榜首个寄存器是数据寄存器,能够用来读写数据,只需咱们知道这个PIO核的基址,再知道它的寄存器偏移咱们就能够往数据寄存器里读写数据了,至于基址是多少,咱们在界说硬件体系的时分体系现已主动生成,咱们到时分只需调用就好了

  再例如第二个寄存器是向量寄存器,即操控IO口的数据流方向,第三个寄存器是中止寄存器等等

  代码部分咱们来看一下

  

360桌面截图20150126192708.jpg

 

  首要是初始化,咱们调用函数找到咱们PIO核的基址,并给咱们的pio口赋初值0,至于PIO核的基址在头文件system.h中有界说

  system .h中界说了咱们硬件体系中所有IP的相关参数,咱们能够直接拿来调用

  

360桌面截图20150126193006.jpg

 

  初始化之后呢就进入while循环,循环移位便是咱们所说的流水灯了。因为工程比较简略,按理说还需求调试,这儿咱们就不调试了,下板即可,先将咱们的硬件下到板子了,即咱们的SOF文件,然后再下咱们的软件,右键咱们的工程名,run as——NIOS II hardware

  

360桌面截图20150126194656.jpg

 

  这篇文章首要是讲了硬件体系的树立,其实硬件体系一树立起来,咱们今后的工程都能够用这个硬件体系,其实我自己也感觉这种用文字描述的办法来教咱们做确实是欠好了解,有些东西也欠好用文字描述,上传的图片也是有限的,所以我中心也省了不少的过程,包含一些常见过错的处理办法,工程文件的导入等,这些期望咱们自己找材料了解,详细细节假如用文字描述起来更是繁琐,能看视频教育最好了。

  下面的文章咱们首要是在软件上折腾,包含守时器中止的运用啊,串口收发代码的解说啊,还有自界说外设AD,DA芯片的操控啊,这些咱们后续再谈吧~写了也不少了,暂时收工吧。

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/qianrushi/yingjian/116564.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部