加入收藏 | 设为首页 | 会员中心 | 我要投稿 | RSSRSS-巴斯仪表网
您当前的位置:首页 > 电子发烧 > EDA技术

FPGA三国志-第一篇/不可不看的故事

时间:2013-08-27  来源:123485.com  作者:9stone

CPLD的时代
    我在12年前,偶然接触PLD,没有想到自己居然就在这个行当里安身下来。可是这个行业也的确是个飞速发展的行业,十多年过去后,从当初的接近十家主要供应商,到今天已经激烈搏杀后,只有差不多如论坛题目一样的,成为了今天三足鼎立的局面。想来想去,决定以这个名字作为论坛的主题。同时也和大家分享我多年来的一些经历和感受。

全局布线,ISP,PLD,宏单元机构,成为PLD市场必备的武器。
   
CPLD时代,进入我国最早的供应商是Lattice,那个时候,也不是每个行业都用的了这种产品。首先,软件是需要收费的。这个和今天你可以轻松下载到免费的版本有很大的不同。另外,不同的授权,也决定你能使用不同的产品规模和设计语言。
    90年代中,是电信行业大发展的年代。同时也是专用应用领域大发展的时代。当时pld是解决一个逻辑粘连的功能。同时由于Lattice很早进入市场, 推广很成功。全局布线池的结构,对于布局布线要求不高。一度时间,很多大的通信企业,研究所,都很快成为Lattice的用户。但是,有句话说得好。“长江后浪推前浪,前浪死在沙滩上。”太早的成功也孕育着。安则危!
    94年Altera已经有了一些用户。但是相对来说。还是很有局限性。另外过去的信息远远不可以与今天同日而语.   但是用过altera的工程师,已经为他的界面和功能留下了深刻的印象。96年是ALTERA在中国发力追赶的开始。当然,乱世出英雄。当时的代理商是一家香港的公司。他们很快找出这种集成电路最好的销售和支持模式。并且这种从大洋那边继承过来的方式,经过适当的改良,的确收到很好的效果。代理商有专门负责的现场应用工程师。 这种方式极大方便了设计者与供应商之间的信息交流。在推广初期是否有技术支持,变得非常重要。这个时期在整个中国市场上涌现出很多非常优秀的现场技术工程师。今天已经有很多人成为这个行业的领军人物。
    Lattice首开ISP技术先河,也就是今天常说的在线可编程,给所有设计者带来很大的方便。芯片在电路板上,可以直接编程调试。不用每次拔插芯片,再通过紫外线来擦写要方便得多。这个时候,Lattice还是明显占有上风的。毕竟先入为主嘛。当时主要的型号集中在Lattice ispLSI1032, 1016, Altera的EPM7128E,不过Altera已经做好了准备,因为,Altera毕竟是pld的发明者。而且也是最早采用Windows平台的开发工具。在美国市场上占有先机。他不会轻易放弃这样一个市场
    当时的应用在电信领域主要是将之前的74系列的一些单元进行集成。同时加入一些控制功能。不过这个时期的产品结构都是采用mc单元结构。每个mc实际上就是相当于32到36个与非门,以Altera EPM3032为例就是认为有32*30到256*30, 大致就是7000门左右,因此产品命名为MAX7000,但是当时的设计很多还在大量应用异步设计。因此,电路的结构如果能导致利用率的上升,将是更加有竞争力的表现。MC的结构就是采用先组合,后时序多个时钟输入结构。Lattice是用4个宏单元一组。altera 采用8个一组。而且,altera在利用率上,稍微占有上风。同时Altera当时的maxplusII的良好界面。在97,98年的两年时间里,已经奠定在中国的基础。更深层次,Altera已经看到未来市场的需求,前面说到,成功太早有时候也不是好事。在MAX7000的铺垫下,Altera已经有了进攻Xilinx的武器,可Altera一致宣称那不是FPGA,换以一个更加中性的名字---CPLD(复杂可编程逻辑器件)。 那什么是Altera的武器呢。FLEX8000!他的出现是Altera奠定今天可以和xilinx平分秋色的基础。
    在1996,97年, 成都,西安多家做专业领域的公司和研究单位,也使用了一些Actel,Actel的产品和那个时候的Quicklogic来说,都是属于Antifuse的技术。 使用他的最大好处在当时就是有防止辐射,就是说在航空产品中可以用。 但是需要你认真的仿真。 如果你烧入进去设计, 就只能换下一片了。 而且为了烧断里面的熔丝, 第三方的编程器支持的也不多。 但是他们有些军用温度的产品。 还是在这个领域有不错的口碑。
    Actel当时的策略结构是, 基本上和他们现在的论调也非常一致, 就是精细颗粒, 所有的DFF,还是可以靠独立的门来搭建。 这个在他早先的A1020等产品系列上可以看到。 而且芯片上有一部分是组合逻辑区, 有一部分是时序逻辑区。 另外他们的软件也是多家EDA工具的组合。 特别是库的一致性不是特别通用。
    Quicklogic的产品是FPGA公司中最早嵌入Synplify的商家,而且他们的LE结构是基于Mux的,底层的layout也可以清晰看到路由,资源消耗。输入法和库的建立很特别。 但是也存在上面的问题。产品好像是QLxxx的,我还去应聘过一次这家公司,因为他们最早采用Synplify。而且,当时我已经感觉Synplify和 雷昂纳多(拼写忘记了),以及exzampler??这个拼写也有问题。我在做FAE的时候,总是用这3个工具都综合一次,看他们哪个强。后来证明是对的。Sy是最平均的,而且简单的优点傻瓜。遗憾他也在今年被Synopsys收购了。现在Quicklogic也专注一些细分市场。

