开云十大最新推荐

登录 免费注册 开云十大最新推荐 | 行业黑名单 | 帮助
维库电子市场网
技术交流 | 电路欣赏 | 工控天地 | 数字广电 | 通信技术 | 电源技术 | 测控之家 | EMC技术 | ARM技术 | EDA技术 | PCB技术 | 嵌入式系统
驱动编程 | 集成电路 | 器件替换 | 模拟技术 | 新手园地 | 单 片 机 | DSP技术 | MCU技术 | IC 设计 | IC 产业 | CAN-bus/DeviceNe

FPGA/CPLD数字电路设计经验分享zz

作者:rickyice 栏目:IC设计
FPGA/CPLD数字电路设计经验分享zz
一位大虾的经验总结,基础的。
FPGA/CPLD数字电路设计经验分享

摘要:在数字电路的设计中,时序设计是一个系统性能的主要标志,在高层次设计方法中,对时序控制的抽象度也相应提高,因此在设计中较难把握,但在理解RTL电路时序模型的基础上,采用合理的设计方法在设计复杂数字系统是行之有效的,通过许多设计实例证明采用这种方式可以使电路的后仿真通过率大大提高,并且系统的工作频率可以达到一个较高水平。

关键词:FPGA 数字电路 时序 时延路径 建立时间 保持时间

1 数字电路设计中的几个基本概念:
1.1 建立时间和保持时间:
建立时间(setup time)是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间(hold time)是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。 如图1 。 数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。 PLD/FPGA开发软件可以自动计算两个相关输入的建立和保持时间(如图2)

图1 建立时间和保持时间关系图
注:在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。

建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。

1.2 FPGA中的竞争和冒险现象
信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为"毛刺"。如果一个组合逻辑电路中有"毛刺"出现,就说明该电路存在"冒险"。(与分立元件不同,由于PLD内部不存在寄生电容电感,这些毛刺将被完整的保留并向下一级传递,因此毛刺现象在PLD、FPGA设计中尤为突出)图2是一个逻辑冒险的例子,从图3的仿真波形可以看出,"A、B、C、D"四个输入信号经过布线延时以后,高低电平变换不是同时发生的,这导致输出信号"OUT"出现了毛刺。(我们无法保证所有连线的长度一致,所以即使四个输入信号在输入端同时变化,但经过PLD内部的走线,到达或门的时间也是不一样的,毛刺必然产生)。可以概括的讲,只要输入信号同时变化,(经过内部走线)组合逻辑必将产生毛刺。 将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。 所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺
图2 存在逻辑冒险的电路示例

图3 图2所示电路的仿真波形
冒险往往会影响到逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免冒险是设计人员必须要考虑的问题。

如何处理毛刺
我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。

毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D触发器的D输入端对毛刺不敏感。 根据这个特性,我们应当在系统中尽可能采用同步电路,这是因为同步电路信号的变化都发生在时钟沿,只要毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。 (由于毛刺很短,多为几纳秒,基本上都不可能满足数据的建立和保持时间)

去除毛刺的一种常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图4给出了这种方法的示范电路,图5是仿真波形。

如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。 毛刺并不是对所有输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因此我们可以说D触发器的D输入端对毛刺不敏感。但对于D触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处理,我们可以把危害降到最低直至消除。下面我们就对几种具体的信号进行探讨。

1.3 清除和置位信号在FPGA的设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为他们也属于全局的资源,其扇出能力大,而且在FPGA内部是直接连接到所有的触发器的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普通的IO脚则不能保证该性能。

在FPGA的设计中,除了从外部管脚引入的全局清除和置位信号外在FPGA内部逻辑的处理中也经常需要产生一些内部的清除或置位信号。清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。

在同步电路设计中,有时候可以用同步置位的办法来替代异步清0。在用硬件描述语言的设计中可以用如下的方式来描述:

异步清0的描述方法:
PROCESS(rst,clk)
begin
if rst=’1’ then
count<=(others=>’0’);
elsif clk’event and clk=’1’ then
count<=count+1;
end if;
end PROCESS;

同步清0的描述方法:
PROCESS
begin
wait until clk’event and clk=’1’;
if rst=’1’ then
count<=(others=>’0’);
else
count<=count+1;
end if;
end PROCESS;

1.4 触发器和所存器:
我们知道,触发器是在时钟的沿进行数据的锁存的,而所存器是用电平使能来锁存数据的。所以触发器的Q输出端在每一个时钟沿都会被更新,而所存器只能在使能电平有效器件才会被更新。在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是所存器。
那么在使用硬件描述语言进行电路设计的时候如何区分触发器和所存器的描述方法哪?其实有不少人在使用的过程中可能并没有特意区分过,所以也忽略了二者在描述方法上的区别。下面是用VHDL语言描述的触发器和所存器以及综合器产生的电路逻辑图。

