《教程逻辑部分》PPT课件.ppt_第1页
《教程逻辑部分》PPT课件.ppt_第2页
《教程逻辑部分》PPT课件.ppt_第3页
《教程逻辑部分》PPT课件.ppt_第4页
《教程逻辑部分》PPT课件.ppt_第5页
已阅读5页,还剩64页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

数字系统设计的核心知识 复杂数字系统的构成 基本电路和Verilog的对应关系 同步有限状态机在电路中的作用 时钟树与自动综合技术 数字逻辑电路的构成 组合逻辑 输出只是输入逻辑电平的函数 有延时 与电路的原始状态无关 时序逻辑 输出不只是输入的逻辑电平的函数 还与电路所处的状态有关 同步时序逻辑是在同一时钟跳变节拍的前提下 如输入条件满足 则进入下一状态 否则仍留在原来的状态的状态机 数字逻辑电路的构成 组合逻辑 由与 或 非门组成的网络 常用的有 多路器 数据通路开关 加法器 乘法器等 没有记忆功能 时序逻辑 由多个触发器和多个组合逻辑块组成的网络 常用的有 计数器 复杂的数据流动控制逻辑 运算控制逻辑 指令分析和操作控制逻辑 同步时序逻辑的设计是设计复杂的数字逻辑系统的核心 存储器和寄存器 用于暂时存储数据信息 组合逻辑举例之一一个八位数据通路控制器 defineON1 b1 defineOFF1 b0wireControlSwitch wire 7 0 out in assignout ControlSwith ON in 8 h00 一个八位数据通路控制器的波形 带寄存器的八位数据通路控制器的波形 带寄存器的八位数据通路控制器的Verilog描述 defineON1 b1 defineOFF1 b0wireControlSwitch wireclockwire 7 0 out in always posedgeclock if ControlSwith ON out in elseout out 带复位端和使能端的寄存器 moduleregena clock ena reset R Q parametern 8 input n 1 0 R inputclock enareset output n 1 0 Q always posedgeclockornegedgereset if reset Q 0 elseif ena Q R endmodule ena R clock D Q Q reset 具有并行置数和使能控制输入的移位寄存器 具有并行置数和使能控制输入的移位寄存器 moduleshiftregs R load ena w clock Q reset input 3 0 R inputw load ena reset clock output 3 0 Q reg 3 0 Q integerk always posedgeclockornegedgereset if reset Q 0 elseif load Q R elseif ena beginQ 0 W for k 1 k 4 k 1 Q k Q k 1 endendmodule 组合逻辑举例之二 一个八位三态数据通路控制器 defineON1 b1 defineOFF1 b0wireLinkBusSwitch wire 7 0 outbuf inout 7 0 bus assignbus LinkBusSwitch ON outbuf 8 hzz 八位三态数据通路控制器的波形 静态随机存储器 SRAM Sel信号必须维持一定时间 直到经过两个反向器传递过来的Data信号可以自动保持 Data的驱动能力必须大于小反向器的驱动能力 用的三极管很少 可以把密度做得很高 静态随机存储器 SRAM 阵列 地址译码和SRAM块的读写 Dataoutput 开关逻辑应用举例寄存器间数据流动的控制开关 开关逻辑应用举例寄存器间数据流动的控制开关 开关逻辑的时延问题控制数据运算和流动的开关的开启和关闭时序 全局时钟网和平衡树结构 避免冒险和竞争 由于组合逻辑和布线的延迟引起 避免冒险和竞争与流水线 组合逻辑和布线的延迟在组合逻辑中的叠加 为什么要设计有限状态机 如果能严格以时钟跳变沿为前提 按排好时时序 来操作逻辑系统中每一个开关Si 则系统中数据的流动和处理会按同一时钟节拍有序地进行 可以控制冒险和竞争现象对逻辑运算的破坏 时延问题就能有效地加以解决 利用同步有限状态机就能产生复杂的以时钟跳变沿为前提的同步时序逻辑 并提供操作逻辑系统的开关阵列所需要的复杂控制时序 具有信号互锁和先后次序等要求的 为什么要设计有限状态机 如果我们能设计这样一个电路 1 能记住自己目前所处的状态 2 状态的变化只可能在同一个时钟的跳变沿时刻发生 而不可能发生在任意时刻 3 在时钟跳变沿时刻 如输入条件满足 则进入下一状态 并记住自己目前所处的状态 否则仍保留原来的状态 4 在进入不同的状态时刻 对系统的开关阵列做开启或关闭的操作 为什么要设计有限状态机 clock 10ns S2 开 关 S1 t t t Sn S3 t t t S4 为什么要设计有限状态机 有了以上电路 我们就不难设计出复杂的控制序列来操纵数字系统的控制开关阵列 能达到以上要求的电路就是时序和组合电路互相结合的产物 同步有限状态机和由状态和时钟共同控制的开关逻辑阵列 我们只要掌握有限状态机的基本设计方法 加上对基本电路的掌握 再加上对数据处理的过程的细致了解 我们就可以避免由于逻辑器件和布线延迟产生的冒险竞争现象所造成的破坏 设计出符合要求的复杂数字逻辑系统 数字系统的构成示意图 同步有限状态机的设计 什么是有限状态机 FSM FSM的种类和不同点设计举例 什么是有限状态机 有限状态机是由寄存器组和组合逻辑构成的硬件时序电路 其状态 即由寄存器组的1和0的组合状态所构成的有限个状态 只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态 究竟转向哪一状态不但取决于各个输入值 还取决于当前状态 状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑 是数字逻辑的控制核心 Mealy状态机下一个状态 F 当前状态 输入信号 输出信号 G 当前状态 输入信号 图1 时钟同步的状态机结构 Mealy状态机 Moor状态机下一个状态 F 当前状态 输入信号 输出信号 G 当前状态 带流水线输出的Mealy状态机下一个状态 F 当前状态 输入信号 输出信号 G 当前状态 输入信号 输出 简单的状态机设计举例 状态转移图表示RTL级可综合的Verilog模块表示 有限状态机的图形表示 图形表示 状态 转移 条件和逻辑开关 图3 4状态转移图 有限状态机的Verilog描述 定义模块名和输入输出端口 定义输入 输出变量或寄存器 定义时钟和复位信号 定义状态变量和状态寄存器 用时钟沿触发的always块表示状态转移过程 在复位信号有效时给状态寄存器赋初始值 描述状态的转换过程 符合条件 从一个状态到另外一个状态 否则留在原状态 验证状态转移的正确性 必须完整和全面 表示方法之一 modulefsm Clock Reset A K2 K1 inputClock Reset A 定义时钟 复位和输入信号outputK2 K1 定义输出控制信号的端口regK2 K1 定义输出控制信号的寄存器reg 1 0 state 定义状态寄存器parameterIdle 2 b00 Start 2 b01 Stop 2 b10 Clear 2 b11 定义状态变量参数值always posedgeClock if Reset begin 定义复位后的初始状态和输出值state Idle K2 0 K1 0 end 表示方法之一 续 elsecase state Idle beginif A beginstate Start K1 0 endelsestate Idle endStart beginif A state Stop elsestate Start end 表示方法之一 续 Stop begin 符合条件进入新状态 否则留在原状态if A beginstate Clear K2 1 endelsestate Stop endClear beginif A beginstate Idle K2 0 K1 1 endelsestate Clear endendcaseendmodule 表示方法之二 我们还可以用另一个VerilogHDL模型来表示同一个有限状态 见下例 用可综合的Verilog模块设计用独热码表示状态的状态机 modulefsm Clock Reset A K2 K1 inputClock Reset A outputK2 K1 regK2 K1 reg 3 0 state parameterIdle 4 b1000 Start 4 b0100 Stop 4 b0010 Clear 4 b0001 表示方法之二 续 always posedgeclock if Reset beginstate Idle K2 0 K1 0 endelsecase state Idle if A beginstate Start K1 0 endelsestate Idle 表示方法之二 续 Start if A state Stop elsestate Start Stop if A beginstate Clear K2 1 endelsestate Stop Clear if A beginstate Idle K2 0 K1 1 endelsestate Clear 表示方法之二 续 default state Idle endcaseendmodule 例2 与 例1 的主要不同点是状态编码 例2 采用了独热编码 而 例1 则采用Gray码 究竟采用哪一种编码好要看具体情况而定 表示方法之三 在比较复杂的状态机设计过程中 我们往往把状态的变化与输出开关的控制分成两部分来考虑 就象前面讲过的Mealy状态机输出部分的组合逻辑 为了调试方便 还常常把每一个输出开关写成一个个独立的always组合块 在调试多输出状态机时 这样做比较容易发现问题和改正模块编写中出现的问题 建议同学们在设计复杂的多输出状态机时采用下面的风格举例 说明如下 表示方法之三 续 modulefsm Clock Reset A K2 K1 inputClock Reset A outputK2 K1 regK2 K1 reg 1 0 state nextstate parameterIdle 2 b00 Start 2 b01 Stop 2 b10 Clear 2 b11 表示方法之三 续 每一个时钟沿产生一次可能的状态变化 always posedgeClock beginif Reset state Idle elsestate nextstate end 表示方法之三 续 产生下一状态的组合逻辑 always stateorA case state Idle if A nextstate Start elsenextstate Idle Start if A nextstate Stop elsenextstate Start Stop if A nextstate Clear elsenextstate Stop Clear if A nextstate Idle elsenextstate Clear default nextstate 2 bxx endcase 表示方法之三 续 产生输出K1的组合逻辑 always stateorResetorA if Reset K1 0 elseif state Clear endmodule 表示方法之四用输出指定的码表示状态的状态机 方法四采用了另一种方法 直接把状态码定义为输出 也就是把状态码的指定与状态机控制的输出联系起来 把状态的变化直接用作输出 这样做可以提高输出信号的开关速度并节省电路器件 这种设计方法常用在高速状态机中 建议同学们在设计高速状态机时采用方法四的风格 例中state 3 和state 0 分别表示前面两个例子中的输出K2和K1 表示方法之四 续 modulefsm Clock Reset A K2 K1 state inputClock Reset A outputK2 K1 output 4 0 state reg 4 0 state assignK2 state 4 把状态变量的最高位用作输出K2assignK1 state 0 把状态变量的最低位用作输出K1 表示方法之四 续 parameter outputcodedstateassignment K2 i j n K1 Idle 5 b0 0 0 0 0 Start 5 b0 0 0 1 0 Stop 5 b0 0 1 0 0 StopToClear 5 b1 1 0 0 0 Clear 5 b0 1 0 1 0 ClearToIdle 5 b0 0 1 1 1 表示方法之四 续 always posedgeClock if Reset beginstate Idle endelsecase state Idle if A state Start elsestate Idle Start if A state Stop elsestate Start 表示方法之四 续 Stop if A state StopToClear elsestate Stop StopToClear state Clear Clear if A state ClearToIdle elsestate Clear ClearToIdle state Idle default state Idle endcaseendmodule 状态机的测试 不同风格的描述适合不同规模的状态机和不同的综合工具 有的风格查错和修改较容易 但写简单的状态机时比较麻烦 Synopsys公司的综合器建议使用这种风格来描述状态机 上面四个例子是同一个状态机的四种不同的VerilogHDL模型 它们都是可综合的 在设计复杂程度不同的状态机时有它们各自的优势 如用不同的综合器对这四个例子进行综合 综合出的逻辑电路可能会有些不同 但逻辑功能是相同的 下面列出测试这些不同风格状态机的测试模块 供同学们参考 状态机的测试模块 timescale1ns 1nsmodulet rega regclock rst wirek2 k1 initial initial常用于仿真时信号的给出 begina 0 rst 1 给复位信号变量赋初始值clock 0 给时钟变量赋初始值 22rst 0 使复位信号有效 133rst 1 经过一个多周期后使复位信号无效end 状态机的测试模块 always 50clock clock 产生周期性的时钟always posedgeclock 在每次时钟正跳变沿时刻产生不同的abegin 30a random 2 每次a是0还是1是随机的 3 50 12 a的值维持一段时间endinitialbegin 100000 stop end 系统任务 暂停仿真以便观察仿真波形 调用被测试模块t m fsmm Clock clock Reset rst A a K2 k2 K1 k1 endmodule 状态机设计的总结 有限状态机设计的一般步骤 1 逻辑抽象 得出状态转换图2 状态化简3 状态分配在触发器资源丰富的FPGA或ASIC设计中采用独热编码 one hot coding 既可以使电路性能得到保证又可充分利用其触发器数量多的优势 也可以采取输出编码的状态指定来简化电路结构 并提高状态机的运行速度 4 选定触发器的类型并求出状态方程 驱动方程和输出方程 5 按照方程得出逻辑图 状态机设计的总结 用VerilogHDL来描述有限状态机 可以充分发挥硬件描述语言的抽象建模能力 使用always块语句和case if 等条件语句及赋值语句即可方便地实现 具体的逻辑化简及逻辑电路到触发器映射均可由计算机自动完成 上述设计步骤中的第2步及4 5步不再需要很多的人为干预 使电路设计工作得到简化 效率也有很大的提高 逻辑电路的测试 故障模型测试集合的复杂性路径的激活树状结构的电路随机测试时序电路的测试电路内部自测试 Build inSelf Test 线路板的测试 逻辑电路的测试故障模型 信号无法变化的模型信号w总是固定在0或1 stuck at 0表示为 w 0stuck at 1表示为 w 1单个故障和多个故障把多个故障问题简化为许多个单个故障问题来处理 CMOS电路的故障特点晶体三极管的开路或短路 stuck at 0或stuck at 1复杂的情形 不定态 组合逻辑变为时序逻辑的行为 逻辑电路的测试测试集合的复杂性 想要知道模块中a b c d f端中是否有电平不能变化的 需要测试信号w1 w2 w3的各种变化组合 最全的情况有8种 最少有四种 测试集合 001 010 011 100 逻辑电路的测试测试路径的激活 Sensitizing 把w1端的变化直接传到f端 必须把w2置1 w3置0 w4置1 这叫做从w1到f的路径被激活 逻辑电路的测试树状结构的电路 最小测试集合的确定比较麻烦 扫描路径的安排 电路内部自测试 Build inSelf Test 在芯片中必须存储有对测试向量的正确响应 经过比较知道被测试电路是否有故障 测试向量 被测试电路 测试结果处理 x0 Pm 1 P0 Xn 1 四位内部逻辑块观察器Built inLogicBlockObserver BILBO M1M2的不同组合产生不同的功能 sin xor 四位内部逻辑块观察器 BILBO 的M1M2的不同组合时不同的功能 M1M2 11 正常系统模式 p0到p3直接传递到q0到q3 M1M2 00 当G S 1时 为移位寄存器模式 测试矢量一位一

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论