VLSI基础-- 第六章 时序逻辑电路

目录

  • 第六章 时序逻辑电路

    • 1. 组合电路和时序电路的区别
    • 2. 状态机
    • 3. 双稳态结构
    • 4. 静态存储电路
    • 动态Latch和Register

第六章 时序逻辑电路

1. 组合电路和时序电路的区别

  • 组合电路:输出是当前输入的函数
  • 时序电路: 输出是当前输入和之前输入(状态)的函数

2. 状态机

Moore状态机:输出仅仅与当前状态有关;

Mealy状态机: 输出同输入和当前状态均有关。

3. 双稳态结构

双稳态器件是存储器件的基本模块,双稳器件的的一种电路结构是:交叉耦合反相器 结构。

双稳态器件存在两种状态:稳定态和亚稳态。

双稳态器件一般都有两种存储机理:

  • 基于正反馈(静态)
  • 基于电荷存储(动态)

4. 静态存储电路

  • 锁存器Latch)是电平敏感的

    • 一般是时钟低电平时锁存数据
  • 寄存器Reister)是边沿触发的(edge-triggered)
    • 寄存器是存放二进制数据的器件,通常由Latch构成
    • 通常是边沿触发的
  • 触发器Flip-flops)是交叉耦合的门构成的任何双稳态器件
    • Latch和Register都可能包含Flip-flop结构
    • 包括单稳态、不稳态(震荡)电路

a. Latch

latch的实现方式可以是Mux构成的:

基于传输门实现的Mux的latch:

优点:

  • 尺寸设计容易
  • 晶体管数目多(时钟负载因而功耗大)

基于传输管Mux的Latch:

  • 仅使用NMOS实现,电路简单,减少了时钟负载
  • 由电压阈值损失(影响噪声容限和性能,可能引起静态功耗)

基于三态缓冲器的Latch:

b. D触发器/寄存器

  • 通常是主-从结构, 由一个正电平灵敏Latch和一个负电平灵敏Latch 构成( 主从Latch 对)
  • 输出状态在效果上表现为在时钟边沿处发生变化(正边沿处或负边沿处),确保整个寄存器可能的反馈路径被切断,防止由于反馈造成的信号“竞争”问题。

时序参数:

Register的时序参数:

Latch的时序参数:

latch的hold时间实际上是半个周期多,如果数据在时钟正半个周期发生变化,输出也将变化。跟register不同的是,latch还有d-q的概念,即数据在透明期间改变到输出响应的时间。

两者的示意图也由差别:

latch的clk没有三角,有三角的代表register。

一般,两个电平灵敏的latch构成主从(Master-Slave)边沿触发寄存器:

高电平时主latch保持,Qm输出不变,Q等于时钟上升沿前的输入D值。效果相当于正沿触发。因此,在时钟上升沿时刻,如果数据D端发生改变,寄存器中仍然存的是D改变之前的值。

Register的工作方式与Verilog中非阻塞赋值的匹配

例如如下verilog代码使用非阻塞赋值语句:

always @(posedge clk or negedge rst_n) begin
    if(!rst_n) begin
        b <=0;
        c <=0;
        d <=0;
    end
    else begin
        b <=in;
        c <=b;
        d <=c;
        end
    end

生成的电路图以及仿真波形如下:

在代码中,b,c,d信号使用非阻塞语句赋值,因为非阻塞语句的特性,在编译器中实际上这几个赋值的表达式会全部依次存入时间队列中,当当前仿真时间内所有活动事件结束后同步执行这些语句,形成了非阻塞的效果。

查看c和b的信号可以发现,在b信号发生跳变的时钟上升沿,c寄存器的主latch开始保持,而从latch的输出仍然是上升沿之前b寄存器的q端值0,因此在当前上升沿结束后,c寄存器的输出仍然是0.

因此时序逻辑中常常是在一个上升沿更新数据,下一个上升沿采样刚更新的数据。

回到正题,由传输门实现的正负电平灵敏latch也可以构成主从边沿触发寄存器:

但是这种结构的缺点在于:时钟负载大,需要8个时钟晶体管。

减少时钟负载的静态主从寄存器

--用强制写入代替Mux

通过两个交叉耦合的反相器实现数据的锁存。前提是T1以及其源驱动必须比\(I_2\)强,否则无法打断反馈。

优点:时钟晶体管数目从8->4

缺点:

  • 是有比逻辑,需要强制写入。
  • 存在反向传导,\(T_2\)和\(I_4\)会共同影响存储在\(I_1-I_2\)环路中的数据。
非理想时钟的影响-时钟交迭(overlap)

由于时钟的反向信号与原始时钟之间通常存在一个overlap(组合逻辑延迟),因此进入两级latch的时钟会有交叠的区域,从而导致触发器D-Q的直接通路,形成竞争(race):

此外,节点A会同时被D和B驱动,导致不确定态。

解决办法:两相不交迭时钟

c. RS-触发器(Flip-Flop)

由交叉的NOR或NAND门构成。

时钟控制的SR触发器:

CMOS静态触发器:

动态Latch和Register

  1. 比静态latch和register简单
  2. 不会破坏的读信息:需要输入高阻抗的器件

缺点:

  1. 漏电问题:基于在寄生电容上存储电荷,由于漏电需要周期刷新
  2. 高阻抗的内部动态节点容易受噪声干扰
  3. 漏电影响了低功耗技术(例如无法停止时钟节省功耗)

解决办法:增加一个弱反馈的反相器

  • 会增加抗噪声能力,但会增加延时
  • 除了高性能数据通路外,一般均应使寄存器成为伪静态或静态

