热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

转载:VerilogHDL可综合设计+Comments

可综合的语法已经记录得差不多了,剩下一些遗留的问题,在这里记录一下吧。一、逻辑设计(1)组合逻辑设计下面是一些用Verilo

  可综合的语法已经记录得差不多了,剩下一些遗留的问题,在这里记录一下吧。

一、逻辑设计

(1)组合逻辑设计

下面是一些用Verilog进行组合逻辑设计时的一些注意事项:

  ①组合逻辑可以得到两种常用的RTL 级描述方式。第一种是always 模块的触发事件为电平敏感信号列表;第二种就是用assign 关键字描述的数据流赋值语句。

  ②always 模块的敏感表为电平敏感信号的电路可几乎可以完成对所有组合逻辑电路的建模。always模块的敏感列表为所有判断条件信号和输入信号,但一定要注意敏感列表的完整性(注意通配符*的使用)。

  由于赋值语句有阻塞赋值和非阻塞赋值两类,建议读者使用阻塞赋值语句“=”,原因将在“阻塞赋值和非阻塞赋值”中(现在还没有写)进行说明。

  always 模块中的信号必须定义为reg 型,不过最终的实现结果中并没有寄存器。这是由于在组合逻辑电路描述中,将信号定义为reg 型,只是为了满足语法要求。

  ③assign 语句的描述,利用条件符“?”可以描述一些相对简单的组合逻辑电路,左边的赋值信号只能被定义为wire 型。当组合逻辑比较复杂时,需要很多条语句assign 语句或者多重嵌套“?”,使得代码可读性极差,因此此时推荐always组合逻辑建模方式。

  ④设计时要注意不要出现组合逻辑环路:

                 

  不要在组合逻辑中引入环路,在组合逻辑中引入环路会导致电路产生振荡、毛刺以及冲突等问题,从而降低设计的稳定性和可靠性,此外,环回逻辑的延时完全依靠组合逻辑门延迟和布线延迟。一旦这些传播时延有所变化,则环路的整体逻辑将彻底失效。其次,环路的时序分析是个死循环过程。目前的EDA 开发工具为了计算环路的时序逻辑都会主动割断时序路径,引入许多不确定的因素。因此要彻底避免环路。


 

(2)时序逻辑设计

  ①时序电路的行为决定了其只能通过always 块语句实现,通过关键词“posedge”和“negedge”来捕获时钟信号的上升沿和下降沿。在always 语句块中可以使用任何可综合的标志符。

  ②在描述时序电路的always 块中的reg 型信号都会被综合成寄存器,这是和组合逻辑电路所不同的。

  ③时序逻辑中推荐使用非阻塞赋值“<&#61;”&#xff0c;原因将后面详细说明。

  ④时序逻辑的敏感信号列表只需要加入所用的时钟触发沿即可&#xff0c;其余所有的输入和条件判断信号都不用加入&#xff0c;这是因为时序逻辑是通过时钟信号的跳变沿来控制的。

 

 

二、锁存器

  锁存器是个“奇葩”的器件&#xff0c;在FPGA逻辑设计中很避讳&#xff1b;在ASIC设计中&#xff0c;以前很喜欢&#xff08;因为面积小&#xff09;&#xff0c;现在不是很喜欢了。在这里就记录一下关于锁存器的一些事项吧。

&#xff08;1&#xff09;锁存器的概述

  ①锁存器的详细CMOS电路结果在前面电路基础章节中已经有描述&#xff0c;这里不详细描述它的结构&#xff0c;详情请挫这个链接&#xff1a;

http://www.cnblogs.com/IClearner/p/6443539.html。

  ②锁存器是一种对脉冲电平敏感的存储单元电路&#xff0c;可以在特定输入脉冲电平作用下改变状态&#xff0c;其本身也是一类常用的逻辑单元&#xff0c;有着特定的需求。

  ③锁存器在数据未锁存时&#xff0c;输出端的信号随输入信号变化&#xff0c;就像信号通过一个缓冲器一样&#xff0c;一旦锁存信号有效&#xff0c;则数据被锁住&#xff0c;输入信号不起作用。因此&#xff0c;锁存器也被称为透明锁存器&#xff0c;指的是不锁存时输出对于输入是透明的。

  ④锁存器和寄存器都是数字电路的基本存储单元&#xff0c;但锁存器是电平触发的存储器&#xff0c;触发器是边沿触发的存储器。

