EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt_第1页
EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt_第2页
EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt_第3页
EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt_第4页
EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt_第5页
已阅读5页,还剩88页未读 继续免费阅读

下载本文档

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

文档简介

EDA设计仿真与硬件描述语言,张德学 2010年6月1日,前堂回顾,基于FPGA开发的基本流程 QuartusII工具流程基本概念(综合、管脚分配) 开发板介绍 Usb-blaster编程介绍 实例演示 /以组合逻辑为例,先将FPGA流程实验了一遍,随后的课程边学习边实验 /实验情况? 不动手 = 0 实验室全天开放,第五章 时序逻辑描述与实现,由基本门构建时序逻辑 同步电路概念 数字电路中基本部件描述举例 演示,1. 由基本门构建时序逻辑,组合电路定义?,组合电路: 电路的输出仅是当前输入的函数,与先前值无关。 怎样与先前值有关?,反馈,最简单的方式:反馈! 奇数个反相器连接,结果? 偶数个反相器连接,结果? /Lab_inv_loop /简介脚本方式 vsim do sim.do,奇数个反相器连接: 震荡,可以作为频率源 偶数个反相器连接: 两个稳定状态,时序电路,Cross-coupled 两个稳定状态 (a)与(b)实际一样,仅画法不同,两个稳定状态,但没有控制 / 需要仿真时赋初值,SR Latch,NOR门 Cross-coupled /Lab_SR_Latch,缺点: R=1,S=1时表现怪异,D Latch,SR Latch基础上改进,避免R、S同时为1 Lab_D_Latch /层次化设计,Latch缺点,在CLK=1的时间内,D的变化均会传递到Q 实际更需要的是CLK由01或者10的边沿触发DQ,即触发器Flip-flop Latch是level-sensitive, Flip-flop是edge-triggered,D Flip-Flop (DFF),可由两个D Latch构成DFF /Lab_D_FF /有更简单的写法,此处只是演示原理,DFF仅在时钟上升沿时将DQ,Enabled DFF (带使能功能),稍加改造DFF;a、b两种方式实现,带reset的DFF,Latch 与 FF比较,2. 同步电路概念,同步电路 vs 异步电路? 系统中若存在多个DFF,采用的时钟是同一个?,synchronous sequential circuit,电路的每一条路径中至少包含一个register 所有register由同一时钟源驱动 /准确的说法:各个register的时钟间有固定的相位关系,同步电路较异步电路容易设计,因而大部分采用同步电路 / why ? 通信电路中,有时必须采用异步电路(不同的信号源),3. 数字电路中基本部件描述举例,复杂电路均建立在简单电路基础上 基本电路的描述方法,Clocked D latch,上图电路如何用verilog表达? /多种描述方法,module latch(d,c,q,q_b); /门级表达 input d; input c; output q; output q_b; wire _r; wire _s; and #1 g1(_s,d,c); and #1 g2(_r,d,c); nor #2 g3(q_b,_s,q); nor #2 g4(q,q_b,_r); endmodule,module latch(d,c,q,q_b); /连续赋值表达 input d; input c; output q; output q_b; assign #3 q = c?d:q; assign q_b = q; endmodule,module latch(d,c,q,q_b); /过程赋值表达 input d; input c; output q; output q_b; reg q; reg q_b; always(c or d) begin if(c) begin #4 q = d; q_b = d; end end endmodule,D Latch 演示,/Lab4 注意时延设置,可以自己修改,看看结果,补充:阻塞赋值与非阻塞赋值,D Latch与 DFF更常用非阻塞(zu se,新华字典)赋值来表达 前面课程中介绍 过程块(initial,always)时,未涉及到时序电路,未介绍非阻塞赋值! /从仿真器工作原理开始,可选讲解,仿真器工作原理,intitial 执行一次 always循环执行(只要满足触发条件) always a=b; 如何执行? 各block的执行是concurrent,执行顺序不确定 beginend中的阻塞赋值按顺序执行,非阻塞赋值在当前时间槽事件队列结束时同时执行 fork join中语句并行执行,always a=b; 仿真器时间不能前进!,Procedural assignments,在过程块中的赋值(对比:连续赋值?) RHSLHS / Right Hand Side Left Hand Side LHS不能是Net类型 always(posedge clk) begin a=5; c=d; end,阻塞赋值 Blocking Assignments,Delayed Blocking assignments,a得到的是b(t+1)的值!,Blocking Intra-procedural delayed assignment,等价:tmp=b; #1; a=tmp;,Blocking Intra-procedural delayed assignment,多条语句情况,问题:,always(posedge clk) a=b; always(posedge clk) b=c; 假设0时刻时b=3,c=5,第一个posedge clk 后,a=?,答案:不确定 不同的仿真器可能给出不同的结果,取决于执行顺序,always(posedge clk) begin a=b; b=a; end / a与b交换值了吗?,Non-blocking Assignments,不存在竞争问题!,是swap功能!,Delayed Non-blocking Assignments,Non-blocking Intra-procedural delayed Assignments,Non-blocking Intra-procedural delayed Assignments,Mixed Blocking and Non-blocking,问题:,define FALSE 0 define TRUE 1 reg a; initial begin a = FALSE; /#1 a = FALSE; /a = #1 FALSE; a = TRUE; if (a = TRUE) $display (“True“); else $display (“False“); end /Lab/Lab_tmp目录下,问题:X ,Y = ?,initial begin x = 0; y = 0; end initial begin #0 x = 1; /zero delay control #0 y = 1; end,仿真器工作原理介绍结束,如何描述下图电路?,方法1:多个always块中阻塞赋值,always(posedge clk) Dout = Reg1 Dout; always(posedge clk) Reg1 = Din Dout;,上述描述不正确! 无论哪条always语句先执行,结果都是错的! 无论哪条always语句先执行,都改变了reg1或dout的值,再执行另一个always语句时,其依赖的reg1或dout都不是前一个时钟的值,而是更新后的值了!显然是错误的,方法2:单个always块中赋值,reg temp; always(posedge clk) begin temp = Dout; Dout = Dout Reg1; Reg1 = temp Din; end,上述描述是正确的! 前提是:临时变量保存上一时钟的值,always块中的语句只能按上述顺序,否则也是错误,方法3:非阻塞赋值,always(posedge clk) Dout = Dout Reg1; always(posedge clk) Reg1 = Dout Din;,上述描述正确! 非阻塞的含义: 首先计算出全部的RHS当前值(当前仿真时间槽),在时间槽处理事件队列末,更新LHS(未必是在时间槽的后边沿时刻上) 阻塞含义: 计算当前仿真时间槽上各语句的RHS,并立即调度赋给LHS。(未考虑延时情况)。随后语句等待此语句完成。 语句顺序不同,可能导致不同结果! 非阻塞赋值更适于建模并发电路,时序逻辑中的阻塞赋值,结果?,module reg_test(clk,in1,out1); input clk; input in1; output out1; reg reg1,reg2,reg3,out1; always(posedge clk) begin reg1 = in1; reg2 = reg1; reg3 = reg2; out1 = reg3; end endmodule,时序逻辑中的非阻塞赋值,结果?,module reg_test(clk,in1,out1); input clk; input in1; output out1; reg reg1,reg2,reg3,out1; always(posedge clk) begin reg1 = in1; reg2 = reg1; reg3 = reg2; out1 = reg3; end endmodule,组合电路中的阻塞赋值,结果?,module reg_test(clk,in1,out1); input clk; input in1; output out1; reg reg1,reg2,reg3,out1; always(in1) begin reg1 = in1; reg2 = reg1; reg3 = reg2; out1 = reg3; end endmodule,逻辑错误多是不规范(或错误)的表达引起的!,2010.5.31,补充一个演示? 上述三种Verilog代码在synthesis后,对应的电路? Linux 上 synopsys DC + SpringSoft Verdi,各种D-Latch、DFF的表达方法,D Latch常用表达,基本D Latch module d1(clk,d,q); input clk,d; output q; reg q; always(clk or d) /可用(*)代替,容易出错的地方 begin if(clk) /注意此处,if 无 else情况 q = d; end endmodule,Asynchronous set latch,module d1(clk,d,q,set); input clk,d,set; output q; reg q; always(clk or d or set) begin if(set) q = 1b1; else if(clk) q = d; end endmodule,Asynchronous reset latch,module d1(clk,d,q,reset); input clk,d,reset; output q; reg q; always(clk or d or reset) begin if(reset) q = 1b0; else if(clk) q = d; end endmodule,Asynchronous set and reset latch,module d1(clk,d,q,set,reset); input clk,d,set,reset; output q; reg q; always(clk or d or set or reset) begin if(reset) q = 1b0; else if(set) q = 1b1; else if(clk) q = d; end endmodule,D Flip-Flop (DFF),posedge 含义?,posedge含义,01 0X or Z X or Z 1,DFF演示,timescale 1ns/100ps module d_ff(clk,d,q,q_b); input clk; input d; output q; output q_b; reg q; reg q_b; always(posedge clk) begin q=d; q_b=d; end endmodule /Lab5 /附带演示posedge含义,DFF 常用表达,基本DFF module dff (clk, d, q); input clk,d; output q; reg q; always(posedge clk) begin q=d; end endmodule,Asynchronous set FF,module asdff (clk, d, q,set); input clk,d,set; output q; reg q; always(posedge clk or posedge set) begin if(set) q = 1b1; else q=d; end endmodule,Asynchronous reset FF,module ardff (clk, d, q,reset); input clk,d,reset; output q; reg q; always(posedge clk or posedge reset) begin if(reset) q = 1b0; else q=d; end endmodule,Asynchronous set and reset FF,module arsdff (clk, d, q,set,reset); input clk,d,set,reset; output q; reg q; always(posedge clk or posedge set or posedge reset) begin if(reset) q = 1b0; else if(set) q = 1b1; else q=d; end endmodule,Synchronous set FF,module ssdff (clk, d, q,set); input clk,d,set; output q; reg q; always(posedge clk) begin if(set) q = 1b1; else q=d; end endmodule,Synchronous reset FF,module srdff (clk, d, q,reset); input clk,d,reset; output q; reg q; always(posedge clk) begin if(reset) q = 1b0; else q=d; end endmodule,Synchronous set and reset FF,module ssrdff (clk, d, q,set,reset); input clk,d,set,reset; output q; reg q; always(posedge clk) begin if(reset) q = 1b0; else if(set) q = 1b1; else q=d; end endmodule,register,DFF可以看作1bit存储器、寄存器,register,module register(clk,d,q,set,reset); input 7:0 d; input clk,set,reset; output 7:0 q; reg 7:0 q; always(posedge clk) begin if(set) q=8hff; else if(reset) q = 8h0; els

温馨提示

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

评论

0/150

提交评论