第四章 基于Xilinx芯片的Verilog进阶设计
- 格式:ppt
- 大小:979.50 KB
- 文档页数:64
verilog教程Verilog是一种硬件描述语言(HDL),用于描述数字系统的行为和结构。
它是一种流行的HDL,广泛用于硬件设计和验证领域。
本教程将介绍Verilog的基本概念和语法,以帮助初学者入门。
一、Verilog的基本概念1.1 什么是VerilogVerilog是一种描述数字系统的语言,它可以用来描述硬件电路、验证设计的正确性以及进行电路仿真。
1.2 Verilog的应用领域Verilog广泛应用于硬件设计和验证领域,包括用于开发ASIC(应用特定集成电路)、FPGA(现场可编程门阵列)以及其他数字系统的设计。
1.3 Verilog的版本Verilog有多个版本,包括Verilog-1995、Verilog-2001以及最新的Verilog-2005、这些版本之间有一些语法和功能上的差异。
二、Verilog的语法结构2.1模块和端口在Verilog中,所有的电路描述都是由模块(module)组成的。
模块是电路的基本组成单元,可以看作是一个黑盒子,它接受一些输入,产生一些输出。
2.2信号声明在Verilog中,我们需要声明所有的输入和输出信号。
可以使用`input`和`output`关键字来声明这些信号。
2.3电路实现Verilog允许使用多种语句和结构来描述电路的行为和结构。
这些语句包括顺序语句、条件语句、循环语句以及层次结构。
2.4实例化模块在一个模块中,我们可以实例化其他的模块。
这样可以将一个大的电路拆分成多个小的模块,方便编写和测试。
三、Verilog的仿真和验证3.1静态验证Verilog语言本身提供了很多语法和语义层面的验证功能,对于语法和类型错误会有相应的提示。
3.2激励设计在进行电路验证时,我们需要为输入信号提供激励。
Verilog提供了一种称为`testbench`的特殊模块,用于生成输入信号并将其应用到待验证的电路中。
3.3波形仿真在Verilog中,我们可以使用仿真器来模拟电路的行为,并生成波形图来验证电路是否按预期工作。
vivado工具与verilog语言的使用实验总结文章标题:深入探讨vivado工具与verilog语言的使用实验总结导言:在数字电路设计与实现的过程中,vivado工具与verilog语言的使用至关重要。
通过一系列的实验,我们能够全面地了解这两者在数字电路设计中的应用,并掌握它们的使用技巧。
本文将以从简到繁、由浅入深的方式,深入探讨vivado工具与verilog语言的使用实验总结,帮助读者全面理解这一主题。
一、vivado工具的基本介绍在数字电路设计中,vivado工具是一款由Xilinx公司推出的集成化开发环境。
它拥有丰富的功能和强大的性能,能够帮助设计者完成从设计到验证的全流程。
在实验中,我们首先对vivado工具的基本操作进行了学习,包括创建工程、添加设计文件、进行综合与实现等一系列步骤。
通过实践,我们能更加熟练地运用vivado工具进行数字电路设计。
二、verilog语言的基础知识verilog语言是一种硬件描述语言,广泛应用于数字电路的设计与验证。
在实验中,我们深入学习了verilog语言的基础知识,包括模块化的设计思想、信号的赋值与传输、行为级建模和结构级建模等内容。
通过对verilog语言的学习,我们能够更好地理解数字电路的工作原理,提高设计的效率和准确性。
三、vivado工具与verilog语言的综合应用在实验的进阶阶段,我们将vivado工具与verilog语言相结合,进行了一系列的综合应用实验。
通过实际的案例学习,我们掌握了如何利用vivado工具进行综合、仿真和验证,并通过verilog语言实现各种功能模块。
这些实验不仅加深了我们对vivado工具和verilog语言的理解,同时也提高了我们的综合应用能力。
总结与回顾:通过以上的实验学习,我们对vivado工具与verilog语言的使用有了更深入的了解。
vivado工具作为一款集成化开发环境,能够为数字电路设计者提供全方位的支持;而verilog语言则作为一种硬件描述语言,能够帮助设计者更加灵活地进行数字电路设计与验证。
verilog概述Verilog是一种硬件描述语言,用于描述数字电路和系统的行为和结构。
它被广泛应用于数字电路设计、集成电路验证、嵌入式系统开发等领域。
本文将从Verilog的基本语法、模块化设计、时序建模以及仿真和综合等方面进行概述。
Verilog的基本语法包括模块定义、端口声明、内部信号定义、赋值语句等。
模块是Verilog设计的基本单元,每个模块包含输入端口、输出端口和内部信号。
端口声明用于指定模块的输入输出接口,内部信号定义用于存储和传递模块内部的中间结果。
赋值语句用于对信号进行赋值,可以采用阻塞和非阻塞赋值两种方式。
Verilog的模块化设计是其重要特点之一。
通过将复杂的电路和系统划分为多个模块,可以提高设计的可读性和可维护性。
模块间的连接通过端口进行,可以通过实例化、连接和层次化等方式实现。
模块化设计可以大大提高设计的复用性和灵活性。
Verilog中的时序建模是对数字电路和系统中时序行为的描述。
通过使用时钟、时钟边沿和延迟等概念,可以准确地描述电路和系统中的时序关系。
时钟信号用于同步电路的操作,时钟边沿用于触发时序逻辑的运算,延迟用于模拟电路中的传播延迟。
仿真是Verilog设计中的重要环节,用于验证设计的正确性和功能。
通过编写测试文件和仿真脚本,可以对设计进行功能验证、时序验证和性能验证等。
仿真还可以用于验证设计的可靠性和容错性,对于复杂系统的设计尤为重要。
综合是将Verilog代码转换为可实现的硬件电路的过程。
通过综合工具,可以将Verilog代码转换为逻辑门、寄存器和连线等硬件元件的组合。
综合的结果可以用于后续的布局布线和物理设计,最终生成可用于生产的芯片。
Verilog是一种用于描述数字电路和系统的硬件描述语言。
通过Verilog的基本语法、模块化设计、时序建模、仿真和综合等技术,可以实现复杂的数字电路和系统设计。
Verilog的应用领域广泛,包括数字电路设计、集成电路验证和嵌入式系统开发等。
共62页产品名称Xilinx 篇yyyy/mm/dd日期2001/09/15日期深圳市华为技术有限公司版权所有 不得复制修订记录内部公开请输入文档编号FPGA 设计高级技巧目 录414.3 减少关键路径的逻辑级数.............................................404.2IF 语句和Case 语句揭开逻辑级数未变速度更快SRLVirtexIIXilinx篇626.3.3 专有资源的利用................................................616.3.2 Distributed RAM 代替通道计数器...................................616.3.1 Distributed RAM 代替BlockRAM ....................................616.3 如何降低芯片面积..................................................616.2.9 迂回策略为关键路径腾挪空间进行位置约束.....................................616.2.7 关键路径单独综合.......................................616.2.5 专有资源的利用................................................616.2.4 基本设计技巧..................................................616.2.3 采用BUFGS ...................................................616.2.2 对线延时比较大的netTIG 和Multi-Cycle-Path ...................606.2 如何提高芯片速度..................................................606.1 可能成为关键路径的电路.............................................606 综合运用..............................................................605.4 TimingAnalyzer 的作用...............................................595.3 FloorPlanner 的作用..................................................595.2 FPGA Editor 的作用..................................................595.1.3 正确看待map 之后的资源占用报告..................................585.1.2 布局布线策略设计方案阶段对关键电路的处理.......................585.1 布局布线..........................................................585 如何使用后端工具.......................................................574.16 LFSR 加1计数器...................................................574.15 SRL 的使用.......................................................574.14 Block SelectRAM 的使用.............................................564.13 Distributed RAM 的使用.............................................554.12 高效利用IOB ......................................................544.11 利用LUT 四输入特点减少扇出巧妙地延时................................494.7 组合逻辑和时序逻辑分离.............................................474.6流水线................................................464.5.4 综合工具与资源共享............................................464.5.3 子表达式共享..................................................454.5.2 loop 语句......................................................444.5.1 if 语句........................................................444.5 资源共享..........................................................434.4 合并if 语句赋予关键路径最高优先级............................内部公开请输入文档编号FPGA设计高级技巧627 感谢 (62)6.3.4 基本设计技巧..................................................表目录33表5 VirtexII 的DCM 分布表.................................................27表4 VirtexII乘法器速度表.......................................25表3 带奇偶校验位的Block RAM 配置表........................................24表2 VirtexII 的BlockRAM 分布表顶部上半部分58图65 15位基本型LFSR 计数器在VIRTEX 器件中的实现...........................57图64 采用Distributed RAM 实现多路加1计数器..................................55图63 输入输出寄存器移入IOB 中............................................55图62 VirtexE IOB 结构示意图...............................................54图61 采用三态电路实现电路选择............................................54图60 多路选择..........................................................53图59 扇出较小..........................................................53图58 扇出较大..........................................................52图57 组合逻辑在前..............................................52图56 组合逻辑在后..............................................49图55 Mealy 状态机的基本结构...............................................49图54 采用流水线之后的电路结构............................................48图53 采用流水线之前电路结构..............................................46图52 资源共享后一个加法器................................................45图51 资源共享前4个加法器................................................45图50 资源共享后2个加法器...............................................42图48 critical 信号只经过一级逻辑............................................42图47 critical 信号经过2级逻辑...............................................41图46 case 语句完成电路选择................................................40图45 if-else 完成多路选择..................................................39图44 并行加法电路.......................................................39图43 串行加法电路.......................................................39图42 超前进位..........................................................38图41 串行进位..........................................................37图40 No-read-on-write mode ................................................37图39 Write first mode ......................................................36图38 Read first mode ......................................................36图37 完整的单端口Block Select RAM .........................................35图36 门数增加但资源占用减少FPGA设计高级技巧关键词速度与面积压缩线延时腾挪空间摘 要以速度和面积为主题缩略语清单:ASICConfigurable Logic Block DCIDigital Clock ManagerDDRDelay-Locked Loop FPGAGeneral Routing MatrixIOBLinear Feedbak Shift RegisterLUTSum of Product SRLCustom Constraints File 参考资料清单:内部公开请输入文档编号FPGA 设计高级技巧时钟资源1 前言随着HDL 硬件描述语言综合工具及其它相关工具的推广连线等工作解脱开来极大地提高了工作效率有利就有弊现在越来越多的工程师不关心自己的电路实现形式我只要将功能描述正确工程师在用HDL 语言描述电路时或者非常模糊映射到芯片中又会是什么样子遇到问题容量更大的FPGA 器件更为要命的是更不了解与器件结构紧密相关的设计技巧工具不行导致问题迟迟不能解决导致开发成本急剧上升我们的设计规模越来越庞大几百万门的电路屡见不鲜我们所采用的器件工艺越来越先进而在对待深亚微米的器件上要更多地关注以前很少关注的线延时ASIC 设计以后也会如此此时设计技巧上有所提高而且从节约公司成本角度出发本文从澄清一些错误认识开始以速度和面积为主题本文对读者的技能基本要求是如加法器RAM 等熟悉基本的同步电路设计方法对FPGA 的结构有所了解2 综合工具与代码风格硬件描述语言和综合工具的产生然而一种不好的现象也在逐步蔓延只关注功能是否实现很少考虑电路到底是如何实现的如速度如果将设计看成是一个化学变化我们所掌握的背景知识才是参加化学反应的分子因此不能完全指望工具只有我们才是决定设计成败的关键一般包括如下两个过程前者是把行为级的描述通过一定的算法转化成门级的描述与用户约束无关通过算法映射到相应的工艺库中的器件上是映射到厂商的Gate 库中是映射到FPGA器件的单元结构中当设计代码的的风格不一样时对ASIC来说器件库一般也是GateÎÒÃDz»ÄÑÀí½âCode Style 对FPGA设计的重要性如下的16选1MUXÈçcase语句后者使用BUFT的描述图2 使用内部三态线描述的Mux2.2不同综合工具的性能不同综合工具的针对目标不一致和各综合工具的不同性能目前Design CompilerFC2Leonardo 其中DC主要是用于ASIC的综合工具其中Leonardo 是做FPGA 综合工具的先驱Synplicity公司出品但无论哪家综合工具都必须紧密结合各FPGA厂家的FPGA结构从目前来看优选Synplify 或Leonardo 综合工具到目前为止如Virtex 系列的进位链目前是这样因为综合工具一直在升级因此无法得到更好的性能则可综合出来Synplicity公司的综合工具比较优秀一点不过价格太贵导致设计性能变差若想得到更好的性能但这种基于FPGA器件的代码设计FPGA设计与ASIC设计的兼容性因此要采取恰当的风格对FPGA设计而言1. 资源共享的应用限制在同一个module里综合工具才能最大限度地发挥其资源共享综合作用这样3. Critical path所在的module与其它module分别综合对其它module采用面积优先的综合策略4. 尽可能Register所有的Output¶Ô¼ÓÔ¼Êø±È½Ï·½±ãÕâ¶Ô×ۺϷdz£ÓÐÀûËÙ¶È˫ӮµÄÄ¿µÄ¾ßÌå´óС6. 一个module尽量只有一个时钟更多的代码风格verilog代码书写规范3 FPGA器件结构许多工程师在做设计时不关心自己的电路是怎么实现的并且认为至于它是如何实现的这实际是轻实现其结果是在我们的设计中人为地制造了一大堆第一个设计有20~30µ±È»Èç¹û´ó¼ÒÔÚÒ»¸ö¸ßÊÖÈëÔÆµÄ»·¾³Ï½øÐÐѬÌÕÎÒÃÇÔÚÇ°ÃæÌáµ½¶øÇÒ¹¤¾ß±¾ÉíÒ²²»Ò»¶¨·Ç³£ÖÇÄÜÏëÒ»ÏëÄÇôËü»¹ÓÐÓÅ»¯µÄÓàµØÂðÎÊÌâ×Ü»áÔ½À´Ô½¶àÔÚÕâÖÖÇé¿öÏÂÁ˽âÎÒÃǵÄÉè¼ÆÊÇÈçºÎʵÏÖµÄÈç½øÎ»Á´IOB中的register等如果没有如修改代码或者是一个非常行之有效的手段只有工具与大脑完美结合主要目的是想让读者知道了解FPGA器件结构对做好FPGA设计有多么重要可参见一书3.1器件结构对Coding Style的影响3.1.1 FPGA结构Altera 的FPGA一般的结构都是由一些CLB 的宏单元组成LUT时序单元如Altera 的FPGA和Xilinx的FPGA都采用4输入的查找表Component的延时是固定的我们知道对FPGAÈçÀûÓÃÁ˶àÉÙ¼¶µÄ²éÕÒ±íÏßÑÓʱÔò·´Ó³ÔÚCLB与CLB的互连上就需要越长的互连线在FPGA中如进位链等目的是减少对CLB数目的使用如Virtex 系列中但不占用LUT的资源可以用来实现快速进位的加法器或宽输入的函数因此就应该考虑如何更好地利用FPGA器件中的这些特点或标准单元其线延时不象FPGA那样因此深亚微米级时但更多的是与门因此3.1.3 Coding Style的对比由于器件结构的不同针对ASIC和FPGAFPGA器件的设计性能很大程度依赖于Coding ¶ÔGate Array或shandard cellÉè¼ÆÒ²²»±ØÒªÇóºÜ¸ßµÄCoding 技术66M 就很容易实现我们很少看见几十层逻辑级的设计8 级逻辑级一般只能实现到50M左右因此要达到高速和好的性能则需要好的代码风格和好的设计策略那就是提到Code Style 时往往忽略了对器件结构的了解对FPGA而言是以减少LUT的个数为主要手段不一定能提高速度和降低面积注意门数和面积不一定成正比至于为什么自然会明白可提供如下功能提供更高密度的FPGA资源xc2v40xc2v10000最高支持420M内部时钟频率和840Mb/s 的I/O支持19 种 single-ended 标准的IO 和 9种差分IO 标准VirtexII 具有XCITE 功能IOB中集成了DDR 寄存器支持可编程的sink current在RAM上 对外RAM接口性能提高400M b/s DDR-SDRAM 接口400Mb/s FCRAM 接口333Mb/sQDR-SRAM 接口600Mb/s Sigma RAM 接口567ÔöÇ¿ÁËÒÔÍùDLL 功能16个全局时钟8.15um 技术3.3 结构概述VirtexII 器件结构示意图如下3 VirtexII 结构示意图VirtexII 器件在结构上与Virtex 和VirtexE 是相似的但增加了一个专有乘法器结构在IOB 和CLB 中也有点不同3.3.1 CLBVirtexII 的CLB 与Virtex Family 和VirtexE Family 结构有点不一样在结构的安排上如下示意图Xilinx篇图4 VirtexII 的CLB结构示意图与以往不同的是4个Slice 按照如上图的阵列排布GRM在CLB中保证4个slice 之间快速的互联每列两个slice µ«Á½Áй²ÓÃÒ»¸öÒÆÎ»Á´3.3.2 SliceSlice基本元件包括G函数FFX一般用做D触发器另外Slice中还集成了carry logicmultiplexers等元件高性能电路图5 SLICE结构示意图内部公开请输入文档编号FPGA设计高级技巧值得大家注意的是由于设计者没有注意利用Slice中的一些高速特性或者FPGA资源实际利用率不高图6 VirtexII 的Slice 结构图VirtexII 的Slice 增加了不少的结构3.3.3 LUT每个Slice 包含两个4输入的LUT4000系列的功能也就是当做组合逻辑电路这两个功能在随后的章节会详细介绍它的4个输入G1F函数F4通过对RAM中各存储单元进行配置4输入任意组合逻辑这本身就是它原来的特点也可配置成双端口RAM1与此有关详情参见本章部分要提醒大家注意的是不管你是几输入的函数还可参见本章补充说明部分SRL从而大大节省线延时和面积如下图所示CLB的4个Slice的的SRL16移位输出可串成一个大的移位链LUT的MC15就是移位的输出作为F函数移存器的shiftin图7 SRL的移位链在使用SRL时请注意一个Shift Registers LUT只能有一个数据输出和一个数据输入VirtexII 的Slice 增加了MUXF7MUXF5F的输出可在一个CLB中实现4选一的MUXMUXFX MUXF7ÊäÈëΪFXINA输出为FX F7或F8要看Slice 具体位置用于MUX相邻两个Slice 的MUXF5的输出X1Y0两个Slice 的MUXFX可例化成MUXF6两个Slice¼´¿ÉÔÚÒ»¸öCLB中实现8选1的MUXMUXF7Òò´ËÖ»ÄÜÊÇX0Y1 这个Slice 的MUXFX可例化成MUXF7ʵÏÖ´óÓÚ8选1的MUX般工具无法直接利用该功能但通过F7可在一个CLB 中的4个Slice 实现一个16选1 的MUX用于MUX 相邻两个Slice 的F7通过MUXF8实现更宽的函数MUXF5FFF F 图8 VirtexII 的MUXFX 连接图3.3.6 Carry Logic 和Arithmetic Logic GatesArithmetic Logic Gates 包括一个XOR 和一个MULTIAND VirtexII 的Slice 结构图与基本Slice 中的进位链结构一样数据流从下往上进位链结构如下图所示图9 进位链结构示意图下图是一个采用进位链实现3bit全加器示意图图10 使用进位链实现加法器采用进位链如下图所示图11 使用进位链级联实现高速宽函数运算由于乘法器可看成累加器使用专有进位链还可实现乘法器与以往的器件不同的是如下图所示图12 VirtexII 的两个独立进位链注意3.3.7 SOPVirtexII 的每个Slice 中有一个OR 用于把Slice 中的进位链在水平方向上级联起来灵活的SOP链内部公开请输入文档编号FPGA设计高级技巧图13 VirtexII 的SOP 链上图中横向的ORCY连接成4输入的或门只是提供了4个attribute SRLOW前两者用于描述SR¿ØÖƵĸ´Î»ÊôÐÔ后两者用于描述在没有外部复位信号时configuration 或通过全局的GSR网络复位为0或为1´æ´¢µ¥Ôª½á¹¹ÈçÏÂʾÒâ14 FFX/FFY结构示意图上图的DY是G函数发生器输出信号Y在Slice 外部直接反馈进来的信号VirtexII 的Slice 结构示意图当配置成单端RAM时当配置成双端RAM时且是一端口可读可写一个VirtexII的CLB含4个Slice下面两图是Distributed RAM的应用例子图15 单端口32x1 RAM图16 双端口16x1 RAM3.4.2 Block RAMVirtexII 的Block RAM资源比以往的增加很多在整个VirtexII 系列中4列或6列的规律进行分布图17 VirtexII 的Block RAM 分布规律其中的N 等于该器件CLB的列数除以4±í2 VirtexII 的BlockRAM 分布表由于块RAM有18bit ÿ¸ö¶Ë¿Ú¿ÉÅä³ÉÈçϽṹ表3 带奇偶校验位的Block RAM 配置表VirtexII 的block RAM支持三种写模式new data is written 图18 Write first 模式Read first图19 Read first 模式NO CHANGE图20 No Change 模式关于Block RAM 更多的内容sp_block_mem.pdf3.5 乘法器资源VirtexII 系列提供有专门的乘法器结构VirtexII 的乘法器资源分布图与Block RAM 的分布图一样共用4个 开关矩阵内部公开请输入文档编号FPGA 设计高级技巧图21 乘法器与Block RAM器件中乘法器位置如下图图23 乘法器块乘法器可实现高速的低工耗的乘法器速度如下表Xilinx篇表4 VirtexII 乘法器速度表3.6 IOB一般的IOB I/Obuf存储单元包括输出寄存输入三态控制线也可以不经过寄存IOB中提供5中I/O Buf IBUF输出buf OBUFT双向buf IBUFGVirtex II 的IOB 基本结构与基本的IOB一样增加了一些IO标准和DCI功能IOB的位置有较大的改变VirtexII的所有用户IO 可配成差分信号因此5个IOB共用一个开关矩阵如下示意图图24 VirtexII的IOBVirtexII的IOB与基本的IOB结构相似I/Obuf 和输入延时线DELAY构成用于实现DDRÁ½¸ö´æ´¢µ¥ÔªÍ¨¹ýDDR MUX来实现DDRÒªÇóͨ¹ýDCM来产生DDR的正反沿时钟信号图25 VirtexII 的IOB中的DDR具体的结构如下26 VirtexII 的IOB 实际结构3.6.2 Select I/OVirtexII 的Select I/O 支持的标准有所增加每个banks 提供VRN和VRP参考电压VirtexII 提供19 种signal-ended IO 标准--LVTTL, LVCMOS (3.3V, 2.5V, 1.8V, and 1.5V)--PCI-X at 133MHz, PCI (3.3V at 33MHz and 66MHz)--GTL, GTLP--HSTL (Class I, II, III, and IV)--SSTL (3.3V and 2.5V, Class I and II)--AGP-2X提供如下的差分标准VirtexII 集成了DCI功能在芯片内部提供IO管脚的特定匹配电阻简化单板设计3.7 Clock ResourceVirtexII 的时钟资源比以往增加了很多如果想要了解更多的信息Virtex³õ¸å8个分布在芯片的顶部这些时钟管脚还可以当作普通管脚使用以顶部时钟为例由开关矩阵切换出16个时钟信号线16根时钟信号线通过8个时钟MUXÓëµ×²¿µÄ8个全局时钟信号组成全芯片的16个全局时钟信号图27 VirtexII 的Clock Pads具体的结构如下图各有一个开关矩阵8个时钟信号连到顶部的开关矩阵切换出16个时钟信号连到下面的8个时钟MUX 上28 VirtexII 的时钟在VirtexII 的器件中可以保证芯片的4个区域内最多都可以获得8个全局时钟信号在安排时钟管脚时必须考虑一下图29 VirtexII 的时钟资源分布原理3.7.2 CLK MUX在VirtexII 的器件中因此全局时钟资源可由时钟管脚BUFGMUX 的结构如下顶部Xilinx篇图30 VirtexII 的BUFGMUX该BUFGMUX 可有如下几种配置即普通的全局时钟BUFͼ31 VirtexII 的BUFGBUFGCE如下结构图图32 VirtexII 的BUFGCEBUFGMUX如下结构图内部公开请输入文档编号FPGA设计高级技巧图33 VirtexII 的BUFGCE3.7.3 DCMVirtexII 器件结构对Virtex 的DLL做了增强Digital Clock Manager DCM一般分布在芯片的底部和顶部如下画出V2250芯片的8个DCM4个在底部图34 VirtexII 250 的DCM 位置VirtexII 系列器件的DCM分布表如下表5 VirtexII 的DCM分布表VirtexII 的DCM 的符号如下35 VirtexII 的DCMDCM是对DLL的增强DLL延时锁相环通过该延时锁相环可保证DCM的输入DPS数字相移器DFS数字频率合成器DSS数字扩频本节所有内容来自个人推测3.8.1 LUT 如何配置成组合逻辑电路门数增加但资源占用减少之谜前面本文提到它的4个输入其实是RAM 的地址线它是怎么实现组合电路的呢以LUT 中的F函数为例F3F= F4F2F4F2表示非运算.or时1其它的值都是F4与门F4LUTÎÒÃÇÖ»Òª½«µØÖ·Îª和的存储单元置为则该RAM 的功能实际就是F3与门在实际实现时111111101ͬʱF1固定接或我们可以得出结论在实际实现时都会变成4输入的组合电路对于在一个LUT 内可以实现的组合电路对LUT 而言3. 只要是在一个LUT 内实现的逻辑逻辑延时基本一样面积优化对Xilinx 而言根据上述结论如果想速度更快而不是逻辑级数则应当努力减少LUT 的个数这一点与ASIC 设计完全不一样内部公开请输入文档编号FPGA设计高级技巧图36 门数增加但资源占用减少我们知道一个LUT 只有一个输出后面的2个三输入或门要各占用一个LUTLUT 级数是2级虽然增加了一个2输入与门也是2级它只占用2个LUTÏÔÈ»ÃÅÊýÔö¼Óµ«×ÊÔ´Õ¼ÓüõÉÙµäÐͰ¸ÀýÎÒÃÇÖ»ÒªÕÆÎÕÁ˵¥¶Ë¿ÚRAM本节以单端口RAM 为例进行说明Xilinx篇图37 完整的单端口Block Select RAM上图是一个完整的单端口RAM结构我们这里准备讲的单端口RAM是上图中的核心部分Block MemoryËüµÄдÓÐÈýÖÖ²Ù×÷ģʽRead FirstNo Change根据其输入输出信号相位关系图38 Read first mode图39 Write first mode图40 No-read-on-write mode图中可以等价看成Distributed RAM¾-³£Óöµ½ËÙ¶È»òÃæ»ýÎÊÌâÉè¼ÆÒªÃ´ËٶȲ»Âú×ãÒªÇó»òÕßÁ½Õß¶¼²»Âú×ãÉè¼ÆÒªÇó±¾ÕÂ×ÅÖØ´ÓËٶȺÍÃæ»ý½Ç¶È³ö·¢ÒÔ»ñµÃ×î¼ÑµÄЧ¹ûÓÐЩ·½·¨ÊÇÒÔÎþÉüÃæ»ýÀ´»»È¡ËÙ¶ÈÒ²ÓÐЩ·½·¨¿Éͬʱ»ñµÃËٶȺÍÃæ»ýµÄºÃ´¦Ó¦µ±ÒÀ¾Ýʵ¼ÊÇé¿ö¶ø¶¨向关键路径要时间部分为了获得更高的速度尽量压缩线延时在非关键路径上尽量优化电路结构特别提醒本文提到的一些设计技巧可能在绝大部分情况下已经失效在一些复杂电路因此是为了让大家在遇到困难时可以尝试本文所提供的设计技巧注意本章节所举的代码都采用的是VHDL语言我们认为语言是次要的另外可参见每一个VHDL信号赋值每个信号代表一条信号线能将不同的实体连接起来下面的VHDL实例为加法器的进位链电路的两种可能的描述串行进位链-- A is the addend-- B is the augend-- C is the carry-- Cin is the carry inC0 <= (A0 and B0) or((A0 or B0) and Cin);C1 <= (A1 and B1) or((A1 or B1) and C0);图41 串行进位例并行结构c1 <= g1 or (p1 and g0) or(p1 and p0 and cin);图42 超前进位显然但面积大但面积小从其实现结构来看由于进位链是FPGA的专有资源4.1.2使用圆括号处理多个加法器控制设计结构的另一种方法是使用圆括号来定义逻辑分组例图43 串行加法电路用圆括号重新构造的加法器分组如下所示Z <= (A + B) + (C + D);图44 并行加法电路上述两种方法的在速度和面积上的区别是第一种方法但整体速度慢如果信号D 是关键路径或者BD无关第二种方法但整体速度快BD的时序要求都比较苛刻4.2IF 语句和Case 语句而Case 语句生成的逻辑是并行的IF 语句可以包含一套不同的表达式通常但占用面积较大IF-Else 结构速度较慢如果对速度没有特殊要求则可用IF-Else 语句完成编解码为了避免较大的路径延时用IF 语句实现对延时要求苛刻的路径时Critical Signal有时可以将IF 和Case 语句合用用IF-Then-Else 完成8选1多路选择器MUX6to1:process(sel,in)beginif(sel= "000") then out <= in(0); elseif(sel = "001") then out <= in(1); elseif(sel = "010") then out <= in(2); elseif(sel = "011") then out <= in(3); elseif(sel = "100") thenout <= in(4);else out <= in(5); end if;end process;内部公开请输入文档编号FPGA设计高级技巧图45 if-else 完成多路选择下面的例子是用Case 语句完成8选1多路选择器的VHDL 实例Virtex 可以在单个CLB 中完成一个8选1的多路选择器因此例process( C, D, E, F, G, H, I, J, S )begin case S iswhen 000 => Z <= C;when 001 => Z <= D;when 010 => Z <= E;when 011 => Z <= F;when 100 => Z <= G;when 101 => Z <= H;when 110 => Z <= I;when others => Z <= J; end case;end process;图46 case 语句完成电路选择4.3 减少关键路径的逻辑级数在FPGA 中critical pathΪÁ˱£Ö¤ÄÜÂú×ãʱ¼äÔ¼Êø¼õÉٹؼü·¾¶ÑÓʱµÄ³£Ó÷½·¨ÊǸø×î³Ùµ½´ïµÄÐźÅ×î¸ßµÄÓÅÏȼ¶ÏÂÃæµÄʵÀýÃèÊöÁËÈçºÎ¼õÉٹؼü·¾¶ÉϵÄÂß¼-¼¶ÊýÇ°ÃæÌáµ½µÄ´®Ðмӷ¨Æ÷Ò²ÊÇÒ»¸ö°¸Àý4.3.1 通过等效电路此例中critical 信号经过了2级逻辑if (clk'event and clk ='1') then内部公开请输入文档编号FPGA设计高级技巧if (non_critical='1' and critical='1') thenout1 <= in1;elseout1 <= in2;end if;end if;图47 critical信号经过2级逻辑为了减少critical路径的逻辑级数critical信号只经过了一级逻辑图48 critical信号只经过一级逻辑注意4输入LUT特点但对ASIC而言4.3.2调整if语句中条件的先后次序设计者习惯用if语句来描述电路功能也采用有优先级概念的if语句来描述If 条件1 thenDo action1Else if 条件2 thenDo action2Else if 条件3 thenDo action3在实际情况中条件2ÔòÉÏÊöif语句无所谓谁优先是关键路径应当改成提高设计速度前面提到即便是在没有优先级的电路中例如信号置1Else if 条件2 then信号置0Else if 条件3 then信号置1Else if 条件4 then信号置0如果上述条件没有优先级我们建议合并if语句中各条件否则下面的VHDL实例说明如何使用资源共享来减少逻辑模块的数量没有资源共享时用了4个加法器完成if (...(siz = "0001")...) thencount <= count + "0001";else if (...((siz = "0010")...) thencount <= count + "0010";else if (...(siz = "0011")...) thencount <= count + "0011";else if (...(siz == "0000")...)thencount <= count + "0100";end if;利用资源共享可以节省2个加法器if (...(siz = "0000")...) thencount <= count + "0100";else if (...) thencount <= count + siz;end if;例if (select = '1') thensum<=A +B;elsesum<=C +D;end if;图49 资源共享前利用资源共享只用2个选择器和1个加法器实现if (sel ='1') thentemp1 <=A;temp2 <=B;elsetemp1 <=C;temp2 <=D;end if;sum <= temp1 + temp2;图50 资源共享后运算符占用更多的资源综合工具必须对所有的条件求值综合工具用4个加法器和一个选择器实现req²Å½¨Òé²ÉÓÃÕâÖÖ·½·¨end if;end loop;图51 资源共享前4个加法器如果信号不是关键信号这样在执行加法运算前修改代码如下for i in 0 to 3 loopif (req(i)='1') thenoffset_1 <= offset(i);end if;end loop;sum <= vsum + offset_1;图52 资源共享后一个加法器4.5.3子表达式共享一个表达式中子表达式包含2个或更多的变量应共享这些运算通过声明一个临时变量存储子表达式下面的VHDL实例描述了用相同的子表达式完成一组简单的加法运算4.5.4 综合工具与资源共享通过设置FPGA CompilerII/FPGA Express的相应选项而不需声明一个临时变量存储子表达式如下sum1 <= A + B + C;sum2 <= D + A +B;sum3 <= E + (A +B);则sum1和sum3 可共享(A +B),但与sum2不共享3. 必须在同一block中如下但与S1不可共享最好尽量自行编写共享资源代码所采用的综合工具在FPGA 阶段和转ASIC 阶段可能不同PipeliningËüµÄ»ù±¾Ë¼ÏëÊǰÑÔ-À´±ØÐëÔÚÒ»¸öʱÖÓÖÜÆÚÄÚÍê³ÉµÄ²Ù×÷·Ö³É¶à¸öÖÜÆÚÍê³ÉÒò´ËÌá¸ßÁËÊý¾ÝÍÌÍÂÁ¿ËùÒÔ¶ÔFPGA 设计而言而又不耗费过多的器件资源采用流水线后必须特别考虑设计的其余部分在定义这些路径的延时约束时必须特别小心其延时为源触发器的clock-to-out 时间多级逻辑的走线延时和目的寄存器的建立时间之和采用流水线最终的结果是系统的工作频率提高了采用流水线前的电路内部公开请输入文档编号FPGA设计高级技巧process(clk, a, b, c) begin if(clk'event and clk = '1') thena_temp <= a;b_temp <= b;c_temp <= c;end if;end process;Process(clk, a_temp, b_temp, c_temp)beginif(clk'event and clk = '1') thenout <= (a_temp * b_temp) + c_temp;end if;end process;图53 采用流水线之前电路结构例Xilinx篇c_temp2 <= c_temp1;end if;end process;process(clk, mult_temp, c_temp2)beginif(clk'event and clk = '1') thenout <= mult_temp + c_temp2;end if;end process;图54 采用流水线之后的电路结构4.7组合逻辑和时序逻辑分离包含寄存器的同步存储电路和异步组合逻辑应分别在独立的进程中完成这样在综合后面积和速度指标较高Mealy状态机的基本结构如下图所示图55 Mealy状态机的基本结构内部公开请输入文档编号FPGA设计高级技巧由图可看出当前状态寄存器和输出逻辑三部分组成当前状态寄存器为时序逻辑Mealy 机可由三个进程实现例Xilinx篇。
中文版Verilog HDL简明教程Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。
数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,Verilog HDL语言提供了编程语言接口PLI,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
因此,用这种语言编写的模型能够使用Verilog仿真器进行验证。
语言从C编程语言中继承了多种操作符和结构。
Verilog HDL提供了扩展的建模能力,其中许多扩展最初很难理解。
但是,Verilog HDL语言的核心子集非常易于学习和使用,这对大多数建模应用来说已经足够。
当然,完整的硬件描述语言足以对从最复杂的芯片到完整的电子系统进行描述。
第1章简介Verilog HDL是一种硬件描述语言,用于从算法级、门级到开关级的多种抽象设计层次的数字系统建模。
被建模的数字系统对象的复杂性可以介于简单的门和完整的电子数字系统之间。
数字系统能够按层次描述,并可在相同描述中显式地进行时序建模。
Verilog HDL 语言具有下述描述能力:设计的行为特性、设计的数据流特性、设计的结构组成以及包含响应监控和设计验证方面的时延和波形产生机制。
所有这些都使用同一种建模语言。
此外,Verilog HDL语言提供了编程语言接口,通过该接口可以在模拟、验证期间从设计外部访问设计,包括模拟的具体控制和运行。
Verilog HDL语言不仅定义了语法,而且对每个语法结构都定义了清晰的模拟、仿真语义。
verilog数字系统设计教程Verilog数字系统设计教程作者:XXX引言:数字系统设计是现代电子工程中非常重要的一部分。
Verilog作为一种硬件描述语言,提供了一种方便且专业的方法来设计和描述数字系统。
本教程旨在为初学者提供关于Verilog数字系统设计的详细介绍和指导。
1. Verilog简介Verilog作为一种硬件描述语言,用于描述数字系统的功能、结构和时序行为。
它类似于C语言,但更专注于硬件级别。
Verilog可以用于设计各种数字系统,例如处理器、嵌入式系统、通信设备等。
2. Verilog基本语法2.1 模块定义Verilog的基本单位是模块。
模块是数字系统的基本组成部分,可以看作是一个独立的功能单元。
模块可以包含输入、输出、内部信号以及其它子模块等。
2.2 信号声明在Verilog中,可以声明各种类型的信号,包括输入信号、输出信号和内部信号等。
信号声明定义了信号的类型、宽度和方向。
3. Verilog建模3.1 组合逻辑建模组合逻辑是数字系统中最基本的部分。
Verilog提供了各种组合逻辑建模的方法,包括逻辑运算、选择结构和多路复用器等。
3.2 时序逻辑建模时序逻辑是数字系统中需要考虑时序关系的部分。
Verilog提供了时序逻辑建模的方法,包括触发器、计数器和时序控制等。
4. Verilog仿真4.1 仿真器介绍仿真器是用于验证数字系统设计的工具。
Verilog可以与各种仿真器配合使用,用于验证设计的正确性和性能。
4.2 仿真流程仿真流程包括编写测试平台和测试用例、编译和仿真等步骤。
本节将介绍基本的仿真流程和相关技巧。
5. Verilog综合5.1 综合概述综合是将Verilog代码转换为逻辑门级描述的过程。
综合器通过将Verilog代码映射到实际的硬件库中,生成能够实现指定功能的逻辑电路。
5.2 综合流程综合流程包括综合前的优化和综合本身两个阶段。
本节将介绍综合的基本流程和主要考虑因素。
verilog课程设计实验报告一、教学目标本课程旨在通过Verilog硬件描述语言的学习,让学生掌握数字电路设计的自动化工具,理解并实践硬件描述语言在数字系统设计中的应用。
通过本课程的学习,学生应达到以下目标:1.知识目标:–理解Verilog的基本语法和结构。
–掌握Verilog中的模块化设计方法。
–学习常用的Verilog描述技巧,包括逻辑门级建模、行为级建模和结构级建模。
2.技能目标:–能够运用Verilog语言进行简单的数字电路设计。
–学会使用至少一种Verilog仿真工具进行电路功能验证。
–能够阅读和理解Verilog代码,进行简单的代码优化。
3.情感态度价值观目标:–培养学生的团队合作意识,在实验报告中能够体现分工合作的精神。
–培养学生的问题解决能力,鼓励学生在遇到问题时积极寻找解决方案。
–培养学生对新技术的好奇心和学习兴趣,激发他们对电子工程领域的热爱。
二、教学内容依据教学目标,本课程的教学内容将围绕Verilog语言的基础知识、实践应用和项目设计展开。
教学大纲安排如下:1.第一部分:Verilog基础知识(2周)–介绍Verilog的背景和基本概念。
–详细讲解Verilog的数据类型、运算符和语句。
2.第二部分:模块化设计(2周)–讲解模块的定义和封装。
–实践模块的端口声明和模块实例化。
3.第三部分:数字电路的Verilog描述(2周)–通过实例教学,掌握逻辑门、触发器等基本组件的Verilog建模。
–学习组合逻辑和时序逻辑的设计方法。
4.第四部分:仿真与测试(1周)–学习使用仿真工具进行电路功能验证。
–理解并实践测试台(testbench)的编写。
5.第五部分:项目设计(3周)–小组合作完成一个较为复杂的数字系统设计项目。
–包括系统模块的划分、编码、仿真和测试。
三、教学方法为了提高学生的学习效果,将采用多种教学方法相结合的方式进行授课:1.讲授法:用于讲解Verilog的基本概念和语法。