fpga经验很全面很详细 .docx
《fpga经验很全面很详细 .docx》由会员分享,可在线阅读,更多相关《fpga经验很全面很详细 .docx(23页珍藏版)》请在三一办公上搜索。
1、fpga经验很全面很详细 FPGA经验谈 FPGA/CPLD 数字电路设计经验 技术交流讲义 FPGA/CPLD数字电路设计经验分享 1 数字电路设计中的几个基本概念: 1.1 建立时间和保持时间: 建立时间是指在触发器的时钟信号上升沿到来以前,数据稳定不变的时间,如果建立时间不够,数据将不能在这个时钟上升沿被打入触发器;保持时间是指在触发器的时钟信号上升沿到来以后,数据稳定不变的时间, 如果保持时间不够,数据同样不能被打入触发器。 如图1 。 数据稳定传输必须满足建立和保持时间的要求,当然在一些情况下,建立时间和保持时间的值可以为零。 PLD/FPGA开发软件可以自动计算两个相关输入的建立和
2、保持时间 图1 建立时间和保持时间关系图 注: & #1048698; 在考虑建立保持时间时,应该考虑时钟树向后偏斜的情况,在考虑建立时间时应该考虑时钟树向前偏斜的情况。在进行后仿真时,最大延迟用来检查建立时间,最小延时用来检查保持时间。 & #1048698; 建立时间的约束和时钟周期有关,当系统在高频时钟下无法工作时,降低时钟频率就可以使系统完成工作。保持时间是一个和时钟周期无关的参数,如果设计不合理,使得布局布线工具无法布出高质量的时钟树,那么无论如何调整时钟频率也无法达到要求,只有对所设计系统作较大改动才有可能正常工作,导致设计效率大大降低。因此合理的设计系统的时序是提高设计质量的关键
3、。在可编程器件中,时钟树的偏斜几乎可以不考虑,因此保持时间通常都是满足的。 1.2 FPGA中的竞争和冒险现象 信号在FPGA器件内部通过连线和逻辑单元时,都有一定的延时。延时的大小与连线的长短和逻辑单元的数目有关,同时还受器件的制造工艺、工作电压、温度等条件的影响。信号的高低电平转换也需要一定的过渡时间。由于存在这两方面因素,多路信号的电平值 1 FPGA/CPLD 数字电路设计经验 技术交流讲义 发生变化时,在信号变化的瞬间,组合逻辑的输出有先后顺序,并不是同时变化,往往会出现一些不正确的尖峰信号,这些尖峰信号称为毛刺。如果一个组合逻辑电路中有毛刺出现,就说明该电路存在冒险。图2是一个逻辑
4、冒险的例子,从图3的仿真波形可以看出,A、B、C、D四个输入信号经过布线延时以后,高低电平变换不是同时发生的,这导致输出信号OUT出现了毛刺。可以概括的讲,只要输入信号同时变化,组合逻辑必将产生毛刺。 将它们的输出直接连接到时钟输入端、清零或置位端口的设计方法是错误的,这可能会导致严重的后果。 所以我们必须检查设计中所有时钟、清零和置位等对毛刺敏感的输入端口,确保输入不会含有任何毛刺 图2 存在逻辑冒险的电路示例 图3 图2所示电路的仿真波形 冒险往往会影响到逻辑电路的稳定性。时钟端口、清零和置位端口对毛刺信号十分敏感,任何一点毛刺都可能会使系统出错,因此判断逻辑电路中是否存在冒险以及如何避免
5、冒险是设计人员必须要考虑的问题。 如何处理毛刺 我们可以通过改变设计,破坏毛刺产生的条件,来减少毛刺的发生。例如,在数字电路设计中,常常采用格雷码计数器取代普通的二进制计数器,这是因为格雷码计数器的输出每次只有一位跳变,消除了竞争冒险的发生条件,避免了毛刺的产生。 毛刺并不是对所有的输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害,我们可以说D触发器的D输入端对毛刺不敏感。 根据这个特性,我们应当在系统中尽可能采用同步电路,这 2 FPGA/CPLD 数字电路设计经验 技术交流讲义 是因为同步电路信号的变化都发生在时钟沿,只要
6、毛刺不出现在时钟的沿口并且不满足数据的建立和保持时间,就不会对系统造成危害。 去除毛刺的一种常见的方法是利用D触发器的D输入端对毛刺信号不敏感的特点,在输出信号的保持时间内,用触发器读取组合逻辑的输出信号,这种方法类似于将异步电路转化为同步电路。 图4给出了这种方法的示范电路,图5是仿真波形。 图4 消除毛刺信号方法之二 图5 图4所示电路的仿真波形 如前所述,优秀的设计方案,如采用格雷码计数器,同步电路等,可以大大减少毛刺,但它并不能完全消除毛刺。 毛刺并不是对所有输入都有危害,例如D触发器的D输入端,只要毛刺不出现在时钟的上升沿并且满足数据的建立和保持时间,就不会对系统造成危害。因此我们可
7、以说D触发器的D输入端对毛刺不敏感。但对于D触发器的时钟端,置位端,清零端,则都是对毛刺敏感的输入端,任何一点毛刺就会使系统出错,但只要认真处理,我们可以把危害降到最低直至消除。下面我们就对几种具体的信号进行探讨。 1.3 清除和置位信号 在FPGA的设计中,全局的清零和置位信号必须经过全局的清零和置位管脚输入,因为他们也属于全局的资源,其扇出能力大,而且在FPGA内部是直接连接到所有的触发器的置位和清零端的,这样的做法会使芯片的工作可靠、性能稳定,而使用普通的IO脚则不能保证该性能。 3 FPGA/CPLD 数字电路设计经验 技术交流讲义 在FPGA的设计中,除了从外部管脚引入的全局清除和置
8、位信号外在FPGA内部逻辑的处理中也经常需要产生一些内部的清除或置位信号。清除和置位信号要求象对待时钟那样小心地考虑它们,因为这些信号对毛刺也是非常敏感的。 在同步电路设计中,有时候可以用同步置位的办法来替代异步清0。在用硬件描述语言的设计中可以用如下的方式来描述: 异步清0的描述方法: process(rst,clk) begin if rst=1 then count0); elsif clkevent and clk=1 then count=count+1; end if; end process; 同步清0的描述方法: process begin wait until clkeven
9、t and clk=1; if rst=1 then count0); else count=count+1; end if; end process; 图6 异步清0、置位逻辑图 图7 同步清0、置位关系图 4 FPGA/CPLD 数字电路设计经验 技术交流讲义 1.4 触发器和所存器: 我们知道,触发器是在时钟的沿进行数据的锁存的,而所存器是用电平使能来锁存数据的。所以触发器的Q输出端在每一个时钟沿都会被更新,而所存器只能在使能电平有效器件才会被更新。在FPGA设计中建议如果不是必须那么应该尽量使用触发器而不是所存器。 那么在使用硬件描述语言进行电路设计的时候如何区分触发器和所存器的描述方
10、法哪?其实有不少人在使用的过程中可能并没有特意区分过,所以也忽略了二者在描述方法上的区别。下面是用VHDL语言描述的触发器和所存器以及综合器产生的电路逻辑图。 触发器的语言描述: process begin wait until clkevent and clk=1; q=d; end process; 图 触发器 所存器的语言描述: process(en,d) begin if en=1 then q=d; end if; end process; FPGA/CPLD 数字电路设计经验 技术交流讲义 图 所存器 由上述对Latch的描述可见,其很容易于选择器的描述相混淆,用VHDL语言对选择
11、器的描述方法如下: 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内部,后经过全局
12、时钟BUF适配到全局时钟网络的,这样的时钟网络可以保证相同的时钟沿到达芯片内部每一个触发器的延迟时间差异是可以忽略不计的。 6 FPGA/CPLD 数字电路设计经验 技术交流讲义 在FPGA中上述的全局时钟网络被称为时钟树,无论是专业的第三方工具还是器件厂商提供的布局布线器在延时参数提取、分析的时候都是依据全局时钟网络作为计算的基准的。如果一个设计没有使用时钟树提供的时钟,那么这些设计工具有的会拒绝做延时分析有的延时数据将是不可靠的。 在我们日常的设计中很多情形下会用到需要分频的情形,好多人的做法是先用高频时钟计数,然后使用计数器的某一位输出作为工作时钟进行其他的逻辑设计。其实这样的方法是不规
13、范的。比如下面的描述方法: process begin wait until clkevent and clk=1; if fck=1 then count0); else count=count+1; end if; end process; process begin wait until count(2)event and count(2)=1 ; shift_reg=data; end process; 7 FPGA/CPLD 数字电路设计经验 技术交流讲义 在上述的第一个process电路描述中,首先计数器的输出结果相对于全局时钟clk已经产生了一定的延时;而在第二个process中
14、使用计数器的bit2作为时钟,那么shift_reg相对于全局clk的延时将变得不好控制。布局布线器最终给出的时间分析也是不可靠的。这样产生的结果波形仿真如下图所示: 正确的做法可以将第二个process这样来写。 process begin wait until clkevent and clk=1 ; if count(2 downto 0)=”000” then shift_reg=data; end if; end process; 或者分成两步来写: process(count) begin if count(2 downto 0)=”000” then en=1; else en=
15、0; end if; end process; process begin wait until clkevent and clk=1 ; if en=1 then shift_reg add_12_a_0 = (0 & count_buffer(0)(10 downto 0); add_12_b_0 add_12_a_0 = (0 & count_buffer(0)(21 downto 11); add_12_b_0 add_12_a_0 = (00 & count_buffer(0)(31 downto 22); add_12_b_0 add_12_a_0 =; add_12_b_0 =;
16、 end case; end process; -12 bits adder add_12_result_0 = add_12_a_0 + add_12_b_0; -Bytes Count process(RST,CLK_25MHz,IO,OE_bar,data_sel,Count_0_en) begin if(RST = 1)then -system Reset count_buffer(0) 0); Carry_0_0 = 0; Carry_0_1 = 0; Carry_0_2 = 0; elsif(CLK_25MHzevent and CLK_25MHz = 0)then if(OE_b
17、ar = 0 and data_sel = 0)then count_buffer(0) = IO; Carry_0_2 count_buffer(0)(10 downto 0) = add_12_result_0(10 downto 0); Carry_0_0 count_buffer(0)(21 downto 11) = add_12_result_0(10 downto 0); Carry_0_1 count_buffer(0)(31 downto 22) = add_12_result_0(9 downto 0); Carry_0_2 Carry_0_2 = 0; end case;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- fpga经验很全面很详细 fpga 经验 全面 详细
![提示](https://www.31ppt.com/images/bang_tan.gif)
链接地址:https://www.31ppt.com/p-3157308.html