本质上&#xff0c;锁存器和D 触发器的逻辑功能是基本相同的&#xff0c;都可存储数据&#xff0c;且锁存器所需的门逻辑更少&#xff0c;具备更高的集成度。

  ⑤锁存器具备下列三个缺点&#xff1a;

      ·对毛刺敏感&#xff0c;不能异步复位&#xff0c;因此在上电后处于不确定的状态。

      ·锁存器会使静态时序分析变得非常复杂&#xff0c;不具备可重用性。

      ·在FPGA/CPLD芯片中&#xff0c;基本的单元是由查找表和触发器组成的&#xff0c;若生成锁存器反而需要更多的资源。

 

&#xff08;2&#xff09;锁存器的产生

  ①锁存器产生于组合逻辑的设计中&#xff0c;在基于always的组合逻辑描述语句中&#xff0c;可能产生锁存器的情况具体可分为两种&#xff1a;其一是在if 语句中&#xff0c;另一种是在case 语句中。

  ②在always 块中使用if 语句&#xff0c;但缺乏else 分支而造成锁存器。

  ③在always 块中使用case 语句&#xff0c;由于缺乏default 分支而造成锁存器。

  ④如果用到if 语句&#xff0c;最好有else 分支&#xff1b;如果用到case 语句&#xff0c;最好有default 语句。即使需要锁存器&#xff0c;也通过else 分支或default 分支来显式说明。

 

&#xff08;3&#xff09;锁存器的应用

  ①在总线应用上&#xff0c;锁存器能提高驱动能力、隔离前后级。

  ②地址锁存器、数据锁存器、复位信号锁存器&#xff1b;门控时钟钟的应用等等。

 

 

三、设计思维

  这个设计思维本来属于设计技巧里面的&#xff0c;放在这里说明&#xff0c;是为了告诉自己&#xff0c;在进行电路描述的时候&#xff0c; 是基于这些准则的&#xff0c;在设计时能够根据这些基本准则进行优化电路。下面是常见的设计思维&#xff0c;主要是基于FPGA的&#xff0c;关于ASIC其他设计技巧或者设计思维&#xff0c;我记录在了“技巧”篇。

&#xff08;1&#xff09;速度面积互换准则

  ①速度与面积是设计时常考虑的的一个问题&#xff0c;因此在设计的时候要考虑怎么在这二者之间的权衡。当然&#xff0c;现在功耗也与速度、面积成为需要考虑的重大因素之一。

  ②面积和速度互换的具体操作很多&#xff0c;比如模块复用、乒乓操作、串并转换以及流水线操作等。在设计技巧策略和技巧那一章节中将会进行叙述。

  ③串并转换乘法器:假设数据速率是乘法器模块处理速度的3 倍&#xff0c;那么由于乘法器模块的数据吞吐量满足不了要求&#xff0c;在这种情况下&#xff0c;就利用面积换速度的思想&#xff0c;复制3 个乘法器模块。首先将输入数据进行串并转换&#xff0c;然后利用这3 个模块并行处理所分配到的数据&#xff0c;最后将处理结果并串转换&#xff0c;达到数据速率的要求。

如下图所示&#xff1a;

     

 

      

&#xff08;2&#xff09;FPGA中的设计思维

  ①信号反相的处理策略

  在处理反相信号时&#xff0c;设计时应尽可能地遵从分散反相原则。即应使用多个反相器分别反相&#xff0c;每个反相器驱动一个负载&#xff0c;这个原则无论对时钟信号还是对其它信号都是适用的。

  因为在FPGA设计中&#xff0c;反相是被吸收到CLB或IOB中的&#xff0c;使用多个反相器并不占用更多的资源&#xff0c;而使用一个反相器将信号反相后驱动多个负载却往往会多占资源&#xff0c;而且延迟也增加了。

  ②首先&#xff0c;如果输入信号需要反相&#xff0c;则应尽可能地调用输入带反相功能的符号&#xff0c;而不是用分离的反相器对输入信号进行反相

  因为在使用自带反相功能的器件中&#xff0c;由于函数发生器用查表方式实现逻辑&#xff0c;反相操作是不占资源的&#xff0c;也没有额外延迟&#xff1b;而分开使用不同逻辑使用反相操作实现&#xff0c;从而消耗额外的资源&#xff0c;增加额外的延迟。

  ③其次&#xff0c;如果一个信号反相后驱动了多个负载&#xff0c;则应将反相功能分散到各个负载中实现&#xff0c;而不能采用传统TTL电路设计&#xff0c;采用集中反相驱动多个负载来减少所用的器件的数量。

  因为在FPGA设计中&#xff0c;集中反相驱动多个负载往往会多占一个逻辑块或半个逻辑块&#xff0c;而且延迟也增加了。分散信号的反相往往可以与其它逻辑在同一单元内完成而不消耗额外的逻辑资源。