为什么要这样的结构-先组合,后时序多个时钟输入
    随着科技的进步,有很多人已经忘记了很多细节,当然,我们也要遵循一个原则。难事做易,大事做细!就像朱熹说的--“问渠哪得清如许,为有源头活水来“,如果你不知道原理,碰到重要的问题,或者是设计的时候,即使成功,也是不知不觉成功,同样呢,也是不知不觉失败
    拉回话题,当你设计一个扫描电路的时候,例如,你可以采用一个时钟,输入一个计数器,然后计数器的输出,再驱动一个译码器,这样你的电路就出来了。当然事情完成了一半。功能实现了,但是,有没有更好的办法。后者换句话说。有没有适合PLD的方法。实际上用另外一个角度看,这个设计是典型的, 先时序模块,才是组合电路。这个实际上,不是很和PLD本身的结构相符。还有一个问题时,随着电路速度的提高,每个译码输出之间的抖动也成为问题。就是输出的不一样的。 从资源的角度来说,一个计数器,要3各单元。一个译码器,由于有8个输出,还是需要8各单元。但是如果用一个移位寄存器的方式,可以只需要8个单元。或者用状态机的方式实现,也是消耗同样的资源。可是,输出都是由于同一个时钟锁定,每个输出的延迟也比较一致。另外,当时对总线数据的译码是经常有的事情,因此,每个单元的扇入数量都是很高的。都有30个以上。因此,你设计的时候,要有两个思想: 用同步设计模式,用先组合后时序的模式。后来的Xilinx的95系列更是将扇入系数扩大到90个。 也是这个原因。当时PLD厂商比较的也是这些指标。

Xilinx , FPGA的发明者
    Xilinx实际上成立的日期,比altera还晚了一年。但是他走的道路,从开始就注定了有今天的成就。在1996-1998,pld的高端市场,也就是FPGA市场,都是Xilinx把持,主要是xc3000/4000 ,当然Xilinx开创了一个新的结构,不过这种结构还是能够找到一些共同点,也是先组合,后时序。不过很重要的闪亮点是:
细颗粒查找表结构,丰富的寄存器资源,以及分段式路由布线结构,电路上电加载。 当然如果这个也算是的话,那就是,他的内部甚至直接集成了三态门。这个特点是那个时代Xilinx拥趸攻击Altera,Lattice的重要工具。甚至有人说,没有这个不能实现某些电路设计的障碍。 当然了,Altera, Lattice的pld也是具有三态门,不过是在输入输出管脚上。的确是不如Xilinx的来的强大和直接。 有的人问了,这种结构有何好处。

  1. 电路的规模得到空前的提高。
  2. 适合做加加减减的,counter,comparter密集的设计。
  3. 无限制的更新电路。

    在那个时代,衡量一个PLD很重要的指标,就是比谁的规模更大。从这个角度来看。Xilinx无疑走到了最前面。当然,也有人说, 这样的设计不可靠。这样的设计指标难以预测。还有地说这样的设计无法保密。但是市场的成功,应用需求的推动,证明这些都是杂音。
    我们可以从当时xc3000的选型指南上看到。最大规模的产品,也就是今天xilinx最小的xc3s50a规模相当的东西。可是这个和当时PLD流行的规模,实在是一个飞跃。

Xilinx FPGA的架构
    Xilinx的成功,激励了Altera的新产品的推出。同时也有了革命性的突破。世界就是这么奇怪。中国古语。塞翁失马,焉知非福。实际上,如下所言,这款产品因该8282,具有282个逻辑单元的。但是在中国基本上只是在1995年有个别公司使用。

1992 FLEX® 8000 FPGA Altera的第一款现场可编程门阵列(FPGA)
    我本人经历我们开始在1997年开始大规模推广Flex10K, 同年5月,位于西安的邮电部4所,是第一个采用EPF10K50的用户,当时电子杂志的广告,也有表明,Altera最先推出最大的FPGA.
1996 FLEX 10K® FPGA 带有集成锁相环(PLL)的FPGA
1995 FLEX 10K FPGA 带有嵌入式模块RAM的FPGA

    实际上,这个时间就是Lattice噩梦的开始,由于设计规模的迅速攀升,规模已经是决定一个产品的关键因素。但是Lattice一直没有代表作。市场份额已经开始逐步被Xilinx,Altera蚕食。Altera的结构到底是什么革新呢?

Altera FPGA粗颗粒结构,嵌入式存储器,长联线结构.
    Flex10K,他的推出,已经表明,altera的思维已经非常清晰,大规模的fpga将会是将来的王道!而且,高速的嵌入式块RAM是一个开创新的思维。当时,Xilinx凭借分布式RAM以及内置三态的结构,的确大有横扫千军的架势。但是Flex10K的出现,有效提升了Altera的FPGA产品的竞争力。在RAM需求应用不断上升的市场中。Altera迎来了市场的春天。

  1. 采用多选一,或者一对多的MUX结构,Altera推出应用指南。直到用户有效利用这种方式,实现了三态门的功能。
  2. ESB的memory结构,是构建FIFO, DPRAM,大型查找表,都非常方便,
  3. 布线资源相对来说,以长联线资源为主。编译速度快。

    Xilinx的分布式RAM尽管很灵活,但是随着RAM容量的增加,访问的速度也是递减。同时也要消耗大量的逻辑资源。这个时候,应该说Xilinx和Altera的产品已经是势均力敌。因为中国是新兴的市场。这一点表现得很明显.

规模制胜的产物
 

世界是运动的,粗颗粒,也是好结构!
    这里又回到了我们的主题,产品的内在结构。先说细颗粒结构。当时,Xilinx的3000是以CLB为基本机构。
 
    实际上,这个输入的个数是很有讲究的。当时,也有一种激烈的争论,就是5输入的好,还是4输入的好。在实际应用中,应该说,最小的逻辑单元是这样的规模是合理的。但是要注意一点。Xilinx和Lattice后面推出的fpga一样,两个寄存器是具有同一个时钟输入的。
 
    粗颗粒结构,Altera还是依托自己以前在PLD的经验的积累,他的fpga有很多他的pld产品的血统。世界是基于以权制利的。因为这个时候如果已经有了Wintel的名字一样。 数字电路以及CPU的发展,都和8以及8的倍数有关系。因此。这种大颗粒的结构确保:

  1. 8个逻辑单元LE为一组LAB。
  2. 每个LAB内部有独立的布线资源。确保可以实现8bit adder, shift reg, 8bit counter.
  3. ESB,实现了存储器的资源和速度同时提高的可能。
  4. 布局布线算法比细颗粒机构的算法简单。
  5. 采用了非对称的结构,实现速度需求和控制需求的折衷