动态传输门边沿触发寄存器

  • 建立时间setup = \(T_1\) ,Clk从低到高之前,数据需要保持\(T_1\)时间长度才能保证采样的值不变。
  • 保持时间hold = 0
  • 延迟时间:\(T_{c-q} = I_1+T_2+I_2\)

时钟重叠的影响:

对时钟不敏感的C2MOS(时钟控制CMOS)寄存器

  • 对时钟交迭不敏感,无论是0-0还是1-1交迭,输出都是保持。
  • 但是,在交迭期间还是对输入D有一定的要求。当0-0交迭时,主latch可以接受D从1到0的变化,X可以从0变为1。
  • C2MOS的c-q时间很短(相当于一级反相器),因此在构成寄存器链时,要防止“贯通”。
  • 如果时钟的上升下降时间太慢,会存在一个时间间隔,N和P都导通,输入和输出之间会产生一条通路,一般使时钟的上升下降时间约小于C2MOS latch传播延时的5倍
  • 在高频下为了满足上述时钟的要求,应该在寄存器单元内部对clk反相,而非使用全局反相时钟。

原文地址:https://www.cnblogs.com/lyc-seu/p/12359543.html

时间: 2024-12-21 04:40:00

VLSI基础-- 第六章 时序逻辑电路的相关文章

Java基础第六章(循环结构二)

一.for循环 语法: for(表达式1;表达式2;表达式3){ //循环体}1.表达式1就是一个赋值的语句,循环结构的初始化部分,为循环变量赋初始值 例如:int i=0;2.表达式2条件语句,循环结构的循环条件,例如:i<1003.表达式3赋值语句,通常使用++或--运算符.循环结构的迭代部分,通常用来修改循环变量的值 例如:i++ 示例: package cn.ytzl.test; import java.util.Scanner; public class Test { public s

java基础(六章)

一.for循环的使用场合 l  while循环--先判断,再循环 while(1.条件表达式){      //2.循环操作      //3.更改循环条件表达式 } l  do-while--先循环,再判断 do{ //2.循环操作          //3.更改循环条件表达式 }while(1.条件表达式); 以上2种循环,一般用于循环次数不确定的情况下 已知循环次数,优先使用for循环 二.for循环的语法 for (1.初始部分 ; 2.条件判断 ; 3.迭代部分 ) {        

C语言基础-第六章

数组和字符串 1.一维数组 数组当中最简单的数据 声明: 类型说明符 数组名[常量表达式] int a[3];说明a的长度为3,那么给a赋值的语句是:a={1,2,3}; 2.多维数组 2.1 二维数组 声明:int a[3][4]; int a[3][5]={{1,1,1},{2,2,2},{3,3,3}} 3.字符数组和字符串 char a[3]={'aa','cc','vvv'}; 4.字符串处理函数 5字符处理函数

java基础第六章

一.回顾3种循环结构 1.while l  语法 条件表达式的初始值: while(条件表达式){ 循环操作: 更改条件表达式的语句: } l  特点:先判断,再执行,有可能一次循环都没有 l  适用的场合:循环次数未知 l  表现形式 n  第一种:循环的次数确定 u  条件表达式,判断整型的变量在某个范围 u  while(i<=5){ //不需要接收用户输入} n  第二种:循环次数不限,用户输入某个值结束循环 u  条件表达式,根据用户输入的值进行判断 u  while(用户输入的值和某

java基础 第六章课后习题

1.说明循环结构中break语句和continue语句的区别. 在循环结构中 break语句 是结束程序运行. continue语句是结束本句程序  不是结束程序. 2.使用for循环结构实现,从键盘上接受从周一至周五每天学习时间,并计算每日平均学习时间.输出结果. 3.鸡兔同笼问题.今有鸡兔同笼,上有35头,下有94足,问鸡兔各几只?试编写程序解决问题. 4.开发一个标题为" FlipFlop"的游戏应用程序.它从 1 计数到100 ,遇到3的倍数输出单词" Flip&qu

java基础 第六章 上(二维数组)

一.二维数组 1.第一种定义方式: 实体类型[][]  数组名 = new 实体类型[行数][列数] 例:int[][] arr = new int[3][3]; 2.第二种定义方式: 例:1    3    4     5 2    3 5    7 3 int[][] arr = new int[][]{{1, 3, 4, 5}, {2, 3}, {5, 7}, {9}}; 或 int[][] arr = {{1, 3, 4, 5}, {2, 3}, {5, 7}, {9}}; 注:第二种定

数电基础 第四章

数电基础 第四章 组合逻辑电路 组合逻辑电路的特点 1.从功能上 :任意时刻的输出仅取决于该时刻的输入 2.从电路结构上:不含记忆(存储)元件 逻辑功能的描述 组合逻辑电路的设计方法 1.逻辑抽象 分析因果关系,确定输入/输出变量 定义逻辑状态的含意(赋值) 列出真值表 2.写出函数式 3.选定器件类型 4.根据所选器件:对逻辑式化简,变换,或进行相应的描述 5.画出逻辑电路图 设计举例 设计一个监视交通信号灯状态的逻辑电路 1.抽象 输入变量:红(R).黄(A).绿(G) 输出变量:故障信号(

【转载】Gradle学习 第六章:构建脚本基础

转载地址:http://ask.android-studio.org/?/article/11 6.1. Projects and tasks 项目和任务Everything in Gradle sits on top of two basic concepts: projects and tasks.<翻译> Gradle中的所有东西都是围绕两个基本概念:项目和任务. Every Gradle build is made up of one or more projects. What a

Ajax本地跨域问题 Cross origin requests are only supported for HTTP(针对jQuery基础教程第四版第六章)

出现的问题: 解决的步骤: 谷歌浏览器出现的效果: 针对jQuery基础教程(第四版),第六章  成功: 原文地址:https://www.cnblogs.com/qinghui258/p/8432569.html