触发器的语言描述:
PROCESS
begin
wait until clk’event and clk=’1’;
q<=d;
end PROCESS;


所存器的语言描述:
PROCESS(en,d)
begin
if en=’1’ then
q<=d;
end if;
end PROCESS;

由上述对Latch的描述可见,其很容易于选择器的描述相混淆,用VHDL语言对选择器的描述方法如下:
PROCESS(en,a,b)
begin
if en=’1’ then
q<=a;
else
q<=b;
end if;
end PROCESS;

2 FPGA/CPLD中的一些设计方法
2.1 FPGA设计中的同步设计
异步设计不是总能满足(它们所馈送的触发器的)建立和保持时间的要求。因此,异步输入常常会把错误的数据锁存到触发器,或者使触发器进入亚稳定的状态,在该状态下,触发器的输出不能识别为l或0。如果没有正确地处理,亚稳性会导致严重的系统可靠性问题。
另外,在FPGA的内部资源里最重要的一部分就是其时钟资源(全局时钟网络),它一般是经过FPGA的特定全局时钟管脚进入FPGA内部,后经过全局时钟BUF适配到全局时钟网络的,这样的时钟网络可以保证相同的时钟沿到达芯片内部每一个触发器的延迟时间差异是可以忽略不计的。

在FPGA中上述的全局时钟网络被称为时钟树,无论是专业的第三方工具还是器件厂商提供的布局布线器在延时参数提取、分析的时候都是依据全局时钟网络作为计算的基准的。如果一个设计没有使用时钟树提供的时钟,那么这些设计工具有的会拒绝做延时分析有的延时数据将是不可靠的。

在我们日常的设计中很多情形下会用到需要分频的情形,好多人的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计。其实这样的方法是不规范的。比如下面的描述方法:
PROCESS
begin
wait until clk’event and clk=’1’;
if fck=’1’ then
count<=(others=>’0’);
else
count<=count+1;
end if;
end PROCESS;

PROCESS
begin
wait until count(2)’event and count(2)=’1’ ;
shift_reg<=data;
end PROCESS;

在上述的第一个PROCESS电路描述中,首先计数器的输出结果(count(2))相对于全局时钟clk已经产生了一定的延时(延时的大小取决于计数器的位数和所选择使用的器件工艺);而在第二个PROCESS中使用计数器的bit2作为时钟,那么shift_reg相对于全局clk的延时将变得不好控制。布局布线器最终给出的时间分析也是不可靠的。这样产生的结果波形仿真如下图所示:

正确的做法可以将第二个PROCESS这样来写。
PROCESS
begin
wait
2楼: >>参与讨论
rickyice
re
希望对大家有帮助!

3楼: >>参与讨论
phoenixwyf
GOOD
8错

4楼: >>参与讨论
effice
T=Tco+Tdelay+Tsetup+Tpd???
注:在这个逻辑图中有个参数:Tpd ,即时钟的延时参数,我们在刚才做时间分析的时候,没有提这个参数,(如果使用PLD的全局时钟型号,Tpd可以为0,如果是普通时钟,则不为0)。所以如果考虑到时钟的延时,精确的公式应该是T=Tco+Tdelay+Tsetup-Tpd。当然以上全部分析的都是器件内部的运行速度,如果考虑芯片I/O管脚延时对系统速度的影响,那么还需要加一些修正。


T=Tco+Tdelay+Tsetup-Tpd我怎么觉得是:T=Tco+Tdelay+Tsetup+Tpd???


5楼: >>参与讨论
jason_30
从网上抄的别人的


6楼: >>参与讨论
tntcnn
有没有弄ACTEL的
 
