PLD的重新定义PLD是什么,Programmable Logic Device. 当然今天应该换个称呼了:Processor+ Logic+DSP了,世界就是这样不停的变化来维持他的稳定。
表1列出了Altera®可编程解决方案的主要历史创新发展过程。,可以看到在2000年的时候,FPGA的厂商已经开始在嵌入式微处理器方面开始崭露头脚。 当然起初引来的也有一片哗然。 说效率低下,难以开发。 新鲜事物的诞生总是要经过这样的阵痛期。
在2002年,就有众多厂家出来声称都支持嵌入式软核CPU。 甚至也和当时流行的8051 turbo以及一些ARM进行比较。
年度 | 技术发展里程碑 | 在PLD业界的率先创新 |
2008 | Stratix ® IV FPGA | 业界的首款40-nm FPGA,具有最高的密度、最好的性能、最低的功耗、最大的收发器带宽(高达8.5-Gbps 的收发器),并为PCI Express Gen 1/2提供硬核知识产权(IP)模块。 |
2007 | ArriaTM GX FPGAs | 业界的首款低成本,基于收发器的中端,协议优化的FPGA。 |
2007 | Cyclone® III FPGA | 业界的首款低成本65nm FPGA,前所未有地同时实现了低功耗、低成本和高性能。 |
2006 | Stratix III FPGA | 65nm FPGA以更高的密度和性能支持高级集成,实现更复杂的产品。 |
2006 | Quartus® II 软件 | 自然支持SDC设计约束 |
2006 | C2H 编译器 | 嵌入式处理器的首款自动ANSI C至寄存器级(RTL)生成工具 |
2006 | Stratix II GX FPGA | 速度最快,密度最大的90nm FPGA架构,含有工作在622Mbps至6.375Gbps的20个低功耗收发器。 |
2005 | HardCopy® II 结构化 ASIC | 精细粒度体系结构;从90nm Stratix II FGPA原型无缝移植。 |
2005 | Cyclone II FPGA | 90nm FPGA,业界首款低成本FPGA,成本降低30%,密度提高3倍。 |
2004 | Stratix II FPGA | 90nm FPGA,含有名为ALM的8输入“分段式”查找表(LUT),以此替代了4输入LUT体系结构。 |
2003 | Quartus II 软件 | 可编程逻辑软件包,提供Tcl脚本支持。 |
2003 | Stratix GX FPGA | 0.13µm FPGA,分块收发器体系结构。 |
2003 | HardCopy 结构化 ASIC | 业界唯一原型至量产0.13µm的完整解决方案 |
2003 | Stratix FPGA | 0.13µm、300mm、高速高密度FPGA |
2002 | Quartus II 软件 | 可编程逻辑设计工具包,支持Linux。 |
2002 | Cyclone FPGA | 世界上成本最低的FPGA(0.13µm) |
2002 | SOPC Builder | 第一款FPGA自动系统生成工具 |
2002 | Stratix FPGA | 世界上第一款带有嵌入式DSP模块的FPGA |
2001 | HardCopy APEX TM 结构化 ASIC | FPGA 首次无缝移植至低成本结构化ASIC |
2001 | 系统互联架构 | 第一款自动生成的互联架构,支持同时主机/从机操作。 |
2001 | Quartus II 软件 | 推出Quartus II 设计软件 |
2001 | MercuryTM FPGA | 世界上第一款带有嵌入式收发器的0.18µm FPGA |
2000 | 基于 ARM® 的 Excalibur TM 器件 | 世界上第一款带有硬件嵌入式处理器的 FPGA |
2000 | Nios® 嵌入式处理器 | 世界上第一款嵌入式处理器,适合可编程逻辑应用。 |
处理器嵌入在FPGA中,需要什么样的温床?
的确,在推出Nios soft processor 两年之后,在我们周边也开始陆续有开始吃螃蟹的了。 但是,还是回到结构的老话题上,来谈论一下为什么这个时候出现了由FPGA制造商推出的CPU,实际上在1997年,就已经有什么FPGACPU的说法甚嚣尘上。 而且也有人在Xilinx和Altera上面分别实现了原形。
开始在FPGA嵌入大块RAM的时候,很多人抨击这种结构,只是一个动物园里面的老虎,实际上就是和猫差不多的杀伤力。 不可以否认,它不如分布式RAM来的灵活,但是它可以作为一些Cache,或者是紧耦合的RAM,还有就是它的规模在容量增加的时候,仍旧有很好的速度,那就可以作为CPU的Cache了。 Altera的RAM都是做在同一列的,很方便级联。 另外总线宽度也很容易更改。
还有就是CPU里面总是有很多总线,内部总线。 由于丰富的行联线的存在,在几列行资源里,就可以轻松集成RAM,CPU要的逻辑资源,以及总线的结构。 这样,CPU也就顺利的在FPGA的世界里粉墨登场了。 虽然起初只是16bit的。
2002年,Altera的开发软件已经趋于稳定,可以说已经很适合自己产品的结构,而且布线效率非常高。同时Altera的Nios也上升为NiosII,这个时候NiosII已经蜕变为美丽蝴蝶---一个32bit的RISC CPU。 而且Altera又采用了非对称的机构实现了革命性的Avlon互联体系。 关于这个体系的由非对称可以覆盖对称的,或不对称性的应用,我们以后详细聊。 总而言之。 如果再有一款更好结构的低成本的FPGA,那无异于在FPGA市场上刮起一场飓风!
Xilinx有Microblaze,其他的有ARM的核,实际上FPGA上实现的CPU,不是由一个CPU的内核来决定他的应用,而是谁有最好的互联体系,能和外围设备,和FPGA中的RAM,乘法器,以及其他定制逻辑更好桥接,粘合成一个SOPC,那才是真正意思上的软核。 那究竟什么样子才好呢?
- 可以增加多个核来弥补自己速度上的缺陷,提高更多的并行处理
- 灵活的总线结构,可以连接高速,慢速,master,salve的模块
- 可以将客制化的逻辑,有效集成到CPU的指令体系。
- 有面向不同应用,可以进行裁剪的CPU core
- 方便片上调试的环境
- 可以快速自动实现外设资源冲突仲裁的机制
- 可以实现以软代硬,或者以硬代软,在软硬间转化速度与资源的偏重
如果有以上的特性,那相信留给设计者的只有是无限的遐想空间。
FPGA上的CPU,有太多的元素,你知道吗?
我们从哪里开始讲呢,准备从算盘开始讲CPU,很多人说,我是不是太无聊了呢?听我明天说给你听!看似简单的算盘,绝对孕育着无比的大智慧。 看是简单的Avalon,也同样有很多玄机。 那就是变变变。
来自Xilinx的消息,关于CPU在FPGA设计中的一些预测
神奇的算盘
上回说到算盘。 实际上大家应该都见过这个了不起的发明,只是他出现在你的记忆中的次数越来越少,就忘记了,实际上,很多伟大之处在很早就有历史可以证明的。 看看你平时见到的算盘。
算盘的妙处和Altera的LE排列布局非常相似,或许是巧合吧。
但是这里的偶然也有些必然。 或许我们有一天说,FPGA的结构最早是源于我国的。 哈哈,玩笑啊。
- 可以增加多个核来弥补自己速度上的缺陷,提高更多的并行处理
一个算盘是算盘,级联起来还是算盘,可以横向,也可以纵向 - 灵活的总线结构,可以连接高速,慢速,master,salve的模块
算盘是平行也是并行结构,上面的有两个珠子,下面5个,2也可以代表10,5也可以代表10,同时,进位时也可以暂时存储在高档位,也可以留在本档。进位链和Altera LE的进位布局也是一样。
看一个更久的照片,当然这个也可以代表Cyclone的layout了。
Avalon的奥秘
总线结构:
全交叉,部分交叉型(适合FPGA中的嵌入总线!)
Xilinx的是共享总线型。仍旧属于传统型设计,只是将其搬移到了FPGA中。
处理器接口主要抽象为:
- 共享寄存器
- RAMs
- FIFOs
上面看起来,这两个softcore都差不多,看了下面的特点,你就有答案了。
Selecting Hardware Architecture
Bus
- achieve relatively high clock frequencies
- expense of little
- no concurrency
- common arbitration unit.
- all masters compete for access to
Full Crossbar Switch-NiosII Avalon
- concurrent transactions
- flexible
- high throughput
- large multiplexers
- more masters and slaves are added
- avoid large crossbar switches
Partial Crossbar Switch--Avalon is okey
- connectivity to a subset of the slaves
- provides the optimal connectivity
- operates at higher clock frequencies
- interconnect fabric consumes fewer resources.
- ideal for ASIC or
- FPGA interconnect structures
- slave side arbitration.
Streaming-Avalon Streaming Map
- high speed data transfers
- point-to-point connections between source and sink
- eliminating arbitration
Dynamic Bus Sizing
Understanding Concurrency
Create Multiple Masters
- General purpose processors, such as Nios II
- DMA engines
- Communication interfaces, such as PCI Express
Create Separate Datapaths
Use DMA Engines
- data width
- clock frequency
- more DMA engines
Include Multiple Master or Slave Ports
- increases the concurrency
Create Separate Sub-Systems
Increasing Transfer Throughput
increasing the transfer efficienc
lower frequency devices can be used
Using Pipelined Transfers
- Maximum Pending Reads
- Selecting the Maximum Pending Reads Value
Pipelined Read Masters
Increasing System Frequency
strategy
- introduce bridges to reduce the amount of logic
- increase the clock frequency.
Tatic
Use Pipeline Bridges
- Master-to-Slave Pipelining
- Slave-to-Master Pipelining
- waitrequest Pipelining
Use a Clock Crossing Bridge
Consequences of Using Bridges
- Increased Latency
- Limited Concurrency
- Address Space Translation
Reducing Logic Utilization
Reducing Power Utilization
Reduce Clock Speeds of Non-Critical Logic
Clock Crossing Bridge
Avalon-MM master ports operating at a higher frequency to slave ports running a a lower frequency
- PIOs
- UARTs (JTAG or RS-232)
- System identification (SysID)
- Timers
- PLL (instantiated within SOPC Builder)
- Serial peripheral interface (SPI)
- EPCS controller
- Tristate bridge and the components connected to the bridge
总线结构是SOPC的最重要的战场,也是区分SOPC是否高效的关键因素!
1--说到SOPC,最基本的集成首先是CPU的内置,但是CPU的有下列因素决定总线结构。
- CPU---冯诺依曼结构,CISC体系多采用这种方式,特点,就是指令功能强大,总线结构复杂,堆栈结构设计庞大。 因为要解决所有Master和Salve之间的运算和重写,另外寻址模式非常丰富。 缺点是酒?峁垢丛樱?面积偏大,面积偏大导致这类CPU的频率不能太高!
- CPU--哈佛结构,总线独立,能够提高并行,基本上以数据流加工为主。 所以DSP,以及一些RISC的体系也很多 。
这里声明,RISC,CISC和CPU结构无必然联系。
简单说来:RISC是以总线结构越少越好,通络尽可能简单。例如大部分指令面向寄存器,然后数据操作多数在寄存器完成。 有很多甚至基于堆栈。
共享总线的速度设计与性能总结:
- 完成相对高的总线频率
- 相对低廉的成本
- 不能并行!(这个是缺点)
- 共用的仲裁结构(缺点,反应速度慢)
- 所有主设备对从设备的存取都存在竞争关系(同时访问时候)
当然在FPGA中,双向三态的实现是依靠多选一和DFF的隔离来实现的,而且,多数为同步设计。 当然在现代分离系统的设计中,已经很早有这样的先例。
例如一个ARM和TI的DSP进行协同的系统,TI DSP中有对总线进行释放的功能机制,释放的时候,可以由ARM来对DSP中的数据结果进行交换,或者是操作参数的更新。 然后再将总线控制权返回给主控的ARM.在FPGA中,也是同样的道理。
NIOS II的总线结构Avalon是具有全数字交叉的总线结构,支持多主并发的结构。
FPGA中,由于FPGA中丰富的互联结构,以及FPGA中本身的逻辑胶合的本身设计定位,决定了在FPGA中的SOPC的总线结构:全数字交叉的互联结构是SOPC在FPGA中性能发挥的调节棒!
很多人对此有以下担忧:
- 仲裁结构复杂,
- 规模过于庞大
- 对设计工具要求高(每次互联设计,可能要修改太多东西)
Altera采用了一个折中的方式就是部分数字交叉结构。
而且将仲裁机制放在了从端,这样做的好处,就是有冲突访问可能的从设备,就对他增加仲裁,好处:
- 降低了总线规模
- 提高并行性
- 仲裁效率高
没有优良的总线结构,一切都是空谈,有效的机制,可以弥补CPU的性能的低能化!
总线接口的抽象!Xilinx和Altera志同道合
尽管总线接口的抽象不同,但是,不代表总线结构一致。 X是总线共享型,A是数字交叉型。
例如Avalon-MM,Avalon-SM
Xilinx是PBv,和Fastlink来对应
MM是意思采用存储地址映射抽象,就是将所有端口定义为可以用内存地址来寻址操作。 而SM是代表流媒体数据型,也就是一般和DMA都有一定的联系,当然,也是一种要不就是不断接收数据流 ,要不就是发送数据流的接口。 例如,VGA的数据缓冲,DSP信号数据的输入和输出,例如AD数据的输入,以及DA的输出,同时具有FIFO功能。
并行,并行,再并行。
FPGA中用的设计语言,VHDL,Verilog HDL等,这些都是并行的,FPGA之所以能在很多DSP领域进行大显身手,也是因为他良好的并行扩展性。 那同样。 在SOPC中,要提高系统的整体性能,还是要并行,并行再并行!
上面就结构已经进行了简单的说明。 那么在数据处理的单元上如何设置呢。
1---动态总线宽度的适应。
当你要将32bitNIOS和8bit,或者16bit的系统进行连接的时候,他应该能自动适应!
2--增加多个主控单元,对一些控制进行有效并发。
归纳为三点:
多增加CPU的个数,SOPC支持多CPU,而且现在很多CPU也在发展多核。 商用PC已经很成熟了。
多增加DMA的通道个数,这样CPU可以干别的事情,至少数据吞吐加大
增加PCI-e的设备,这样,NIOS,FPGA不方便处理的,可以通过这样的接口进行功能上的折中。 当然以后也可以增加RapidIO来和TIDSP进行数据的互换。
3--创建分离的数据通路
4--用多DMA进行辅助。 例如
没有新的发明,只是新的组合!
实际上今天很多所谓的创新,也就是一些不同设计元素的合并和组合。 TSMC,在20年前开始代工的时候,有很多人质疑这种方式,实际上这个是一种商业模式的创新。 Altera是前期一些Fabless的厂商之一,很多人也怀疑没有自己的工厂?怎么可以做好产品。 但是回顾今天,大家不都是走这样的路吗。 当然也有一些自己领域的佼佼者,内存,CPU还是自己开灶。
话题拉回,当你一个系统已经不方便的时候,或者是某种功能要求有很突出表现的时候,两个或者多个CPU的系统,或者是拆解再增加必要的子系统。 也是一种创新。
分割为多个子系统的好处:
- 方便管理
- 由于分割后,从设备可以分在不同的有限个主设备中,提供并行,降低冲突。
- 从系统之间耦合较松,就是说可以
依靠共享内存,消息传递,信号灯互锁,FIFO等机制进行同步和信息交换。
一生二,二生三,三生万物.....
现在的工具都很方便复制和例化多个功能单元。 当你设计好一个上面的系统的时候,你也可以将他们又构成一个模块,然后复制这些模块来达到更大的系统。 这种在DSLAM的设计,或者是多路以太网复用到光设备等经常应用。
因此,
一生二,二生三。。。。
当然这种思想是建立在大批量复制功能单元的策略。
另外,还有一种大家熟悉的方式,
就是提高局部的流水动作以提高系统吞吐。 你不仅要有火尖枪,同时也要有混天绫。互相配合才是自然之道。
流水的数据操作分为两类:
- 读流水
- 写流水
读流水和写流水主要是针对目前的一些存储外设来设计的,就是一个主设备可以在第一读的动作发生,但是没有数据返回的前提下,连续发出多个读的动作,然后在适当的时钟延迟后,连续得到由连续发出读的指令而产生的返回数据序列。 好处是,用个图来表达就明白了。
当然了,你可能说,这个说易行难,设计经验不足。 没有关系,SOPCbuilder的master和Slave接口,已经将这些都做好了。 如果你想自己设计一个,实际知道这样的时序,你也可以的。 不外乎就是要做一个读和返回地址的计数器,计数器的差值是在Readdatavalid的返回时候发出的地址数目,当然你也要设计好数据的宽度
ARM Vs Nios II
大家对ARM和NiosII喜欢比较,今天就说上几句。
最快的NiosII (250Mhz) 比ARM7快,
最小的NiosII比最小的ARM7要小
另外NiosII已经有了MMU,而且对Linux进行了支持
ARM7是把西瓜刀
NiosII是把瑞士军刀。NiosII做一个分型算法借助C2H,速度是ARM7的400倍,不算慢。 但是ARM7的生态资源广,这两个应用实际上是相辅相成。