关于SOC、SOPC、NIOS、FPGA

要弄清楚Nios的概念,追本溯源,牵涉到很多专业名词:SOPCSOC,IP Core……等等,对于某些概念,我也是一知半解,如果写错了,请指正,谢谢。

--System
       System,也就是"系统"。什么才能称作"系统"呢?下图是我们每天都要接触的计算机系统的结构图,很典型的一种系统。

2010050514032295.jpg


       可见,一个完整的系统,至少由CPU总线、外设控制器等几部分组成。CPU负责中断分配、地址管理、内存调度等总的控制任务;外设控制器负责与外部设备连接,控制外设的行为;CPU和各个外设控制器之间通过总线交互信息。
       嵌入式系统是从计算机系统发展而来的,理应遵循相同系统架构:拥有一个总的调控中心,使用总线实现系统的可扩展性,新的外设控制器通过总线接入系统。下图是Nios系统的典型结构图:

2010050514034556.jpg


       Nios系统采用Nios CPU和Avalon总线,外设控制器以独立模块的形式加入系统,这些独立的模块称为"IP Core",全称"Intelligence Property Core"(知识产权核),顾名思义,就是开发者拥有其知识产权,购买者拥有其使用权的"逻辑功能块"。
       这样看来,上篇文章所做的东西算不算一个系统呢?当然不算,充其量只是个数码管控制器。以后的文章会介绍怎样将它改为能接入Avalon总线的"外设控制器"。
       下图列举出各个专业名词之间的关系,在一定程度上反映出它们的来龙去脉。下面一一介绍。

2010050514040440.jpg

--集成电路(IC,Integrated Circuit)
       在上个世纪50年代之前,三极管的结构一般是一个空心金属管,通过加热管内的灯丝发射电子,称为电子管,功耗相当大。后来,人们发现可以用半导体材料来制作三极管一类的电子元器件,晶体管的出现,成为微电子技术发展中第一个里程碑,它使得电子元器件与线路能够集成在小小的半导体基片上,为电子设备微型化提供了新途径。电路板上那些有很多引脚的小黑块就是集成电路,它里面并不复杂,无非是在一片半导体芯片上(一般是硅片)制造出许多三极管,并按照电路的要求把它们连接起来,形成一定功能的器件,这种制造工艺叫"集成",产品就是集成电路。这里有一篇关于集成电路设计的很有趣的帖子,推荐一下:bbs.eeworld.com.cn/showtopic-8700.aspx
       集成电路按照应用对象的不同,分为通用集成电路和专用集成电路两大类。最直观的理解:
       通用集成电路是零件,是从各种各样的应用当中提取出来的公共部分,反过来可以被各种各样的应用系统直接添加进去完成基本的功能的部分,比如说各种74系列数字门电路,A/D、D/A转换器,电源电路等等,用一堆通用集成电路组成起来的应用系统,本质上是分立的。分立的系统最大的缺点是不可靠,同时会存在许多不确定的因素,使得我们在调试和排错的时候遇到很大的麻烦。
       与之相对应,专用集成电路(ASIC,Application Specific Integrated Circuit)是直接按功能和要求设计出整个系统,并把这个系统做到集成电路上。这样,系统的本质是集成的,不可靠性和不确定因素要小得多,在性能上要明显好于分立的系统.

--CPU(Central Processing Unit,中央处理器)
       CPU不用多说,电脑里少不了的东西。这里要说的是它发展出来的的三个分支:MCU,MPU和DSP