7楼: >>参与讨论
rickyice
Verilog讨论组精彩内容摘录(一)
我遇到了一个问题,希望能得到帮助。
              我在用FPGA(ALTERA
            10K30)做仿真实验时,内部的计数器总是计数不正常,但是我在微机中用MODELSim仿真的结果是正确的,所以逻辑应该没有问题,问题出在FPGA,请教各位,我该如何解决这个问题。谢谢!
              I met a question,hope someone could do me a favor.
              when I used FPGA do simulating experiment, i found the inner
            counter worked abnormally.but if i use MODELSim do such a
            experiment,everything is ok.so i confirm the problem should be due
            to FPGA.
              who can tell me how to deal with this problem? thanks a lot!

            回答一:
              Have you checked clock signal on scope? Those DEVICE really a GOOD
            clock waveform.

            回答二:
              你用的片子不会有问题吧,检查有么有问题可以只做一个计数器看看计数对不对不就的了.我觉得应该是片子的问题.

            回答三:
              首先请检查FPGA的使用方法!

            回答四:
              我觉得片子有问题的可能性比较小,还是应该先找自己的原因,否则我们一出现问题就把责任说成是芯片的问题,那么问题就不好解决了。而且10K30国内也很多人在用,如果连一个计数器都出错的话,我看ALTERA也就没什么市场了。
              用MODELSim做仿真,只是从语言角度来验证,它只能说明你的逻辑没有问题,但逻辑最终是要在芯片中靠逻辑电路来实现,所以必须考虑到芯片的一些特性。不知道你的计数器是多少位的?速度是多少?输入的信号质量怎么样?
              如果你的计数器位数比较多的话,最好是分两级或多级来实现,否则很容易在内部因延迟时间不同而造成问题。

            回答五:
            Dear Friend

            Your words is very right. Anything question? First find from
            yourself,
            2nd others. It is very glad to receive your email. Would you please
            tell me
            your NAME and contact address.

            Best regards
            wisdom

            回答六:
              做时序仿真了吗?用MODELSim做或Maxplus2都可以利用布局布线后的延时信息作时序仿真。我怀疑你只作了功能仿真

            回答七:
              我认为这个问题可能出在异步逻辑上(如清零、预置),在功能仿真时这个问题有时不能发现,但用时序仿真时会很轻易地发现原因所在。如果采用同步设计的话,这个问题将不会存在。

            回答八:
            Dear Sir

            Maybe your design have the bug, it is easy that ALTERA is not
            synthesis
            HDL company, MODEL sim ensure the HDL simulation right, but the
            ALTERA MP2
            maybe compiler the project into abnormal staus. In fact, MP2 have
            the AHDL
            counter LPM, you can directly call the MODULE, it is tested
            available.
            Anything I can help you, pls let me know.

            Our company sales the ALTERA FPGA and MAX7xxx, if you need, pls fell
            free to contact to me.

            Best regards
            Wisdom.Zhang


8楼: >>参与讨论
rickyice
Verilog讨论组精彩内容摘录(二)
问题:
        是不是用FPGA EXPRESS能编译标准的Verilog HDL语言写的程序,再生成EDIF文件交给MAX+PLUS处理?具体如何操作?

      回答一:
        好像MAX+PLUS也能编辑Verilog HDL语言写的程序,具体做法从文本编辑窗口输入程序,编译即可.

      回答二:
        还是推荐大家用Synplify做综合吧,对语法的要求不严格,软件也不大。
      连ALTERAXILINX的人都推荐我用。

      回答三:
        Synplify 在综合方面好一些,但maxplus II 的功能更全面些,我觉得.

      回答四:
        Synplify速度快,但不见得综合效果好。Leonardo spectrum不错,还可以综合到ASIC。

      回答五:
        Half and half, I don't agree the viewpoints.

      回答六:
        Synplify ONLY synthesis, MP2 including all FPGA application
      function.Their
      marketing focus is not same. Please advise.

      回答七:
        The web-friend advise is right if your design is not Large-scale, But
      pls notes that ALTERA is FPGA vendor, not HDL synthesis vendor. If you
      think your design is very large, for example, you will design with 10K100
      or ACEK etc, at least over 5K DFF application, you should apply such as
      FPGA Express or Exemplar etc tools.

      回答八:
        The Web-friend is very important, I use the Synplify from 1997, it is
      very GOOD, FPGA Express embbed their core-solution.

