热门标签 | 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。

推荐阅读
  • 本文详细介绍了如何在ReactJS项目中集成Onsen-UI的ActionSheetButton组件,并通过具体示例展示了其使用方法及效果。 ... [详细]
  • 转自:http:blog.sina.com.cnsblog_67419c420100vmkt.html 1.为什么要使用blocks将一个blocks作为函数或者方法的参数传递,可 ... [详细]
  • 作为一名CSS初学者,我在博客园中尝试通过CSS美化页面,特别是为超链接添加图标,以提升阅读体验。本文将分享如何使用CSS和字体图标库来实现这一功能。 ... [详细]
  • 本文探讨了HTA(HTML Application)环境中HTML5 IndexedDB的可用性问题,并提供了一种替代方案,即通过使用COM ActiveX对象来实现数据存储功能。 ... [详细]
  • 字符、字符串和文本的处理之Char类型
    .NetFramework中处理字符和字符串的主要有以下这么几个类:(1)、System.Char类一基础字符串处理类(2)、System.String类一处理不可变的字符串(一经 ... [详细]
  • 本文探讨了Web API 2中特性的路由机制,特别是如何利用它来构建RESTful风格的URI。文章不仅介绍了基本的特性路由使用方法,还详细说明了如何通过特性路由进行API版本控制、HTTP方法的指定、路由前缀的应用以及路由约束的设置。 ... [详细]
  • Python:新浪微博API初试
    {想在微博上抓点数据进行分析,费了一天多的时间,才终于找到点头绪,整理一下。}目录:一注册创建应用获取认证和授权二新浪微博pythonsdk下载和安装三简 ... [详细]
  • 尽管已经查阅了相关说明,但关于Html.Partial和Html.RenderPartial在ASP.NET MVC3中的使用,我仍然感到困惑。 ... [详细]
  • 本文介绍了多种Eclipse插件,包括XML Schema Infoset Model (XSD)、Graphical Editing Framework (GEF)、Eclipse Modeling Framework (EMF)等,涵盖了从Web开发到图形界面编辑的多个方面。 ... [详细]
  • 深入理解Java反射机制
    本文将详细介绍Java反射的基础知识,包括如何获取Class对象、反射的基本过程、构造器、字段和方法的反射操作,以及内省机制的应用。同时,通过实例代码加深对反射的理解,并探讨其在实际开发中的应用。 ... [详细]
  • 为何第三个div会影响其他两个div?
    探讨了在使用内联块(inline-block)元素布局时,第三个div如何影响前两个div的位置,并提供了具体的解决方案。 ... [详细]
  • 多用户密码验证与加密登录系统
    本文介绍了一种基于多用户密码文件的加密登录方法,通过读取用户密码文件并使用简单的加密算法实现安全登录。文中详细描述了程序的设计思路及其实现过程。 ... [详细]
  • 时序数据是指按时间顺序排列的数据集。通过时间轴上的数据点连接,可以构建多维度报表,揭示数据的趋势、规律及异常情况。 ... [详细]
  • 配置PicGo与Gitee结合Typora打造高效写作环境
    本文详细介绍了如何通过PicGo和Gitee搭建个人图床,并结合Typora实现高效的文章撰写。包括创建图床项目、生成访问令牌、安装配置PicGo和Typora等步骤。 ... [详细]
  • 转载自:https:blog.csdn.netu013948858articledetails77800663【python】pip安装报错UnicodeDecode ... [详细]
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社区 版权所有