华为VHDL设计风格和实现.ppt
《华为VHDL设计风格和实现.ppt》由会员分享,可在线阅读,更多相关《华为VHDL设计风格和实现.ppt(51页珍藏版)》请在三一办公上搜索。
1、VHDL设计风格和实现,内容概述,一、同步设计二、速度三、资源四、其他,一、同步设计,什么是同步设计?,同步设计:上游数据到下游逻辑单元的传递是通过时钟来同步的。-只要能满足时延要求,就可以确保下游逻辑单元能正确采样到上游数据。异步设计:上游数据发生变化的时机是不确定的,甚至会出现中间态。-下游逻辑对上游数据的采样是不确定的,会发生数据传递的错误。,为什么要做同步设计?,两年前我做的FPGA设计,现在却不能工作。FPGA本身有什么变化吗?-如果采用的是异步设计,能否工作有很多无法控制的随机因素。我的设计原来可以工作,但将FPGA重新布线后,就不行了。怎么回事?-异步设计也许在特定布线下能工作,
2、但布线改变后就不行了。很危险吧?我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对?-对于异步设计,通过了时间仿真也不一定能正常工作。要小心,时钟信号可别产生毛刺啊。要小心,异步复位可别有毛刺啊。快速FPGA中的触发器会对非常窄的毛刺信号作出反应。-异步设计中,设计者老要想着去消除时钟、异步复位信号以及锁存器使能端的毛刺,但这一点在异步设计中很困难,甚至不可能。,异步设计可能会产生以下问题:,同步设计的一个简单原则:永远不要将组合逻辑产生的信号用作时钟、异步复位/置位。,门产生的时钟有问题,此例中,计数终点信号会产生毛刺,使用该信号作时钟会引起问题。-MSB布线更短,信号变化先到达与门
3、。与门会“感知”到1111的中间态。由于与门为电平敏感,会输出高电平的毛刺,从而引起寄存器的误动作。,布线更短,此处会产生毛刺,并且与计数器的时钟无关,MSB,0111 1000 计数器的操作为:,0111 1111 1000 因为MSB更快,计数器,flop,MSB,此处的与门为电平敏感,相应的VHDL代码,signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(Clk)beginif rising_edge(Clk)thenCounter=Counter+1;
4、end if;end process;TC=1 when Counter=“1111”else 0;-TC为组合逻辑输出process(TC)beginif rising_edge(TC)then-使用组合逻辑输出作时钟,是异步设计,禁止!flop=end if;end process;,毛刺和同步设计,组合逻辑的毛刺通常总是存在,难于甚至无法消除毛刺只有在异步设计中(连接到时钟、异步复位、锁存器的使能端)才存在问题在同步设计中,由于寄存器在时钟沿才会动作,只要能满足时延要求,就能确保采样到稳定正确的结果毛刺无法消除,但其造成的问题却可以消除采用同步设计并达到时延要求,安全同步化异步输入一例去
5、抖动逻辑,异步输入,系统时钟,同步输入,设备外围,D,Q,延迟一个周期后才复位,确保D端输入脉冲至少有一个周期的宽度,没有中间态,异步输入的信号变化时机和宽度不确定,有抖动(毛刺),不能直接被同步系统正确采样,该逻辑确保能正确得到异步输入的上升沿。一个时钟周期内的多次电平变化被认为是抖动(毛刺),最后只得到一个上升沿。,相应的VHDL代码,signal AsynInput:std_logic;signal InputReg:std_logic;signal Delay:std_logic;signal SynInput:std_logic;process(SynInput,AsynInput)
6、beginif SynInput=1 then-此置位为寄存器信号,为同步设计,可行InputReg=0;if rising_edge(AsynInput)thenInputReg=1;end if;end process;process(Clk)beginif rising_edge(Clk)thenDelay=InputReg;SynInput=Delay;end if;,D,Q3,Async R,INPUT,CLOCK,Counter,Q2,Q1,Q0,D,Q,同步设计方法中TC的生成和使用,对照前面异步设计中TC生成和使用的例子,TC,相应的VHDL代码,signal Counter:
7、std_logic_vector(3 downto 0);signal TC:std_logic;signal flop:std_logic;process(TC,Clk)beginif TC=1 then-此复位为寄存器信号,为同步设计,可行Counter=“0000”;TC=-;elsif rising_edge(Clk)thenCounter=Counter+1;if Counter=“1110”then-注意和异步设计中TC信号的比较-此处TC为寄存器输出TC=1;elseTC=0;end if;end if;end process;,同步设计的更多例子(可行),D,Q1,INPUT,
8、CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,例2signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal s:std_logic;process(Clk)begin if rising_edge(Clk)then if INPUT=1 then Counter=Counter+1;end if;if TC=1 then-TC 用在寄存器的CE端,为同步设计,可行 s=DATA;end if;end if;end process;TC=1 when Counter=“1
9、111”else 0;-TC为组合逻辑输出,例1signal Counter:std_logic_vector(1 downto 0);process(Clk)begin if rising_edge(Clk)then if INPUT=1 and Counter/=“11”then Counter=Counter+1;end if;-组合逻辑用在寄存器的D端,-为同步设计,可行 end if;end process;,异步设计的更多例子(禁止),D,Q1,Async R,这些例子有什么问题?,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,
10、例2signal Counter:std_logic_vector(3 downto 0);signal TC:std_logic;signal s:std_logic;process(Clk)begin if rising_edge(Clk)then if INPUT=1 then Counter=Counter+1;end if;end if;end process;TC=1 when Counter=“1111”else 0;-TC为组合逻辑输出process(TC)begin if rising_edge(TC)=1 then-TC 用作寄存器的时钟,为异步设计,禁止!s=DATA;e
11、nd if;end process;,例1signal Counter:std_logic_vector(1 downto 0);process(Counter,Clk)begin if Counter=“11”then-组合逻辑用作寄存器的异步复位,-为异步设计,禁止!Counter=“00”;elsif rising_edge(Clk)then if INPUT=1 then Counter=Counter+1;end if;end if;end process;,二、速度,中间态、时延和速度,当寄存器间数据传递的时延超过一个时钟周期,下游寄存器不能在下一个时钟周期采样到本时钟周期给出的上
12、游数据,出现错误。当时钟来临时,寄存器输入发生变化,会采样到中间态。-建立时间不能被满足,就会采样到中间态,最后的采样结果不确定。避免采样不到和采样到中间态的方法是满足时延要求系统中的最大时延决定了系统的速度,也决定了系统能正常工作的最大时钟频率。,D,CLK,Q,CLK,D,Q,当建立时间不够时,会采样到中间态,最后的采样结果不确定。,建立时间,D,CLK,Q,D,CLK,Q,时延中包括时钟歪斜(Skew),下面逻辑中,数据时延很小(最大3.6ns),如果时钟歪斜较小,该逻辑可以跑200MHz以上。由于存在时钟歪斜,Flop B到Flop C的实际时延为3.3+12.1-3.6=11.8ns
13、,在100MHz下就不能工作。计算速度时要考虑时钟歪斜的影响。使用全局驱动,可以减少时钟歪斜。,INPUT,CLOCK,D,Q,Flop C,Flop B,Flop A,时延级数怎么算?,FPGA的时延通常 布线占50%,逻辑占50%不要忘记了时钟到输出的时间(tco,输出时间)和时钟到建立的时间(tsu,建立时间)-逻辑时延级数总会包括这两级。还需要检查I/O的速度。,XCV100-4的例子,3级逻辑的速度有多快?布线时延大致可估算为与逻辑时延相等下面Slice的时延是Tilo,从F,G经过LUT输出的时延,D,CE,Q,D,CE,Q,Tcko+布线+Tilo+布线+Tilo+布线+Tilo
14、+布线+Tdick,1.372+1.057+0.738+1.057+0.738+1.057+0.738+1.405+0.765=8.927ns 或者 110MHz,速度估计,用逻辑时延作为网络时延的估计已知系统的时钟频率,可以估计允许的逻辑深度和功能需求相对照,修改设计以满足性能需要。在50 MHz下使用XCV100-4的例子:时钟周期20 ns一级布线时延-5 ns(Tcko+Tnet+Tick)Tcko+Tick=2.871ns允许增加时延=15 ns每增加一级的时延/1.52 ns(Tilo+Tnet)Tilo=0.738ns允许增加的级数=710 Slices,注意此Slice中使用了
15、LUT,所以建立时间是Tick而不是Tdick,这种映射结果减少了一级布线时延,对高扇出的网络使用全局驱动,设计中,有高扇出的时钟使能、IOB三态以及其他信号吗?使用剩余的BUFG来驱动它们,以达到更小的歪斜和更高的性能使用BUFG,时钟和CE输入的歪斜可以小于1ns使用BUFG的方法,实例化BUFG,将相应信号连接上去,D,CE,Q,R,P,CE or OE or RST,INPUT,CLOCK,BUFG,使用全局复位有助于提高速度,所有的触发器在上电时通过全局置位/复位(GSR)网络进行初始化你可以通过实例化(instantiating)STARTUP 元件(primitive)访问GSR
16、网络。断言(assert)GSR进行全局置位/复位GSR自动连接到所有CLB的触发器,使用专用的布线资源。使用GSR,可以节约通用布线资源,减小布线时延,提高系统速度不要连接GSR到触发器的复位、置位输入端任何信号(如内部信号、外部输入等)都可以连接到GSR,但该信号必须在设计中定义。尽可能使用全局复位限制使用非全局复位的异步复位的触发器数量非全局复位会使用额外的布线资源,VHDL代码中的复位,在下面的VHDL中,应该在Rst中对寄存器赋值,否则Rst信号会被综合成寄存器的CE端的一个输入。-浪费布线资源、增加逻辑级数,降低系统速度 即使不关心寄存器的复位状态,也应该对其赋初值,可以赋初值为“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 华为 VHDL 设计 风格 实现
链接地址:https://www.31ppt.com/p-6449169.html