第2节优秀的HDL代码风格.DOCVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第2节 优秀的HDL代码风格 HDL 代码 3.2.1 代码风格的含义 代码风格有两层含义:其一是Verilog的代码书写习惯;另一个则是对于一特定电路,用哪一种形式的语言描述,才能将电路描述得更准确,综合以后产生的电路更为合理。前者在2.5节已有涉及,本节主要介绍后者。 代码风格有通用风格和专用风格两大类,前者指不依赖于FPGA开发的EDA软件工具和FPGA芯片类型,仅仅是从HDL语言出发的代码风格;后者指和开发软件以及硬件芯片密切相关的代码风格,不仅需要关注EDA软件在语法细节上的差异,还要紧密依赖于固有的硬件结构。显然,前者具有较好的通用性,但性能未必最优。在使用时,如果有后续的进一步开发,建议使用通用风格;否则就可采用后者,以便极大地挖掘芯片潜力。 ? 3.2.2 通用代码风格的介绍 1.逻辑复用与逻辑复制 在3.1.2节介绍过FPGA设计中面积和速度的转化关系,该理念始终贯穿HDL代码设计,二者典型的转换方式有逻辑复用和逻辑复制。前者通过速度换面积,后者通过面积换取速度,两者各有相应的应用范围。 逻辑复用 逻辑复用是通过提高工作频率来节省面积的优化方法,经常用于存在多个资源可共享单元的设计中,是大规模FPGA设计的核心思想。为了便于理解,首先给出一个例子。 例3-6 幅度到功率转化模块中的逻辑复用。假设系统输入信号为I、Q两路,每路速率为5Mbps、位宽为16比特,分别给出普通实现和使用逻辑复用的实现代码。 功能分析:计算功率需要先将I、Q输入信号经过平方计算模块,然后再将2个平方和相加输出即可。 普通实现方式: ? 图3-11 功率统计模块的一般实现方式 逻辑复用方式: ? 图3-12 采用逻辑复用方式实现功率统计模块 经过比较可以发现,第1种实现方式需要两个16比特乘法器,第2种实现方式只需要1个乘法器,基本上将资源缩减到第1种方式的一半。目前,虽然有很多综合工具可以提供逻辑复用的选项,但不能因为此而放松对代码编程的要求。主要原因有两点:首先EDA工具的能力毕竟有限,很多情况下还是不能智能发现可以复用的逻辑;其次,不同综合工具的优化参数以及能力并不相同,所以综合结果对于设计者是不确定的。所以,逻辑复用主要还是通过代码体现。 逻辑复制 逻辑复制是通过增加面积而改善设计时序的优化方法,经常用于调整信号的扇出。如果信号具有高的扇出(如:时钟和复位信号等),即要驱动很多后续电路,则要添加缓存器来增强驱动能力,但这会增大信号的时延。通过逻辑复制,使用多个相同的信号来分担驱动任务。这样,每路信号的扇出就会变低,就不需要额外的缓冲器来增强驱动,即可减少信号的路径延迟。例如用于产生控制信号的监控模块一般都有高的扇出,这时就往往需要考虑逻辑复制这一功能。图3-13(a)给出未采用逻辑复制的设计思路,其占用资源较少,但延迟大,容易出错;而采用逻辑复制的设计如图3-13(b)所示,延迟小,但占用的资源多。 ? (a) 未采用逻辑复制的设计模式 (b) 采用逻辑复制的设计模式 图3-13 逻辑复制实例示例 逻辑复用和逻辑复制是资源与速度的对立统一,目的都是为了提高设计性能、达到设计目标,但一个是为了节省面积来提高速度,另一个却是为了提高速度来占用额外的面积,两者之间存在转换和平衡的关系。在实际工程中,经常可以看到这两种方法的应用。在XST以及Synplify Pro综合工具中,用户可以设定最大扇出数,当某信号的扇出超过最大扇出值时,该信号会自动被综合工具复制,以降低扇出。 2.逻辑结构 逻辑结构主要分为链状结构(Chain Architecture)和树状结构(Tree Architecture)。一般来讲,链状结构具有较大的时延,后者具有较小的时延。所谓的链状结构主要指程序是串行执行的,树状结构是串并结合的模式,具体如例3-7所示。 例3-7 表3-3给出具有链状结构和树状结构的4输入加法器的实现实例。 ??????? 表3-3 4输入加法器的实现 ? 从上例可以明显看出树状结构的优势,它能够在同等资源的情况下,缩减运算时延,从而提高电路吞吐量以节省面积。 3.if和case语句的使用原则 if和case语句的区别 if语句指定了一个有优先级的编码逻辑,而case语句生成的逻辑是并行的,不具有优先级。if语句可以包含一系列不同的表达式,而case语句比较的是一个公共的控制表达式。通常if-else结构速度较慢,但占用的面积小,如果对速度没有特殊要求而对面积有较高要求,则可用if -else语句完成编解码。case结构速度较快,但占用面积较大,所以用case语句实现对速度要求较高的编解码电路。嵌套的if语句如果使用不当,就会导致

文档评论(0)

jinzhuang + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档