版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、VHDL设计风格和实现,内容概述,一、同步设计 二、速度 三、资源 四、其他,一、同步设计,什么是同步设计?,同步设计:上游数据到下游逻辑单元的传递是通过时钟来同步的。 - 只要能满足时延要求,就可以确保下游逻辑单元能正确采样到上游数据。 异步设计:上游数据发生变化的时机是不确定的,甚至会出现中间态。 - 下游逻辑对上游数据的采样是不确定的,会发生数据传递的错误。,为什么要做同步设计 ?,两年前我做的FPGA设计,现在却不能工作。FPGA本身有什么变化吗? - 如果采用的是异步设计,能否工作有很多无法控制的随机因素。 我的设计原来可以工作,但将FPGA重新布线后,就不行了。怎么回事? - 异步
2、设计也许在特定布线下能工作,但布线改变后就不行了。很危险吧? 我的设计通过了时间仿真,但上板调试时不干活。时间仿真对不对? - 对于异步设计,通过了时间仿真也不一定能正常工作。 要小心,时钟信号可别产生毛刺啊。 要小心,异步复位可别有毛刺啊。 快速FPGA中的触发器会对非常窄的毛刺信号作出反应。 - 异步设计中,设计者老要想着去消除时钟、异步复位信号以及锁存器使能端的毛刺,但这一点在异步设计中很困难,甚至不可能。,异步设计可能会产生以下问题:,同步设计的一个简单原则: 永远不要将组合逻辑产生的信号用作时钟、异步复位/置位。,门产生的时钟有问题,此例中,计数终点信号会产生毛刺,使用该信号作时钟会
3、引起问题。 - MSB布线更短,信号变化先到达与门。与门会“感知”到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) begin if rising_
4、edge(Clk) then Counter = Counter + 1; end if; end process; TC = 1 when Counter=“1111” else 0;-TC为组合逻辑输出 process(TC) begin if 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
6、_logic; signal SynInput:std_logic; process(SynInput, AsynInput) begin if SynInput=1 then-此置位为寄存器信号,为同步设计,可行 InputReg = 0; if rising_edge(AsynInput) then InputReg = 1; end if; end process; process(Clk) begin if rising_edge(Clk) then Delay = InputReg; SynInput = Delay; end if;,D,Q3,Async R,INPUT,CLOCK
7、,Counter,Q2,Q1,Q0,D,Q,同步设计方法中TC的生成和使用,对照前面异步设计中TC生成和使用的例子,TC,相应的VHDL代码,signal Counter: std_logic_vector(3 downto 0); signal TC:std_logic; signal flop:std_logic; process(TC, Clk) begin if TC=1 then-此复位为寄存器信号,为同步设计,可行 Counter = “0000”; TC = -; elsif rising_edge(Clk) then Counter = Counter + 1; if Coun
8、ter=“1110” then-注意和异步设计中TC信号的比较 -此处TC为寄存器输出 TC = 1; else TC = 0; end if; end if; end process;,同步设计的更多例子(可行),D,Q1,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,例2 signal Counter: std_logic_vector(3 downto 0); signal TC: std_logic; signal s: std_logic; process(Clk) begin if rising_edge(Clk) then i
9、f 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=“1111” else 0; -TC为组合逻辑输出,例1 signal Counter: std_logic_vector(1 downto 0); process(Clk) begin if rising_edge(Clk) then if INPUT=1 and Counter/=“11” then Counte
10、r = Counter + 1; end if; -组合逻辑用在寄存器的D端, -为同步设计,可行 end if; end process;,异步设计的更多例子(禁止),D,Q1,Async R,这些例子有什么问题 ?,INPUT,CLOCK,Counter,Q0,INPUT,CLOCK,DATA,相应的VHDL代码,例2 signal Counter: std_logic_vector(3 downto 0); signal TC: std_logic; signal s: std_logic; process(Clk) begin if rising_edge(Clk) then if I
11、NPUT=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; end if; end process;,例1 signal Counter: std_logic_vector(1 downto 0); process(Counter, Clk) begin if Counter=“11”
12、 then -组合逻辑用作寄存器的异步复位, -为异步设计,禁止! Counter = “00”; elsif rising_edge(Clk) then if INPUT=1 then Counter = Counter + 1; end if; end if; end process;,二、速度,中间态、时延和速度,当寄存器间数据传递的时延超过一个时钟周期,下游寄存器不能在下一个时钟周期采样到本时钟周期给出的上游数据,出现错误。 当时钟来临时,寄存器输入发生变化,会采样到中间态。 - 建立时间不能被满足,就会采样到中间态,最后的采样结果不确定。 避免采样不到和采样到中间态的方法是满足时延要
13、求 系统中的最大时延决定了系统的速度,也决定了系统能正常工作的最大时钟频率。,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,在100MHz下就不能工作。 计算速度时要考虑时钟歪斜的影响。 使用全局驱动,可以减少时钟歪斜。,INPUT,CLOCK,D,Q,Flop C,Flop B,Flop
14、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 +布线 + Tdick,1.372+1.057+0.738+1.057+0.738+1.057+0.738+1.405+ 0.765 =
15、 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中使用了LUT,所以建立时间是Tick而不是Tdick,这种映射结果减少了一级布线时延,对高扇
16、出的网络使用全局驱动,设计中,有高扇出的时钟使能、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网络。 断言(assert)GSR进行全局置位/复位 GSR自动连接到所
17、有CLB的触发器,使用专用的布线资源。 使用GSR,可以节约通用布线资源,减小布线时延,提高系统速度 不要连接GSR到触发器的复位、置位输入端 任何信号(如内部信号、外部输入等)都可以连接到GSR,但该信号必须在设计中定义。 尽可能使用全局复位 限制使用非全局复位的异步复位的触发器数量 非全局复位会使用额外的布线资源,VHDL代码中的复位,在下面的VHDL中,应该在Rst中对寄存器赋值,否则Rst信号会被综合成寄存器的CE端的一个输入。 - 浪费布线资源、增加逻辑级数,降低系统速度 即使不关心寄存器的复位状态,也应该对其赋初值,可以赋初值为“-”,即“Donnt care”。这样,寄存器的复位
18、端不会被使用,节约布线资源 Process(Rst,Clk) begin if Rst=1 then DataValid -); -这个语句一定要写,否则Rst信号会被综合成寄存器 -Data到DataCE端的一个输入 elsif rising_edge(Clk) then DataValid 0); ptr(12 downto 7) -); ptr -, others=0);,采用流水线逻辑来提高速度,FPGA触发器资源丰富 增加流水线逻辑级数,可提高系统速度,?,?,25MHz,50MHz,4-5输入的逻辑函数对速度和密度最有利,Xilinx FPGA由四输入查找表(LUT)组成。 一个查
19、找表能实现其输入形成的任何逻辑函数 相当于编址ROM,将输入作为地址,查找出函数结果。 LUT能实现的函数只受输入数目限制,不受函数复杂度限制 一个Slice中可用两个LUT和选择器实现5输入的任何逻辑。 减少函数输入(扇入)来适合Slice,可以提高逻辑密度和速度。 取反不耗费资源(free)。,CLB Lookup Table,状态机的三种类型编码与速度,二进制: 状态序列如同计数器序列,S1 = 001, S2=010, S3=011, S4=100, etc 枚举: 状态有指定的值, S1=100, S2=110, S3=101, S4 = 111, etc One Hot(单热):
20、每个状态只有一个寄存器有效,S1=00000001, S2=00000010, S3=00000100, etc 在状态机从当前状态跳到下一状态时,二进制和枚举类型有大量的反馈输入。这对CPLD(如XC9500)来说是比较合适的。 在FPGA中, 使用二进制和枚举类型可能会占用较少资源但肯定比one-hot 编码慢。 - One Hot每个状态只需提供一位反馈输入,状态机的速度,对于较大的状态机,使用One Hot编码 二进制或者枚举编码,对于较小的状态机合适。 记住四输入查找表!状态机可能会有很多的扇入,和大量的反馈,对速度不利 使用One Hot, 并限制输入状态数,使输入限制到4-5,可
21、以达到最高的速度。,Input 1,Input 3,State 4,State 6,State 19,1 LUT,D,Q,fn1,D,Q,fn1,D,Q,fn1,对高扇出网络,通过复制寄存器来提高速度,高扇出网络(16个负载)难于布线,而且较慢 考虑在示意图或VHDL中复制资源来改进布线和速度 Foundation工具不会自动完成这种功能 将复制寄存器命名为 _a, _b, _c, 不要用1,2,3. 这样,Foundation映射(map)时会更有效.,计数终点信号提前译码以提高速度,对大的计数器而言,译码产生计数终点信号需要逻辑级数较多 - 提前一个时钟周期译码计数终点信号,寄存后使用,可
22、以提高速度,并保持时序关系不变。,LD,Q0 Q1 Q2 Q3 CO,D0 D1 D2 D3 CE C,D,Q CE C,DATA0 DATA1 DATA2 DATA3 ENABLE CLOCK,复制组合逻辑以提高速度,如果Logic Replication选项被选中,Foundation会自动复制组合逻辑 速度/面积的交易 通过复制组合逻辑,将逻辑合并入一个Slice中,减少了逻辑级数 你的逻辑表达会影响映射结果。 扇出大于1的网络可能在Slice之外。 留意速度关键路径的映射结果,O1,I1,O1,I1,N1,N1 必须输出到两个地方,所以O1需要两级逻辑,复制第一个门,使得逻辑可以合并入
23、一级逻辑中,N1A,N1B,速度关键输入应在逻辑最后一级提供,关键输入应该在逻辑最后一级提供 关键输入为芯片、Slice、或者LUT提供的时延最大的输入 在示意图中,将关键输入连接在逻辑最后一级 在VHDL中,将关键输入放在ifelsif链的第一级,CLB,CLB,IN (Critical),OUT,使用进位逻辑提高速度和密度,使用Slice中的进位逻辑可提高算术运算速度 XCV100-4的例子(具体数据有待验证) 16-bit 加法器(不使用进位)10 Slices 例如:XCV100 有30 x20 CLB, 一条进位链最多可以实现40位的加法器,一个48位加法器需要两条链 使用库中基于进
24、位的宏(RPM) 或者LogiBLOX 许多库中的算术函数是RPM ADDx 加法器, ADSUx 加法/减法器, CCx 计数器 COMPMCx magnitude 比较器 RPM 指相对定位宏 通过RLOC属性指定布局相对位置。 进位逻辑的相对布局需要使用垂直进位逻辑连接,了解进位链流向,XC4000E/L和Spartan/XL进位链流向为上下两个方向 XC4000EX/XL/XV和Virtex器件的进位链流向只能向上,XC4000E Spartan/XL,XC4000EX/XL/XV Virtex,LSB,MSB,编码:只有在必要时才使用二进制序列,可以生成各种需要的序列,而不仅限于二进
25、制 使用预缩放(prescale)技术来提高速度 低位(LSBs)翻转很快 参见Application Notes XAPP001 and XAPP014 如果要译码输出,使用格林(Gray)码计数器 每次只翻转一位,可以避免译码产生毛刺 如果只需要计数终点,考虑使用线性反馈移位寄存器(LFSR)提高速度。 生成序列可以覆盖的地址空间为2n-1,全0不包含在序列中。 n取不同值时,用来生成反馈位的两位不同,参见相关资料 在可以采用任意规则序列的情况下,也可以使用LFSR (比如, FIFO),使用预缩放(Pre-scale)提高计数器速度,计数器的速度由从LSB到MSB的进位延迟决定 预缩放技
26、术对较大的计数器特别有益 - 低位翻转很快,用低位的TC作为高位的CE,可以降低高位的时钟频率 - 使用TimeSpecs进行约束 预缩放技术限制了载入时间,故计数器不可加载 参考XAPP014,I/O 速度:FPGA的建立时间 Tsu,FPGA的输入输出也有时延要求。 满足时延要求的FPGA建立时间由: 全局时钟时延Tbufg 、板上时延Tbrd和上游器件的输出时间Tco(up)决定。 FPGA建立时间(Tsu)的计算公式: Tsu-fpga = Tcyc -Tco(up)- Tbrd + Tbufg 可以使用“OFFSET IN”对Tsu进行约束,D,CE,Q,上游器件,D,CE,Q,XC
27、V400 FPGA,Clock (Tcyc),Tco(up),Tbrd,Tbufg,Tsu,I/O速度:FPGA的输出时间Tco,FPGA输出时间的计算公式: Tco = Tcyc - Tsu(down) - Tbrd - Tbufg 使用“OFFSET OUT”对Tco进行约束,D,CE,Q,XCV400 FPGA,D,CE,Q,下游器件,Clock (Tcyc),Tco,Tbrd,Tbufg,Tsu(down),使用快歪斜率提高输出速度,歪斜率控制输出速度 缺省使用“slow”歪斜率,以降低噪音 当速度重要时,使用“fast”歪斜率 FAST是输出逻辑元件(primitive)的一个参数
28、可以通过加入FAST约束实现。,使用I/O寄存器提高输入和输出速度,使用IOB中的I/O寄存器,可以提高输入和输出速度 - 输入或输出可以去除从内部布线的时延,IOB中的时延也更小 - 还可以节约寄存器资源 实现选项中,选择“Pack I/O Registers/Latches into IOBs for Inputs and Outputs” - 输入若未寄存,直接扇入到组合逻辑,则不能map到IO寄存器中 - 输出若为组合逻辑输出,或者需要反馈为输入,则不能map到IO寄存器中,D,CE,Q,D,CE,Q,I/O pad,From: FPGA,Into: FPGA,OFF,IFF,Outp
29、ut Clock,Input Clock,使用I/O寄存器的例子(FPGA-FPGA),发送器(XCV100-4 FPGA),接收器(XCV100-4 FPGA),使用IOB中寄存器的时延 Tiockp + PCB网络时延 + Tiopick 5.649 1.962=7.611,不使用IOB中寄存器的时延 (Tcko + Tnet +Tioop) + PCB网络时延 + (Tiopi + Tnet + Tdick) (1.372 +0.756+5.652)(0.989+ 1.930+0.728) 7.7803.647 =11.427,输入速度:可编程的输入时延,FPGA的输入通道上有一个可编程
30、的时延 可以用来在建立时间和保持时间之间达到妥协。 可选择全部、部分或无时延 缺省为全时延,以使保持时间的需求为0 可在UCF中进行控制。,D,CE,Q,XC4000 FPGA,输入时延,BUFG,XC4036XL-1的例子: 时延情况 建立时间保持时间 全时延: Tsu = 5.8nsTh = 0 ns 部分时延: Tsu = 4.8nsTh = 1 ns 无时延: Tsu = 0.9nsTh = 4.1ns,I/O速度的其他提示,XC4000-13,36,62XL是turbo boosted。 使用BUFG,可提高pin to pin时延,三、资源,资源使用量是指FPGA使用了的百分率 在
31、宏、库、以及XAPP application notes中找到可比较的函数来估计资源使用量 或者,使用别的设计来估计器件使用率 快速实现,然后查看MAP报告 选择“Implementation/ View Report Files/ Map report” Slices, IOBs, Block RAMs, 以及其他部件分别列出,并给出使用百分率。最后给出相当于ASIC的门数,资源估计,Design Summary - Number of errors: 0 Number of warnings: 644 Number of Slices: 1,147 out of 1,200 95% Slice Flip Flops: 735 4 input LUTs: 1,046 (1 used as a route-thru) Dual Port RAMs: 312 Number of Slices containing unrelated logic: 0 out of 1,147 0
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年数字孪生医疗产业发展政策建议
- 上海立信会计金融学院《安装工程计量》2025-2026学年第一学期期末试卷(A卷)
- 纸浆供需关系预测
- 上海立信会计金融学院《安全法规》2025-2026学年第一学期期末试卷(A卷)
- 上海立信会计金融学院《安全人机工程学》2025-2026学年第一学期期末试卷(B卷)
- 2026年海绵型建筑与小区设计施工导则
- 2026年合规尽职调查操作实务手册
- 上海科技大学《安装工程估价》2025-2026学年第一学期期末试卷(B卷)
- 大连东软信息学院《《中医外科学》诠说》2025-2026学年第一学期期末试卷(A卷)
- 2026年可吸收缝合线挤出成型与拉伸工艺
- 细粒棘球绦虫
- 2026年深圳市高三语文二模作文题目解析及范文:“不能保卫却更值得保卫”
- 中国共产主义青年团团章
- 2024年河北省中考语文试卷试题答案详解及备考指导(精校打印版)
- 小米SU7 新车上市传播分析报告-营销策划方案培训课件
- 《工程建设标准强制性条文电力工程部分2023年版》
- RS-485 原理与驱动程序
- 幼儿园游戏观察与介入
- 19.SL-T19-2023水利基本建设项目竣工财务决算编制规程
- 计算机辅助项目管理课程设计
- 年产2亿片的萘普生的车间设计
评论
0/150
提交评论