转载from:https://www.cnblogs.com/IClearner/p/7267965.html 感谢&#xff5e;

**C.A:**
1. 目前的EDA 开发工具为了计算环路的时序逻辑都会主动割断时序路径&#xff0c;引入许多不确定的因素。因此要彻底避免环路。
2. 锁存器&#61;透明锁存器&#xff0c;指的是不锁存时输出对于输入是透明的。·对**毛刺敏感**&#xff0c;不能**异步复位**&#xff0c;因此在**上电后处于不确定的状态**。·锁存器会使**静态时序分析变得非常复杂**&#xff0c;不具备可重用性。
3. 目前遇到的最多是在jtag接口的出片的输出上&#xff0c;提供均衡的setuphold。

推荐阅读
  • 本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • EPICS Archiver Appliance存储waveform记录的尝试及资源需求分析
    本文介绍了EPICS Archiver Appliance存储waveform记录的尝试过程,并分析了其所需的资源容量。通过解决错误提示和调整内存大小,成功存储了波形数据。然后,讨论了储存环逐束团信号的意义,以及通过记录多圈的束团信号进行参数分析的可能性。波形数据的存储需求巨大,每天需要近250G,一年需要90T。然而,储存环逐束团信号具有重要意义,可以揭示出每个束团的纵向振荡频率和模式。 ... [详细]
  • 本文介绍了在开发Android新闻App时,搭建本地服务器的步骤。通过使用XAMPP软件,可以一键式搭建起开发环境,包括Apache、MySQL、PHP、PERL。在本地服务器上新建数据库和表,并设置相应的属性。最后,给出了创建new表的SQL语句。这个教程适合初学者参考。 ... [详细]
  • 这是原文链接:sendingformdata许多情况下,我们使用表单发送数据到服务器。服务器处理数据并返回响应给用户。这看起来很简单,但是 ... [详细]
  • 本文介绍了九度OnlineJudge中的1002题目“Grading”的解决方法。该题目要求设计一个公平的评分过程,将每个考题分配给3个独立的专家,如果他们的评分不一致,则需要请一位裁判做出最终决定。文章详细描述了评分规则,并给出了解决该问题的程序。 ... [详细]
  • Windows下配置PHP5.6的方法及注意事项
    本文介绍了在Windows系统下配置PHP5.6的步骤及注意事项,包括下载PHP5.6、解压并配置IIS、添加模块映射、测试等。同时提供了一些常见问题的解决方法,如下载缺失的msvcr110.dll文件等。通过本文的指导,读者可以轻松地在Windows系统下配置PHP5.6,并解决一些常见的配置问题。 ... [详细]
  • 本文主要解析了Open judge C16H问题中涉及到的Magical Balls的快速幂和逆元算法,并给出了问题的解析和解决方法。详细介绍了问题的背景和规则,并给出了相应的算法解析和实现步骤。通过本文的解析,读者可以更好地理解和解决Open judge C16H问题中的Magical Balls部分。 ... [详细]
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • VScode格式化文档换行或不换行的设置方法
    本文介绍了在VScode中设置格式化文档换行或不换行的方法,包括使用插件和修改settings.json文件的内容。详细步骤为:找到settings.json文件,将其中的代码替换为指定的代码。 ... [详细]
  • 本文介绍了一个Java猜拳小游戏的代码,通过使用Scanner类获取用户输入的拳的数字,并随机生成计算机的拳,然后判断胜负。该游戏可以选择剪刀、石头、布三种拳,通过比较两者的拳来决定胜负。 ... [详细]
  • 目录实现效果:实现环境实现方法一:基本思路主要代码JavaScript代码总结方法二主要代码总结方法三基本思路主要代码JavaScriptHTML总结实 ... [详细]
  • C语言注释工具及快捷键,删除C语言注释工具的实现思路
    本文介绍了C语言中注释的两种方式以及注释的作用,提供了删除C语言注释的工具实现思路,并分享了C语言中注释的快捷键操作方法。 ... [详细]
  • 使用Ubuntu中的Python获取浏览器历史记录原文: ... [详细]
  • ZSI.generate.Wsdl2PythonError: unsupported local simpleType restriction ... [详细]
author-avatar
手机用户2602931923_450
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有