9楼: >>参与讨论
rickyice
Verilog讨论组精彩内容摘录(三)
问题一:
              在下才疏学浅,一直在用LATTICE.html">LATTICEISPLSI,搞了一些小应用,看到各位都在谈论XILINXALTERA,本人没有机会尝试,究竟哪一种比较好,请高人不吝赐教。

            回答一:
              LATTICE.html">LATTICE
            的ISPLSI我毕业设计时用过一枚,感觉其在系统编程是十分方便的,但熔丝图的生成好象要ispexper这一专门软件,他支持原理图输入和VHDL输入等,十分方便且0具有逻辑与时序仿真,其烧录速度(根据熔丝图大小)相当快,一般几秒钟就行了。

            回答二:
              1、首先可编程器件从结构上分为CPLD和FPGA二类,从制造工艺上有CMOSFLASHSRAM、反熔丝等几种。
              2、CPLD一般来讲容量较低(注意CPLD和FPGA的门数的定义不一样,实际上对门没有统一的定义,不能认为CPLD的10000门的规模就比5000门的规模大,我们比较能接受的是在ASIC中定义一个与非门为一个门)。CPLD的速度一般都较快,时延比较确定(注意:实际设计的时延和速度都要通过时序仿真才能确定,一般来讲器件资料中所提到的最高速度在实际设计中是不可能达到的,因为所谓的最高速度是指的一级设计,并且会BYPASS一些路径。)这和它的结构有关,如:LATTICE有GRP概念,XILINX9500则提出快速交换矩阵的思想,目的都是为了达到较快的速度。通过对CPLD的结构分析就会发现CPLD的逻辑功能比FFs要多。CPLD一般采用CMOSFLASH工艺,CMOS的功耗大,但下载的速度快,FLASH的功耗很小,但加载的时间较长,当然还和实际设计的一些情况有关,如:频率、利用率等。
              3、FPGA是相对CPLD而言的,它的规模可以相当大。从结构上讲也是大同小异的,一般是由最基本的CELL组成,CELL内部是LUT和FFs,比较综合考虑了的逻辑和FF的比例关系,当然仔细看的话,每家的结构还是有一些特点的。FPGA的内部布线资源是很丰富的,要设计好FPGA必须充分了解所有的资源情况,并合理地利用。FPGA的一个很大特点是时延不确定,不同的编译有不同的结果,这一定要牢记!如果设计不好会遇到有些板子可以工作,而有的板子就是不行,尽管用的同一个FPGA数据。
              4、CPLD和FPGA不存在哪个好,要根据你的实际情况而选择。
              草草写一下,以后最谈。

            问题二:
              你好!我想请教几个问题:
              1、什么是FFs
              2、在FPGA时延不确定的情况下,怎样的设计才能保证该设计是比较好的设计,而不会出现尽管用的同一个FPGA数据有些板子可以工作,而有的板子就是不行这种情况呢?
              谢谢!

            回答一:
              1、FFs:触发器。
              2、优化设计;尽量采用同步设计;高速、多驱动通道用全局缓充驱动,合理利用长线资源等。

            回答二:
              FF 是指 Flip Flop,也就是触发器的最基本单元。
              FPGA设计的时候需要特别注意最后实现时的最大延时,如果各条线路的最大延时能够满足条件,一般就不会出现什么太大的问题。另外,有些公司已经推出了固定延时的FPGA,只是XILINX公司还没有。

            回答三:
               The all effect factor, it is important that man-resource and
            design solution. To FPGA, CPLDs, LATTICE.html">LATTICE , ALTERA, XILINX are all
            very GOOD, To marketing share, the XILINX is most high.

               We can design very GOOD function , even discret LOGIC. Do you
            think so? LATTICE.html">LATTICE, ALTERA ,Xilins , it ONLY is tools. Man is No.1
            for ever, so that you did not MUST study ALTERA, XILINX

10楼: >>参与讨论
百合花香
文章很好,支持一下!但是,图在哪里?
 
11楼: >>参与讨论
jason_30

好帖,好像是从可编程网上搞的吧

12楼: >>参与讨论
kaka_987
请教我这个分频电路有编译问题
library ieee;
use ieee.std_logic_1164.all;
use ieee.std_logic_unsigned.all;
entity freqdi is
   PORT(sela,selb:in std_logic;
        clkin:in std_logic;
        clkout:out std_logic;
        clk100hz:out std_logic);
end freqdi;
architecture behav of freqdi is
   constant divi:integer:=10;
   constant divi_1:integer:=10_000;
   constant divi_2:integer:=100_000;
   constant divi_3:integer:=100_000;
   signal   muxval:integer range 4 downto 0;
  begin
   clk_div:PROCESS(clkin,sela,selb,muxval)
    variable cnt:integer range 0 to 9;
    variable cnt_1:integer range 0 to 9_999;
    variable cnt_2:integer range 0 to 99_999;
   begin
                       muxval<=0;
      if(sela='1')then muxval<=muxval+1;end if;
      if(selb='1')then muxval<=muxval+2;end if;
     if rising_edge(clkin)then
       case muxval is
         when 0=> if(cnt<(divi/2)) then
                     clkout<='1';
                     cnt:=cnt+1;  
                    elsif(cnt<(divi-1))then
                      clkout<='0';
                      cnt:=cnt+1;
                     else cnt:=0;
                      end if;
       when 1=>if(cnt_1<(divi_1/2)) then
                     clkout<='1';
                     cnt_1:=cnt_1+1;
                    elsif(cnt_1<(divi_1-1))then
                      clkout<='0';
                      cnt_1:=cnt_1+1;
                     else cnt_1:=0;
                      end if;
       when 2=>if(cnt_2<(divi_2/2)) then
                     clkout<='1';
                     cnt_2:=cnt_2+1;
                    elsif(cnt_2<(divi_2-1))then
                      clkout<='0';
                      cnt_2:=cnt_2+1;
                     else cnt_2:=0;
                      end if;
       when others=>null;
      end case;
    end if;
