




已阅读5页,还剩46页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VHDL设计风格和实现 内容概述 一 同步设计二 速度三 资源四 其他 一 同步设计 什么是同步设计 同步设计 上游数据到下游逻辑单元的传递是通过时钟来同步的 只要能满足时延要求 就可以确保下游逻辑单元能正确采样到上游数据 异步设计 上游数据发生变化的时机是不确定的 甚至会出现中间态 下游逻辑对上游数据的采样是不确定的 会发生数据传递的错误 为什么要做同步设计 两年前我做的FPGA设计 现在却不能工作 FPGA本身有什么变化吗 如果采用的是异步设计 能否工作有很多无法控制的随机因素 我的设计原来可以工作 但将FPGA重新布线后 就不行了 怎么回事 异步设计也许在特定布线下能工作 但布线改变后就不行了 很危险吧 我的设计通过了时间仿真 但上板调试时不干活 时间仿真对不对 对于异步设计 通过了时间仿真也不一定能正常工作 要小心 时钟信号可别产生毛刺啊 要小心 异步复位可别有毛刺啊 快速FPGA中的触发器会对非常窄的毛刺信号作出反应 异步设计中 设计者老要想着去消除时钟 异步复位信号以及锁存器使能端的毛刺 但这一点在异步设计中很困难 甚至不可能 异步设计可能会产生以下问题 同步设计的一个简单原则 永远不要将组合逻辑产生的信号用作时钟 异步复位 置位 门产生的时钟有问题 此例中 计数终点信号会产生毛刺 使用该信号作时钟会引起问题 MSB布线更短 信号变化先到达与门 与门会 感知 到1111的中间态 由于与门为电平敏感 会输出高电平的毛刺 从而引起寄存器的误动作 布线更短 此处会产生毛刺 并且与计数器的时钟无关 MSB 01111000计数器的操作为 011111111000因为MSB更快 计数器 flop MSB 此处的与门为电平敏感 相应的VHDL代码 signalCounter std logic vector 3downto0 signalTC std logic signalflop std logic process Clk beginifrising edge Clk thenCounter Counter 1 endif endprocess TC 1 whenCounter 1111 else 0 TC为组合逻辑输出process TC beginifrising edge TC then 使用组合逻辑输出作时钟 是异步设计 禁止 flop endif endprocess 毛刺和同步设计 组合逻辑的毛刺通常总是存在 难于甚至无法消除毛刺只有在异步设计中 连接到时钟 异步复位 锁存器的使能端 才存在问题在同步设计中 由于寄存器在时钟沿才会动作 只要能满足时延要求 就能确保采样到稳定正确的结果毛刺无法消除 但其造成的问题却可以消除采用同步设计并达到时延要求 安全同步化异步输入一例 去抖动逻辑 异步输入 系统时钟 同步输入 设备外围 D Q 延迟一个周期后才复位 确保D端输入脉冲至少有一个周期的宽度 没有中间态 异步输入的信号变化时机和宽度不确定 有抖动 毛刺 不能直接被同步系统正确采样 该逻辑确保能正确得到异步输入的上升沿 一个时钟周期内的多次电平变化被认为是抖动 毛刺 最后只得到一个上升沿 相应的VHDL代码 signalAsynInput std logic signalInputReg std logic signalDelay std logic signalSynInput std logic process SynInput AsynInput beginifSynInput 1 then 此置位为寄存器信号 为同步设计 可行InputReg 0 ifrising edge AsynInput thenInputReg 1 endif endprocess process Clk beginifrising edge Clk thenDelay InputReg SynInput Delay endif D Q3 AsyncR INPUT CLOCK Counter Q2 Q1 Q0 D Q 同步设计方法中TC的生成和使用 对照前面异步设计中TC生成和使用的例子 TC 相应的VHDL代码 signalCounter std logic vector 3downto0 signalTC std logic signalflop std logic process TC Clk beginifTC 1 then 此复位为寄存器信号 为同步设计 可行Counter 0000 TC elsifrising edge Clk thenCounter Counter 1 ifCounter 1110 then 注意和异步设计中TC信号的比较 此处TC为寄存器输出TC 1 elseTC 0 endif endif endprocess 同步设计的更多例子 可行 D Q1 INPUT CLOCK Counter Q0 INPUT CLOCK DATA 相应的VHDL代码 例2signalCounter std logic vector 3downto0 signalTC std logic signals std logic process Clk beginifrising edge Clk thenifINPUT 1 thenCounter Counter 1 endif ifTC 1 then TC用在寄存器的CE端 为同步设计 可行s DATA endif endif endprocess TC 1 whenCounter 1111 else 0 TC为组合逻辑输出 例1signalCounter std logic vector 1downto0 process Clk beginifrising edge Clk thenifINPUT 1 andCounter 11 thenCounter Counter 1 endif 组合逻辑用在寄存器的D端 为同步设计 可行endif endprocess 异步设计的更多例子 禁止 D Q1 AsyncR 这些例子有什么问题 INPUT CLOCK Counter Q0 INPUT CLOCK DATA 相应的VHDL代码 例2signalCounter std logic vector 3downto0 signalTC std logic signals std logic process Clk beginifrising edge Clk thenifINPUT 1 thenCounter Counter 1 endif endif endprocess TC 1 whenCounter 1111 else 0 TC为组合逻辑输出process TC beginifrising edge TC 1 then TC用作寄存器的时钟 为异步设计 禁止 s DATA endif endprocess 例1signalCounter std logic vector 1downto0 process Counter Clk beginifCounter 11 then 组合逻辑用作寄存器的异步复位 为异步设计 禁止 Counter 00 elsifrising edge Clk thenifINPUT 1 thenCounter Counter 1 endif endif endprocess 二 速度 中间态 时延和速度 当寄存器间数据传递的时延超过一个时钟周期 下游寄存器不能在下一个时钟周期采样到本时钟周期给出的上游数据 出现错误 当时钟来临时 寄存器输入发生变化 会采样到中间态 建立时间不能被满足 就会采样到中间态 最后的采样结果不确定 避免采样不到和采样到中间态的方法是满足时延要求系统中的最大时延决定了系统的速度 也决定了系统能正常工作的最大时钟频率 D CLK Q CLK D Q 当建立时间不够时 会采样到中间态 最后的采样结果不确定 建立时间 D CLK Q D CLK Q 时延中包括时钟歪斜 Skew 下面逻辑中 数据时延很小 最大3 6ns 如果时钟歪斜较小 该逻辑可以跑200MHz以上 由于存在时钟歪斜 FlopB到FlopC的实际时延为3 3 12 1 3 6 11 8ns 在100MHz下就不能工作 计算速度时要考虑时钟歪斜的影响 使用全局驱动 可以减少时钟歪斜 INPUT CLOCK D Q FlopC FlopB FlopA 时延级数怎么算 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 8 927ns或者110MHz 速度估计 用逻辑时延作为网络时延的估计已知系统的时钟频率 可以估计允许的逻辑深度和功能需求相对照 修改设计以满足性能需要 在50MHz下使用XCV100 4的例子 时钟周期20ns一级布线时延 5ns Tcko Tnet Tick Tcko Tick 2 871ns允许增加时延 15ns每增加一级的时延 1 5 2ns Tilo Tnet Tilo 0 738ns允许增加的级数 7 10Slices 注意此Slice中使用了LUT 所以建立时间是Tick而不是Tdick 这种映射结果减少了一级布线时延 对高扇出的网络使用全局驱动 设计中 有高扇出的时钟使能 IOB三态以及其他信号吗 使用剩余的BUFG来驱动它们 以达到更小的歪斜和更高的性能使用BUFG 时钟和CE输入的歪斜可以小于1ns使用BUFG的方法 实例化BUFG 将相应信号连接上去 D CE Q R P CEorOEorRST INPUT CLOCK BUFG 使用全局复位有助于提高速度 所有的触发器在上电时通过全局置位 复位 GSR 网络进行初始化你可以通过实例化 instantiating STARTUP元件 primitive 访问GSR网络 断言 assert GSR进行全局置位 复位GSR自动连接到所有CLB的触发器 使用专用的布线资源 使用GSR 可以节约通用布线资源 减小布线时延 提高系统速度不要连接GSR到触发器的复位 置位输入端任何信号 如内部信号 外部输入等 都可以连接到GSR 但该信号必须在设计中定义 尽可能使用全局复位限制使用非全局复位的异步复位的触发器数量非全局复位会使用额外的布线资源 VHDL代码中的复位 在下面的VHDL中 应该在Rst中对寄存器赋值 否则Rst信号会被综合成寄存器的CE端的一个输入 浪费布线资源 增加逻辑级数 降低系统速度即使不关心寄存器的复位状态 也应该对其赋初值 可以赋初值为 即 Donn tcare 这样 寄存器的复位端不会被使用 节约布线资源Process Rst Clk beginifRst 1 thenDataValid 这个语句一定要写 否则Rst信号会被综合成寄存器 Data到DataCE端的一个输入elsifrising edge Clk thenDataValid 0 ptr 12downto7 ptr others 0 采用流水线逻辑来提高速度 FPGA触发器资源丰富增加流水线逻辑级数 可提高系统速度 25MHz 50MHz 4 5输入的逻辑函数对速度和密度最有利 XilinxFPGA由四输入查找表 LUT 组成 一个查找表能实现其输入形成的任何逻辑函数相当于编址ROM 将输入作为地址 查找出函数结果 LUT能实现的函数只受输入数目限制 不受函数复杂度限制一个Slice中可用两个LUT和选择器实现5输入的任何逻辑 减少函数输入 扇入 来适合Slice 可以提高逻辑密度和速度 取反不耗费资源 free CLBLookupTable 状态机的三种类型编码与速度 二进制 状态序列如同计数器序列 S1 001 S2 010 S3 011 S4 100 etc 枚举 状态有指定的值 S1 100 S2 110 S3 101 S4 111 etc OneHot 单热 每个状态只有一个寄存器有效 S1 00000001 S2 00000010 S3 00000100 etc 在状态机从当前状态跳到下一状态时 二进制和枚举类型有大量的反馈输入 这对CPLD 如XC9500 来说是比较合适的 在FPGA中 使用二进制和枚举类型可能会占用较少资源 但肯定比one hot编码慢 OneHot每个状态只需提供一位反馈输入 状态机的速度 对于较大的状态机 使用OneHot编码二进制或者枚举编码 对于较小的状态机合适 记住四输入查找表 状态机可能会有很多的扇入 和大量的反馈 对速度不利使用OneHot 并限制输入状态数 使输入限制到4 5 可以达到最高的速度 Input1 Input3 State4 State6 State19 1LUT D Q fn1 D Q fn1 D Q fn1 对高扇出网络 通过复制寄存器来提高速度 高扇出网络 16个负载 难于布线 而且较慢考虑在示意图或VHDL中复制资源来改进布线和速度Foundation工具不会自动完成这种功能将复制寄存器命名为 a b c 不要用1 2 3 这样 Foundation映射 map 时会更有效 计数终点信号提前译码以提高速度 对大的计数器而言 译码产生计数终点信号需要逻辑级数较多 提前一个时钟周期译码计数终点信号 寄存后使用 可以提高速度 并保持时序关系不变 LD Q0Q1Q2Q3CO D0D1D2D3CEC D QCEC DATA0DATA1DATA2DATA3ENABLECLOCK 复制组合逻辑以提高速度 如果LogicReplication选项被选中 Foundation会自动复制组合逻辑 速度 面积的交易通过复制组合逻辑 将逻辑合并入一个Slice中 减少了逻辑级数你的逻辑表达会影响映射结果 扇出大于1的网络可能在Slice之外 留意速度关键路径的映射结果 O1 I1 O1 I1 N1 N1必须输出到两个地方 所以O1需要两级逻辑 复制第一个门 使得逻辑可以合并入一级逻辑中 N1A N1B 速度关键输入应在逻辑最后一级提供 关键输入应该在逻辑最后一级提供关键输入为芯片 Slice 或者LUT提供的时延最大的输入在示意图中 将关键输入连接在逻辑最后一级在VHDL中 将关键输入放在if elsif 链的第一级 CLB CLB IN Critical OUT 使用进位逻辑提高速度和密度 使用Slice中的进位逻辑可提高算术运算速度XCV100 4的例子 具体数据有待验证 16 bit加法器 不使用进位 10Slices例如 XCV100有30 x20CLB 一条进位链最多可以实现40位的加法器 一个48位加法器需要两条链使用库中基于进位的宏 RPM 或者LogiBLOX许多库中的算术函数是RPMADDx加法器 ADSUx加法 减法器 CCx计数器COMPMCxmagnitude比较器RPM指相对定位宏通过RLOC属性指定布局相对位置 进位逻辑的相对布局需要使用垂直进位逻辑连接 了解进位链流向 XC4000E L和Spartan XL进位链流向为上下两个方向XC4000EX XL XV和Virtex器件的进位链流向只能向上 XC4000ESpartan XL XC4000EX XL XVVirtex LSB MSB 编码 只有在必要时才使用二进制序列 可以生成各种需要的序列 而不仅限于二进制使用预缩放 prescale 技术来提高速度低位 LSBs 翻转很快参见ApplicationNotesXAPP001andXAPP014如果要译码输出 使用格林 Gray 码计数器每次只翻转一位 可以避免译码产生毛刺如果只需要计数终点 考虑使用线性反馈移位寄存器 LFSR 提高速度 生成序列可以覆盖的地址空间为2n 1 全0不包含在序列中 n取不同值时 用来生成反馈位的两位不同 参见相关资料在可以采用任意规则序列的情况下 也可以使用LFSR 比如 FIFO 使用预缩放 Pre scale 提高计数器速度 计数器的速度由从LSB到MSB的进位延迟决定预缩放技术对较大的计数器特别有益 低位翻转很快 用低位的TC作为高位的CE 可以降低高位的时钟频率 使用TimeSpecs进行约束预缩放技术限制了载入时间 故计数器不可加载参考XAPP014 I O速度 FPGA的建立时间Tsu FPGA的输入输出也有时延要求 满足时延要求的FPGA建立时间由 全局时钟时延Tbufg 板上时延Tbrd和上游器件的输出时间Tco up 决定 FPGA建立时间 Tsu 的计算公式 Tsu fpga Tcyc Tco up Tbrd Tbufg可以使用 OFFSETIN 对Tsu进行约束 D CE Q 上游器件 D CE Q XCV400FPGA Clock Tcyc Tco up Tbrd Tbufg Tsu I O速度 FPGA的输出时间Tco FPGA输出时间的计算公式 Tco Tcyc Tsu down Tbrd Tbufg使用 OFFSETOUT 对Tco进行约束 D CE Q XCV400FPGA D CE Q 下游器件 Clock Tcyc Tco Tbrd Tbufg Tsu down 使用快歪斜率提高输出速度 歪斜率控制输出速度缺省使用 slow 歪斜率 以降低噪音当速度重要时 使用 fast 歪斜率FAST是输出逻辑元件 primitive 的一个参数可以通过加入FAST约束实现 使用I O寄存器提高输入和输出速度 使用IOB中的I O寄存器 可以提高输入和输出速度 输入或输出可以去除从内部布线的时延 IOB中的时延也更小 还可以节约寄存器资源实现选项中 选择 PackI ORegisters LatchesintoIOBsforInputsandOutputs 输入若未寄存 直接扇入到组合逻辑 则不能map到IO寄存器中 输出若为组合逻辑输出 或者需要反馈为输入 则不能map到IO寄存器中 D CE Q D CE Q I Opad From FPGA Into FPGA OFF IFF OutputClock InputClock 使用I O寄存器的例子 FPGA FPGA 发送器 XCV100 4FPGA 接收器 XCV100 4FPGA 使用IOB中寄存器的时延Tiockp PCB网络时延 Tiopick5 6491 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的输入通道上有一个可编程的时延可以用来在建立时间和保持时间之间达到妥协 可选择全部 部分或无时延缺省为全时延 以使保持时间的需求为0可在UCF中进行控制 D CE Q XC4000FPGA 输入时延 BUFG XC4036XL 1的例子 时延情况建立时间保持时间全时延 Tsu 5 8nsTh 0ns部分时延 Tsu 4 8nsTh 1ns无时延 Tsu 0 9nsTh 4 1ns I O速度的其他提示 XC4000 13 36 62XL是turboboosted 使用BUFG 可提高pintopin时延 三 资源 资源使用量是指FPGA使用了的百分率在宏 库 以及XAPPapplicationnotes中找到可比较的函数来估计资源使用量或者 使用别的设计来估计器件使用率快速实现 然后查看MAP报告选择 Implementation ViewReportFiles Mapreport Slices IOBs BlockRAMs 以及其他部件分别列出 并给出使用百分率 最后给出相当于ASIC的门数 资源估计 DesignSummary Numberoferrors 0Numberofwarnings 644NumberofSlices 1 147outof1 20095 SliceFlipFlops 7354inputLUTs 1 046 1usedasaroute thru DualPortRAMs 312NumberofSlicescontain
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 刺灸学课件教学课件
- 农业安全培训心得课件
- 初次安全培训
- 兴化市华阳安全生产培训课件
- 华为网络营销方案(3篇)
- 内部三级安全培训课件
- 内训课件教学课件
- 化学安全生产培训课件
- 化学品安全生产培训内容课件
- 创伤重症识别课件
- GB/T 38931-2020民用轻小型无人机系统安全性通用要求
- GB/T 31288-2014铁尾矿砂
- GB/T 20028-2005硫化橡胶或热塑性橡胶应用阿累尼乌斯图推算寿命和最高使用温度
- 规范书写汉字(实用硬笔)课件
- 马克思主义政治经济学第2章-货币课件
- 管理核心五任务版权课程课件
- 学术规范与论文写作讲述课件
- 七年级数学学习·探究·诊断上册
- 实验室内质控记录表格完整
- 基层医疗机构抗菌药物合理使用
- 肾动脉狭窄介入治疗PPT课件(PPT 30页)
评论
0/150
提交评论