EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt
《EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt》由会员分享,可在线阅读,更多相关《EDA设计仿真与硬件描述语言课件-6-时序逻辑描述与实现.ppt(93页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、EDA设计仿真与硬件描述语言设计仿真与硬件描述语言 张德学2010年6月1日前堂回顾基于FPGA开发的基本流程QuartusII工具流程基本概念(综合、管脚分配)开发板介绍Usb-blaster编程介绍实例演示/以组合逻辑为例,先将以组合逻辑为例,先将FPGA流程实验了一遍,流程实验了一遍,随后的课程边学习边实验随后的课程边学习边实验/实验情况?实验情况?不动手=0实验室全天开放第五章 时序逻辑描述与实现 1.由基本门构建时序逻辑2.同步电路概念3.数字电路中基本部件描述举例4.演示1.由基本门构建时序逻辑组合电路定义?组合电路:电路的输出仅是当前输入的函数,与先前值无关。怎样与先前值有关?反
2、馈最简单的方式:反馈!奇数个反相器连接,结果?偶数个反相器连接,结果?/Lab_inv_loop/简介脚本方式 vsim do sim.do奇数个反相器连接:震荡,可以作为频率源偶数个反相器连接:两个稳定状态时序电路Cross-coupled 两个稳定状态(a)与(b)实际一样,仅画法不同两个稳定状态,但没有控制/需要仿真时赋初值SR LatchNOR门 Cross-coupled/Lab_SR_Latch缺点:R=1,S=1时表现怪异D LatchSR Latch基础上改进,避免R、S同时为1Lab_D_Latch/层次化设计Latch缺点在CLK=1的时间内,D的变化均会传递到Q实际更需要
3、的是CLK由01或者10的边沿触发DQ,即触发器Flip-flopLatch是level-sensitive,Flip-flop是edge-triggeredD Flip-Flop(DFF)可由两个D Latch构成DFF/Lab_D_FF/有更简单的写法,此处只是演示原理DFF仅在时钟上升沿时将DQEnabled DFF(带使能功能)稍加改造DFF;a、b两种方式实现带reset的DFFLatch 与 FF比较2.同步电路概念同步电路 vs 异步电路?系统中若存在多个DFF,采用的时钟是同一个?synchronous sequential circuit电路的每一条路径中至少包含一个regi
4、ster 所有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);n
5、or#2 g3(q_b,_s,q);nor#2 g4(q,q_b,_r);endmodulemodule 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;endmodulemodule latch(d,c,q,q_b);/过程赋值表达input d;input c;output q;output q_b;reg q;reg q_b;always(c or d)beginif(c)begin#4 q=d;q_b=d;endendendmoduleD Latch 演示
6、/Lab4注意时延设置,可以自己修改,看看结果补充:阻塞赋值与非阻塞赋值D Latch与 DFF更常用非阻塞(zu se,新华字典)赋值来表达前面课程中介绍 过程块(initial,always)时,未涉及到时序电路,未介绍非阻塞赋值!/从仿真器工作原理开始,可选讲解仿真器工作原理intitial 执行一次always循环执行(只要满足触发条件)always a=b;如何执行?各block的执行是concurrent,执行顺序不确定beginend中的阻塞赋值按顺序执行,非阻塞赋值在当前时间槽事件队列结束时同时执行fork join中语句并行执行always a=b;仿真器时间不能前进!Pro
7、cedural assignments在过程块中的赋值(对比:连续赋值?)RHSLHS/Right Hand Side Left Hand SideLHS不能是Net类型always(posedge clk)begina=5;c=d;end阻塞赋值 Blocking AssignmentsDelayed Blocking assignmentsa得到的是b(t+1)的值!Blocking Intra-proceduraldelayed assignment等价:tmp=b;#1;a=tmp;Blocking Intra-proceduraldelayed assignment多条语句情况问题:
8、always(posedge clk)a=b;always(posedge clk)b=c;假设0时刻时b=3,c=5,第一个posedge clk 后,a=?答案:不确定不同的仿真器可能给出不同的结果,取决于执行顺序always(posedge clk)begina=b;b=a;end/a与b交换值了吗?Non-blocking Assignments不存在竞争问题!是swap功能!Delayed Non-blocking AssignmentsNon-blocking Intra-procedural delayed AssignmentsNon-blocking Intra-proced
9、uraldelayed AssignmentsMixed Blocking andNon-blocking问题:define FALSE 0define TRUE 1reg a;initialbegina=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 仿真器工作原理介绍结束如何
10、描述下图电路?方法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)begintemp=Dout;Dout=Dout Reg1;Reg1=temp Din;en
11、d上述描述是正确的!前提是:临时变量保存上一时钟的值,always块中的语句只能按上述顺序,否则也是错误方法3:非阻塞赋值always(posedge clk)Dout=Dout Reg1;always(posedge clk)Reg1=Dout Din;上述描述正确!非阻塞的含义:首先计算出全部的RHS当前值(当前仿真时间槽),在时间槽处理事件队列末,更新LHS(未必是在时间槽的后边沿时刻上)阻塞含义:计算当前仿真时间槽上各语句的RHS,并立即调度赋给LHS。(未考虑延时情况)。随后语句等待此语句完成。语句顺序不同,可能导致不同结果!非阻塞赋值更适于建模并发电路时序逻辑中的阻塞赋值,结果?m
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- EDA 设计 仿真 硬件 描述 语言 课件 时序 逻辑 实现
限制150内