end PROCESS clk_div;
clk_100hz:PROCESS(clkin)is
    variable cnt_3:integer range 0 to 99_999;
   begin
     if rising_edge(clkin)then
        if(cnt_3<(divi_3/2)then
            clk100hz<='1';
            cnt_3:=cnt_3+1;
        elsif (cnt_3<(divi_3-1))then
            clk100hz<='0';
            cnt_3:=cnt_3+1;
         else cnt_3:=0;
         end if;
      end if;
end PROCESS clk_100hz;
end behav;


13楼: >>参与讨论
rickyice
re
贴出error

14楼: >>参与讨论
mrqingfeng
re
有图就更好了,

15楼: >>参与讨论
rickyice
ALTERA设计注意事项
同步和异步     
              
            异步逻辑主要用组合逻辑来实现控制,容易因时钟传递延时不一致而产生毛刺。如果可能尽量改成同步逻辑。当输出信号用于RESET,CLEAR,PRESET时最好改成同步的!同步逻辑用的门数比异步逻辑多,但对ALTERA芯片来说同步和异步用的是同样多的LC或MC。


            CLIQUE的应用   
              CLIQUE有利于高速设计,应用于有相关性的逻辑,把设计分成小模块更容易实施CLIQUE。但是Apply CLIQUE at the
            whole design = No CIQUE at all !!!

            组合逻辑设计    
              组合逻辑容易设计,但要注意处理好毛刺,不要用加固定延时的方式来处理毛刺,最好分析出毛刺产生的原因,然后重新设计新的电路。
            编译     
                为节省时间,可以选择模块,不必所有的都的过程都使用。SMART
            Recompile可以缩短重新编译的时间。也可以选择WYSIWYG综合方式。并去掉只有定时仿真时需要的SNF Timing
            Extractor部分。
            Setup/Hold Time     
                 仿真时可以检查Setup/Hold Time,如果发现有问题,要调整输入的时钟频率,特别要注意实际电路的频率不能导致该问题!
            设计高速电路     
               当电路的频率比较低时,可以查其Delay
            Path,查处较大延迟的地方,在可能的地方加入DFF,移动DFF等。纯组合逻辑时延会比较大。
            三态门        
               ALTERA 只提供I/O引脚的三态门,不提供内部的三态门。内部三态门被转化成多路选择器。
            ALTERA指出:其实内部三态门毫无意义。

16楼: >>参与讨论
rickyice
FPGA与CPLD的区别
系统的比较,与大家共享:
      尽管FPGA和CPLD都是可编程ASIC器件,有很多共同特点,但由于CPLD和FPGA结构上的差异,具有各自的特点:
      ①CPLD更适合完成各种算法和组合逻辑,FP
      GA更适合于完成时序逻辑。换句话说,FPGA更适合于触发器丰富的结构,而CPLD更适合于触发器有限而乘积项丰富的结构。
      ②CPLD的连续式布线结构决定了它的时序延迟是均匀的和可预测的,而FPGA的分段式布线结构决定了其延迟的不可预测性。

      ③在编程上FPGA比CPLD具有更大的灵活性。CPLD通过修改具有固定内连电路的逻辑功能来编程,FPGA主要通过改变内部连线的布线来编程;FP
      GA可在逻辑门下编程,而CPLD是在逻辑块下编程。

      ④FPGA的集成度比CPLD高,具有更复杂的布线结构和逻辑实现。

      ⑤CPLD比FPGA使用起来更方便。CPLD的编程采用E2PROM或FASTFLASH技术,无需外部存储器芯片,使用简单。而FPGA的编程信息需存放在外部存储器上,使用方法复杂。


      ⑥CPLD的速度比FPGA快,并且具有较大的时间可预测性。这是由于FPGA是门级编程,并且CLB之间采用分布式互联,而CPLD是逻辑块级编程,并且其逻辑块之间的互联是集总式的。


      ⑦在编程方式上,CPLD主要是基于E2PROM或FLASH存储器编程,编程次数可达1万次,优点是系统断电时编程信息也不丢失。CPLD又可分为在编程器上编程和在系统编程两类。FPGA大部分是基于SRAM编程,编程信息在系统断电时丢失,每次上电时,需从器件外部将编程数据重新写入SRAM中。其优点是可以编程任意次,可在工作中快速编程,从而实现板级和系统级的动态配置。


      ⑧CPLD保密性好,FPGA保密性差。

      ⑨一般情况下,CPLD的功耗要比FPGA大,且集成度越高越明显。
      随著复杂可编程逻辑器件(CPLD)密度的提高,数字器件设计人员在进行大型设计时,既灵活又容易,而且产品可以很快进入市场。许多设计人员已经感受到CPLD容易使用、时序可预测和速度高等优点,然而,在过去由于受到CPLD密度的限制,他们只好转向FPGA和ASIC。现在,设计人员可以体会到密度高达数十万门的CPLD所带来的好处。

      CPLD结构在一个逻辑路径上采用1至16个乘积项,因而大型复杂设计的运行速度可以预测。因此,原有设计的运行可以预测,也很可靠,而且修改设计也很容易。CPLD在本质上很灵活、时序简单、路由性能极好,用户可以改变他们的设计同时保持引脚输出不变。与FPGA相比,CPLD的I/O更多,尺寸更小。

      如今,通信系统使用很多标准,必须根据客户的需要配置设备以支持不同的标准。CPLD可让设备做出相应的调整以支持多种协议,并随著标准和协议的演变而改变功能。这为系统设计人员带来很大的方便,因为在标准尚未完全成熟之前他们就可以著手进行硬件设计,然后再修改代码以满足最终标准的要求。CPLD的速度和延迟特性比纯软件方案更好,它的NRE费用低於ASIC,更灵活,产品也可以更快入市。CPLD可编程方案的优点如下:

      ●逻辑和存储器资源丰富(CYPRESS Delta39K200的RAM超过480 Kb)
      ●带冗余路由资源的灵活时序模型
      ●改变引脚输出很灵活
      ●可以装在系统上后重新编程
      ●I/O数目多
      ●具有可保证性能的集成存储器控制逻辑
      ●提供单片CPLD和可编程PHY方案
      由于有这些优点,设计建模成本低,可在设计过程的任一阶段添加设计或改变引脚输出,可以很快上市
      CPLD的结构
      CPLD是属於粗粒结构的可编程逻辑器件。它具有丰富的逻辑资源(即逻辑门与寄存器的比例高)和高度灵活的路由资源。CPLD的路由是连接在一起的,而FPGA的路由是分割开的。FPGA可能更灵活,但包括很多跳线,因此速度较CPLD慢。

      CPLD以群阵列(array of
      clusters)的形式排列,由水平和垂直路由通道连接起来。这些路由通道把信号送到器件的引脚上或者传进来,并且把CPLD内部的逻辑群连接起来。


      CPLD之所以称作粗粒,是因为,与路由数量相比,逻辑群要大得到。CPLD的逻辑群比FPGA的基本单元大得多,因此FPGA是细粒的。
      CPLD的功能块
      CPLD最基本的单元是宏单元。一个宏单元包含一个寄存器(使用多达16个乘积项作为其输入)及其它有用特性。
      因为每个宏单元用了16个乘积项,因此设计人员可部署大量的组合逻辑而不用增加额外的路径。这就是为何CPLD被认为是“逻辑丰富”型的。

      宏单元以逻辑模块的形式排列(LB),每个逻辑模块由16个宏单元组成。宏单元执行一个AND操作,然后一个OR操作以实现组合逻辑。

      每个逻辑群有8个逻辑模块,所有逻辑群都连接到同一个可编程互联矩阵。
      每个群还包含两个单端口逻辑群存储器模块和一个多端口通道存储器模块。前者每模块有8,192b存储器,后者包含4,096b专用通信存储器且可配置为单端口、多端口或带专用控制逻辑的FIFO。

      CPLD有什麽好处?
      I/O数量多
      CPLD的好处之一是在给定的器件密度上可提供更多的I/O数,有时甚至高达70%。
      时序模型简单
      CPLD优于其它可编程结构之处在于它具有简单且可预测的时序模型。这种简单的时序模型主要应归功于CPLD的粗粒度特性。
      CPLD可在给定的时间内提供较宽的相等状态,而与路由无关。这一能力是设计成功的关键,不但可加速初始设计工作,而且可加快设计调试过程。
      粗粒CPLD结构的优点
      CPLD是粗粒结构,这意味著进出器件的路径经过较少的开关,相应地延迟也小。因此,与等效的FPGA相比,CPLD可工作在更高的频率,具有更好的性能。
      CPLD的另一个好处是其软件编译快,因为其易于路由的结构使得布放设计任务更加容易执行。

      细粒FPGA结构的优点
      FPGA是细粒结构,这意味著每个单元间存在细粒延迟。如果将少量的逻辑紧密排列在一起,FPGA的速度相当快。然而,随著设计密度的增加,信号不得不通过许多开关,路由延迟也快速增加,从而削弱了整体性能。CPLD的粗粒结构却能很好地适应这一设计布局的改变。



      灵活的输出引脚
      CPLD的粗粒结构和时序特性可预测,因此设计人员在设计流程的后期仍可以改变输出引脚,而时序仍保持不变。
      新的CPLD封装
      CPLD有多种密度和封装类型,包括单芯片自引导方案。自引导方案在单个封装内集成了FLASH存储器和CPLD,无须外部引导单元,从而可降低设计复杂性并节省板空间。在给定的封装尺寸内,有更高的器件密度共享引脚输出。这就为设计人员提供了“放大”设计的便利,而无须更改板上的引脚输出。

17楼: >>参与讨论
rickyice
常用FPGA/PLD开发软件简介
集成的PLD/FPGA开发环境
      这类软件都是由PLD/FPGA芯片厂家提供,基本都可以完成所有的设计输入(原理图或HDL),仿真,综合,布线,下载等工作。


      ALTERA公司 上一代的PLD开发软件,使用者众多。目前ALTERA已经停止开发MaxplusII,而转向QuartusII软件平台
      该软件有几个版本,Maxplus II Baseline 和 Maxplus II
      E+MAX是免费版本,只能支持少量芯片。同时不支持复杂的VHDL和Verilog程序。


      ALTERA公司 新一代PLD开发软件,适合大规模FPGA的开发。
      该软件有学习版本:Quartus II web edition,免费。


      XILINX公司上一代的PLD开发软件,目前XILINX已经停止开发Foundation,而转向ISE软件平台


      XILINX公司 目前的PLD开发软件,有多个版本。
      ispLEVER
      是 LATTICE公司 的PLD开发软件。
      其它PLD厂商均也有自己的开发环境,学习者可以自行查阅:
      CYPRESS公司
      ACTEL公司
      Quicklogic公司 

18楼: >>参与讨论
rickyice
PLD/FPGA新手入门
PLD是可编程逻辑器件(Programable LOGIC DEVICE)的简称,FPGA是现场可编程门阵列(Field
      Programable Gate
      Array)的简称,两者的功能基本相同,只是实现原理略有不同,所以我们有时可以忽略这两者的区别,统称为可编程逻辑器件或PLD/FPGA。
            PLD是电子设计领域中最具活力和发展前途的一项技术,它的影响丝毫不亚于70年代单片机的发明和使用。   

          
      PLD能做什么呢?可以毫不夸张的讲,PLD能完成任何数字器件的功能,上至高性能CPU,下至简单的74电路,都可以用PLD来实现。PLD如同一张白纸或是一堆积木,工程师可以通过传统的原理图输入法,或是硬件描述语言自由的设计一个数字系统。通过软件仿真,我们可以事先验证设计的正确性。在PCB完成以后,还可以利用PLD的在线修改能力,随时修改设计而不必改动硬件电路。使用PLD来开发数字电路,可以大大缩短设计时间,减少PCB面积,提高系统的可靠性。
      PLD的这些优点使得PLD技术在90年代以后得到飞速的发展,同时也大大推动了EDA软件和硬件描述语言(HDL)的进步。
         
          
      如何使用PLD呢?其实PLD的使用很简单,学习PLD比学习单片机要简单的多,有数字电路基础,会使用计算机,就可以进行PLD的开发。不熟悉PLD的朋友,可以先看一看可编程逻辑器件的发展历程
      。

            开发PLD需要了解两个部分:1。PLD开发软件 2。PLD本身。
         
          
      由于PLD软件已发展的相当完善,用户甚至可以不用详细了解PLD的内部结构,也可以用自己熟悉的方法:如原理图输入或HDL语言来完成相当优秀的PLD设计。所以对初学者,首先应了解PLD开发软件和开发流程。了解PLD的内部结构,将有助于提高我们设计的效率和可靠性。
         
          如何获得PLD开发软件软件呢?
      许多PLD公司都提供免费试用版或演示版(当然商业版大都是收费的),例如:可以免费从//www.altera.com/
      上下载ALTERA.html">ALTERA公司的 Maxplus2 (Baseline版或E+MAX版),或向其代理商索取这套软件。想更多的了解这套软件的使用,请点击此处
      。 XILINX.html">XILINX 公司也提供免费软件:WebPack,这套可以从XILINX.html">XILINX网站 下载。LATTICE ,Actel
      等公司也都有类似的免费软件提供。以上免费软件都需要在网上注册申请License文件,如果您对License的安装还有不清楚,请仔细阅读相关网页上的说明,也可以下载这篇文档:EDA软件的license管理与安装
      。 通常这些免费软件已经能够满足一般设计的需要,当然,要想软件功能更强大一些,只能购买商业版软件。

            
      对于PLD产品,一般分为:基于乘积项(Product-Term)技术,EEPROM(或FLASH)工艺的中小规模PLD,以及基于查找表(Look-Up
      table)技术,SRAM工艺的大规模PLD/FPGA。EEPROM工艺的PLD密度小,多用于5,000门以下的小规模设计,适合做复杂的组合逻辑,如译码。SRAM工艺的PLD(FPGA),密度高,触发器多,多用于10,000门以上的大规模设计,适合做复杂的时序逻辑,如数字信号处理和各种算法。
          
          目前有多家公司生产CPLD/FPGA,最大的三家是:ALTERAXILINXLATTICE-Vantis .      

           在PLD/FPGA开发软件中完成设计以后,软件会产生一个最终的编程文件(如 .pof )。如何将编程文件烧到PLD芯片中去呢?
             
      1。对于基于乘积项(Product-Term)技术,EEPROM(或FLASH)工艺的PLD(如ALTERA.html">ALTERA的MAX系列,LATTICE的大部分产品,XILINX.html">XILINX的XC9500系列)
      厂家提供编程电缆,如ALTERA.html">ALTERA叫:Byteblaster,电缆一端装在计算机的并行打印口上,另一端接在PCB板上的一个十芯插头,PLD芯片有四个管脚(编程脚)与插头相连。

          
       
       


          下载 ALTERA 3.3/5v 编程电缆(Byteblaster MV) 的数据手册

          下载 ALTERA 5v 编程电缆(Byteblaster ) 的数据手册

          

          下载 XILINX.html">XILINX编程电缆的电路原理图

          

          下载LATTICE的电缆资料

          

          

          
      它向系统板上的器件提供配置或编程数据,这就是所谓的在线可编程(ISP,如下图)。Byteblaster使用户能够独立地配置PLD器件,而不需要编程器或任何其它编程硬件。编程电缆可以向代理商购买,也可以根据厂家提供的编程电缆的原理图自己制作,成本仅需一,二十元。(参见数据手册)
      早期的PLD是不支持ISP的,它们需要用编程器烧写。目前的PLD都可以用ISP在线编程,也可用编程器编程。这种PLD可以加密,并且很难解密。
       
          1.将PLD焊在PCB板上 2.接好编程电缆 3.现场烧写PLD芯片

          2。对于基于查找表技术(Look-Up
      table)技术,SRAM工艺的FPGA(如ALTERA.html">ALTERA的所有FLEX,ACEX,APEX系列,XILINX.html">XILINX的Sparten,Vertex),由于SRAM工艺的特点,掉电后数据会消失,因此调试期间可以用下载电缆配置PLD器件,调试完成后,需要将数据固化在一个专用的EEPROM中(用通用编程器烧写),上电时,由这片配置EEPROM先对PLD加载数据,十几个毫秒后,PLD即可正常工作。(亦可由CPU配置PLD)。但SRAM工艺的PLD一般不可以加密。

          
      3。还有一种反熔丝(Anti-fuse)技术的FPGA,如Actel,Quicklogic及LUCENT的部分产品就采用这种工艺。用法与EEPOM的PLD一样,但这种的PLD是不能重复擦写,所以初期开发过程比较麻烦,费用也比较昂高。但反熔丝技术也有许多优点:布线能力更强,系统速度更快,功耗更低,同时抗辐射能力强,耐高低温,可以加密,所以在一些有特殊要求的领域中运用较多,如军事及航空航天。

19楼: >>参与讨论
hualuohua
好铁
楼主很好,支持!强烈支持!以后多发这样的帖子。

20楼: >>参与讨论
amzhang
up
 
21楼: >>参与讨论
randman
辛苦了啊
 
22楼: >>参与讨论
sf105
不错,支持!!!
 
23楼: >>参与讨论
wxz008
up
h
a
o

24楼: >>参与讨论
mingjie
hao
很好,强烈支持

25楼: >>参与讨论
解牛
有些疑惑
我好象发现怎么我们的IC设计大部分在学习语言和语法什么的?应该从哪里开始学起呢?》

26楼: >>参与讨论
风景天
支持楼主
多给我们新手一些经验 谢谢楼主了

参与讨论
昵称:
讨论内容:
 
 
相关帖子
diva skill file
请教积分电路!
Cadence simulation 后plot 电流出问题了
想说两句
xilinx的xc9572下载不了,不知怎么回事,那位朋友知道?


Copyright © 1998-2006 fzqkw.cn 浙ICP证030469号