--MCU(Micro Controller Unit,微控制单元
       MCU是一种系统设计方法,将计算机的CPU、RAM、ROM、定时数器和多种I/O接口集成在一片芯片上,形成芯片级的计算机,为不同的应用场合做不同组合控制。51单片机是这种设计方法最早期的实现,广泛应用于各种工业控制场合,对不同信息源的多种数据进行处理诊断,属于通用集成电路。

--DSP(Digital Singnal Processor,数字信号处理器)
       DSP是另外一种系统设计方法,与MCU专注于控制不同,DSP强调各种数字信号处理算法的快速实现。区别在于:
       MCU采用的硬件结构是冯-诺依曼型,即在同一个存储空间取指令和数据,两者不能同时进行,因而地址总线和数据总线的宽度必须一致;DSP采用改进型哈佛结构,即指令和数据空间完全分开,并且有多个指令和数据空间,由于可以对程序和数据同时进行访问,所以提高了数据吞吐率,当然,地址总线和数据总线可以采用不同的宽度。除此之外,DSP具有专门的硬件乘法器,广泛采用流水线操作(即一条指令被执行时,允许下一条指令同时被取出),这些特性大大提高了DSP处理数据的能力。

--MPU(Micro Processor Unit,微处理器)
       简而言之,MPU是去除了集成外设(例如ROM,RAM)的MCU,是高度集成的通用结构的处理器。虽然字面上只差一个字母,但是它们的发展方向可谓大相径庭:MCU以其控制功能的不断完善为发展标志的,而MPU则追求的是运算性能和速度的飞速发展。MPU的结构与计算机CPU最为接近,实际上可以理解为Micro CPU,当然,这种微型CPU不光可以用在计算机上,更广泛地用于各种嵌入式系统中(例如手机,数码相机,机顶盒等等),ARM处理器和Nios处理器就是MPU的典型代表。

       其实,随着技术的发展,MCU,MPU和DSP之间的区别也变的越来越模糊,不少的MCU和MPU具备了DSP的特征,技术融合是大趋势。

--SOC(System On Chip,片上系统)
       自20世纪下半叶以来,集成电路设计和工艺技术水平有了很大的提高,单片集成度中每片已能包含上亿个晶体管,从而使得将原先由许多独立IC组成的电子系统集成在一个单片硅片上成为可能,构成所谓的系统芯片。与普通的集成电路相比,系统芯片不再是一种功能单一的单元电路,其设计思想也有别于普通IC。
       SOC是一种整体的芯片设计方法:集成各种功能模块,每一种功能模块都是由硬件描述语言设计程序,然后在芯片内由电路实现的;每一个模块不是一个单独的ASIC"器件",只是利用芯片的一部分资源去实现某种传统的功能。
       这些功能模块成为IP Core(Intelligence Property Core,知识产权核),当需要推出新产品时,SOC开发人员可以将原来的IP Core转移到新的系统上,或者只需更改一小部分电路,就可符合产品所需要的功能要求,这就是对IP的重要利用,可以做最有效率的使用,借以缩短产品的开发周期,降低开发的复杂度。

--ASIC设计方法
       ASIC设计分为全定制、半定制和可编程IC设计三种方式。

       全定制ASIC是利用集成电路的最基本设计方法(不使用现有库单元),对集成电路中所有的元器件进行精工细作的设计方法。全定制设计可以实现最小面积,最佳布线布局、最优功耗速度积,得到最好的电特性。
       由于单元库和功能模块电路越加成熟,全定制设计的方法渐渐被半定制方法所取代。在现在的IC设计中,整个电路均采用全定制设计的现象越来越少。

       半定制使用单元库里的标准逻辑单元,设计时可以从标准逻辑单元库中选择SSI(门电路)、MSI(如加法器、比较器等)、数据通路(如ALU、存储器、总线等)、存储器甚至系统级模块(如乘法器、微控制器等)和IP核,将其组合在一起。这些逻辑单元已经布局完毕,而且设计得较为可靠,设计者可以较方便地完成系统设计。

       无论全定制还是半定制的设计方法,均要涉及芯片的布局布线和工艺等底层问题,一旦电路功能设计完成投片生产后,不可再更改,这使得开发周期较长,成本较高。

       随着数字电路应用越来越广泛,产品的生命周期逐渐变短,对于传统IC设计而言,可能需要在很短的周期重新设计和重新布线,这是不可想象的。系统设计师们更愿意自己设计专用ASIC芯片,而且希望ASIC的设计周期尽可能短,最好是在实验室里就能设计出合适的ASIC芯片,并且立即投入实际应用之中,因而出现了现场可编程逻辑器件(FPLD,Field Progarmmable Logic Device),其中应用最广泛的当属现场可编程门阵列(FPGA,Field Progarmmable Gate Array)复杂可编程逻辑器件(CPLD,Complex Progarmmable Logic Device)

       FPGA和CPLD有着结构上的区别,这不是我们关注的重点。从相同点上来说,FPGA和CPLD都是一块空白的集成电路,它本身不实现任何功能,而是提供很多逻辑门单元,设计者用硬件描述语言设计一个数字系统,运用EDA软件仿真、综合,生成网络表,下载到芯片中对逻辑门单元进行配置,即可使用。设计者不用再关注于芯片内的布局布线和工艺问题,而把精力集中在用软件设计电路功能上。

       这三种设计方法各有优缺点,具体ASIC采用哪种方法,取决ASIC的批量大小、生产周期的长短,产品利润、产品寿命等等因素。全定制和半定制方式设计出的产品的集成度、功耗比FPLD好得多,用于大批量的专用产品,以尽可能摊薄高额的设计与制造成本,实现良好的性价比;FPGA虽单价昂贵,但由于其现场可编程的灵活性广受小批量应用的青睐,很多时候还被用做ASIC设计过程中的原型设计工具。

--FPGA(Field Progarmmable Gate Array,现场可编程门阵列)
       前面说过,FPGA其实就是一个“白片”,它是由存放在片内RAM中的程序来设置其工作状态的。加电时,FPGA芯片将EPROM中数据读入片内编程RAM中,配置逻辑门之间的连接,完成后,FPGA进入工作状态。掉电后,FPGA恢复成白片,内部逻辑关系消失,因此,FPGA能够反复使用,当需要修改FPGA功能时,只需换一片EPROM即可。
       全球FPGA市场被Xilinx公司Altera公司60%以上的份额。通常来说,在欧洲用Xilinx的人多,在日本和亚太地区用ALTERA的人多,在美国则是平分秋色。可以讲,Altera和Xilinx共同决定了FPGA技术的发展方向。

--SOPC(System on Programmable Chip,可编程片上系统)
       SOPC可以理解为SOC在可编程器件上的实现,如果硬件调试成功后直接投片生产成“固定结构的芯片”,则其为普通的SOC;如果其硬件就是基于FPGA的,也就是说它是“用FPGA做为最终实现” 的,它在以后也可以随时进行硬件升级与调试的,我们就叫它为SOPC的设计方法,所以说SOPC是SOC的一种解决方案。

--硬核,软核
       上面提到,FPGA由存放在片内RAM中的程序进行配置,MPU是System不可或缺的一部分,如果设计者用到的MPU产品是一段VHDL或Verilog HDL代码,那么他在使用的时候可以对MPU进行修改,以满足自己所需要的功能。这种MPU称为"软核",典型代表有Nios软核和MicroBlaze软核。
       但是,出于知识产权保护和性能方面的考虑,一些厂商提供的MPU不会以可修改代码的形式给出,而是将其"固化"在芯片上,用户无法进行更改,也就是说,用户得到的硬核仅是产品的功能,而不是产品的设计。典型的硬核产品是ARM公司推出的ARM微处理器,许多公司将ARM微处理器和林林总总的外围模块(AD、DA、各种总线、常用的驱动模块)都固化一个芯片里,就形成ARM内核的各种芯片。尽管ARM芯片种类越来越多,但是要找到一款完完全全符合设计要求的芯片并不容易,芯片上用不到的接口只能白白浪费。如果只将ARM微处理器以硬核方式植入FPGA,再利用FPGA的可编程逻辑资源和IP核,根据自己的系统要求,构成接口功能模块,就能很好地解决这些问题,例如,ALTERA的Excalibur系列FPGA中就植入了ARM922T微处理器。
       软核与硬核的优缺点是很明显的,如果追求性能的稳定和应用的简便,应该选择硬核;硬核固然有很多优势,但它在灵活性上还是受到了制约。道理很简单:一旦你在某个型号的FPGA中加入了一个硬核MPU,硬核MPU也就将其“不灵活”的属性带给了这个平台——MPU过时了,也就意味着平台过时了。因此,如果想追求更大限度的灵活性,设计者可以选择在FPGA中“写”入一个软核,而不是“固化”一个硬核。

--SOPC=MCU+DSP+FPGA
       这么来理解:SOPC技术可将16位或者32位的MCU以嵌入式软核的形式嵌入到大容量FPGA中,而DSP的运算方式也较容易用FPGA的硬件门电路来实现,Nios设计工具DSP Builder可以很方便地讲现有的DSP算法转换成IP核的形式加入到工程中。

--Nios
       最后总结:Nios是一个CPU软核,集成了Nios CPU的SOPC系统称为Nios系统,第一代Nios CPU是16位微处理器,NiosII是32位微处理器。

转载于:https://www.cnblogs.com/Amazing-Eric/archive/2010/05/05/1728004.html

第一章 概述 1.1 SOPC 的概念 1.2 SOPC 系统设计流程 1.2.1 SOPC Builder 的设计流程 1.2.2 SOPC Builder 的设计阶段 1.2.3 SOPC 系统开发流程 1.3 SOPC 系统开发环境 1.4 本书中的系统配置 第二章 SOPC 系统构架 2.1 系统模块框图 2.2 Nios CPU 2.2.1 指令总线主端口 2.2.2 数据总线主端口 2.2.3 缓冲存储器 2.2.4 移位单元 2.2.5 乘法支持 2.2.6 中断支持 2.2.7 Nios 片上调试模块 2.2.8 开发环境 2.3 Avalon 总线 2.3.1 基本概念 2.3.2 Avalon 总线传输 2.3.3 Avalon 三态接口 2.3.4 地址对齐 2.4 外设IP 模块 2.4.1 通用异步串行接口(UART ) 2.4.2 可编程并行输入/输出模块(PIO ) 2.4.3 定时器 2.4.4 DMA 控制器 第三章 系统硬件开发 3.1 硬件开发流程 3.2 创建Quartus II 工程 3.3 创建Nios 系统模块 3.3.1 开始使用SOPC Builder 3.3.2 系统频率 3.3.3 添加CPU 和外设模块 3.3.4 指定基地址 3.3.5 生成系统模块 3.3.6 添加符号到BDF 中 3.4 编译设计(Compilation) 3.5 编程(Programming ) 3.5.1 配置FPGA 3.5.2 用户微控制器 3.5.3 在Nios 系统上运行软件 3.6 下载设计到 Flash 存储器 第四章 系统软件开发 4.1 软件开发流程 4.2 软件开发环境 4.3 文件系统 4.4 软件开发工具 4.4.1 GNUPro 工具 4.4.2 Nios OCI 调试模块 4.4.3 Nios OCI 调试控制台 4.4.4 Nios SDK Shell 4.5 可配置的处理器硬件属性 4.5.1 乘法器 4.5.2 数据和指令高速缓冲器 4.5.3 用户指令 4.5.4 同时执行的多主(Multi-Master)总线结构和 DMA 4.5.5 数据和指令高速缓冲器 4.5.6 外设和存储器接口 4.6 Nios SDK 4.6.1 inc 目录 4.6.2 lib 目录 4.6.3 src 目录 4.7 软件开发应用 4.7.1 开始前的准备 4.7.2 打开 Nios SDK Shell 4.7.3 编译程序 4.7.4 用insight 下载、运行和调试程序 4.7.5 用Nios OCI 调制控制台下载、运行和调试程序 4.7.6 重建(rebuild)软件 4.7.7 下载软件到 Flash 4.7.8 第三方开发和调试工具 4.8 使用.hexout 4.9 其它的开发板通信和调试方法 4.9.1 GERMS 监视器 4.9.2 Insight:GNU调试器 4.9.3 Gprof:GNU Profiler 4.10 Nios SDK Shell提示信息 4.11 在 Nios 系统中实现中断服务程序(ISR) 4.12 用户自定义指令 4.12.1 用户自定义指令的概念 4.12.2 加速效果 4.12.3 用户自定义指令应用 第五章 系统模拟与调试 5.1 软件配置 5.2 模拟设置 5.2.1 存储器初始化 5.2.2 UART 外设模拟设置 5.2.3 SOPC Builder模拟设置 5.2.4 通用系统模拟文件 5.3 ModelSim 模拟 5.4 模拟结果分析 5.4.1 通过 UART 外设同 GERMS 监控程序交互 5.4.2 执行 PIO 外设操作的 C 程序 5.5 增加/删除波形图信号 5.6 片外存储器模拟 5.6.1 使用自动产生的存储器模块 5.6.2 指定一个定制模块 5.6.3 定义存储器模块内容 5.7 调试 5.7.1 使用 SignalTap II 逻辑分析器 5.7.2 使用 SignalProbe 5.7.3 使用 Chip Editor 第六章 系统设计实例 6.1 建立硬件需求 6.2 创建一个基本的Nios 设计 6.3 GDB 调试 6.4 添加用户外设 6.5 RTL 仿真 6.6 Flash 编程 6.7 用户指令和DMA 6.8 MP3 播放器 附录 1:Nios 嵌入式处理器 32 位指令集 附录 2:Nios 嵌入式处理器开发板-APEX 20K200E 附录 3:Nios 嵌入式处理器开发板-Cyclone_1C20 附录 4:Nios 嵌入式处理器开发板-Stratix_1S10 附录 5:Nios 嵌入式处理器开发板-Stratix_1S40 参考文献
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值