Cyclone,Stratix,Vertex
    Cyclone 的出现和FPGA的市场定位和产品定位
    好的技术是需要,但是有效的市场定位和销售策略也要跟上。在2002年左右,为了更好服务各种不同市场的需要。而且当时的DSP市场仍然不太明朗,有的观望,也有大力投入。而且也有两种不同的策略。
    一种是同一个器件平台,但是不同的应用区隔,例如Vertex和Spartan,有一段时间,他们可能是同一个产品平台,只是Spartan的东西就是Vertex屏蔽了一部分高级的性能,对于不使用的地方,也不需要检测,同时依靠同一个平台来维持成本优势。
    另外一种,就是Altera的策略,完全依赖客人市场的需要,简化不需要的特性,推出简化的结构,面向主要的逻辑集成和LVDS信号链集成。推出Cyclone,市场反响非常强力,是Altera有史以来,市场响应最快的产品。

 


 

today's:看得很爽。但是那个“先组合后时序”的方法,要怎么设计才能符合这样的设计要求,我想了很久也没想出来。

wisdomz:实际上, 有很多讲述如何避免毛刺,或者是提高系统稳定性,以及全同步的时钟设计概念。都是采用了类似的含义。
1--毛刺消除
有后面的DFF以高的频率,进行打一次的动作,毛刺可以被消除
2--系统的模块间如果有DFF进行输出,或者输入的隔离,那么你可以很好加入探针,通常优化综合是不会将DFF给干掉的。
3--全同步,就是现在的时序分析工具是基于全同步的,如果有两个不同的时钟,你就要加入这两个时钟间的相对关系。来进行约束。 最后要说,你已经花钱买了这个FPGA上的整个资源。就要为了设计的稳定性, 应该把这些为了使你设计稳定而增加的资源给利用了!说的是不是太绕了呢?

today's:1和2懂了,但只是在我设计完的数字逻辑中插入D触发器,来增加稳定性,或方便测试。3也懂,但是不知道和“先组合后时序”有何关联呢。但总的来说我还是在用“先时序后组合”的方式,就是先设计时序电路,由时序电路输出再经过组合逻辑得到最终输出,不知楼主所说“先组合后时序”与我惯用的方式的根本区别在哪里?

wisdomz:就是先设计时序电路,由时序电路输出再经过组合逻辑得到最终输出,不知楼主所说“先组合后时序”与我惯用的方式的根本区别在哪里?
1--实现一个8路输出的扫描电路,每个之间都是一个有一定相位差的方波。
如果用先计数器, 然后再用译码,这个是采用线性思维,what和when的思考模式,非常合乎常情。但是, 当速度高的时候,每个输出之间由于译码长度传输不同,就导致毛刺多。
而且,你的逻辑资源也会是,组合+ 时序,(计数器实现),再加上组合(后面译码),最后,你的那个时序资源就是DFF,就浪费了。 要不就是再次用高速clk打一次,要不就是先组合,后时序,用扫描状态机,或者就是移位寄存器实现。这个就是系统思维模式,是How和why的思考方式。
你认为哪一种更好呢?相信你已经找到答案了。


分享到:
来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
栏目导航->EDA技术
  • 电子应用基础
  • 电源技术
  • 无线传输技术
  • 信号处理
  • PCB设计
  • EDA技术
  • 单片机学习
  • 电子工具设备
  • 技术文章
  • 精彩拆解欣赏
  • 推荐资讯
    使用普通运放的仪表放大器
    使用普通运放的仪表放
    3V与5V混合系统中逻辑器接口问题
    3V与5V混合系统中逻辑
    数字PID控制及其改进算法的应用
    数字PID控制及其改进
    恶劣环境下的高性价比AD信号处理数据采集系统
    恶劣环境下的高性价比
    栏目更新
    栏目热门