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

下载本文档

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

文档简介

1、EDA设计仿真与硬件描画言语设计仿真与硬件描画言语 张德学2021年6月1日前堂回想 基于FPGA开发的根本流程 QuartusII工具流程根本概念综合、管脚分配 开发板引见 Usb-blaster编程引见 实例演示 /以组合逻辑为例,先将FPGA流程实验了一遍,随后的课程边学习边实验 /实验情况? 不动手 = 0 实验室全天开放第五章 时序逻辑描画与实现 由根本门构建时序逻辑同步电路概念数字电路中根本部件描画举例演示1. 由根本门构建时序逻辑 组合电路定义? 组合电路:电路的输出仅是当前输入的函数,与先前值无关。 怎样与先前值有关?反响 最简单的方式:反响! 奇数个反相器衔接,结果? 偶数个

2、反相器衔接,结果? /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或

3、者10的边沿触发DQ,即触发器Flip-flop Latch是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 g

5、2(_r,d,c);nor #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

6、;endendendmoduleD Latch 演示/Lab4留意时延设置,可以本人修正,看看结果补充:阻塞赋值与非阻塞赋值 D Latch与 DFF更常用非阻塞zu se,新华字典赋值来表达 前面课程中引见 过程块initial,always时,未涉及到时序电路,未引见非阻塞赋值! /从仿真器任务原理开场,可选讲解仿真器任务原理 intitial 执行一次 always循环执行只需满足触发条件always a=b; 如何执行? 各block的执行是concurrent,执行顺序不确定 beginend中的阻塞赋值按顺序执行,非阻塞赋值在当前时间槽事件队列终了时同时执行 fork join中语

7、句并行执行 always a=b; 仿真器时间不能前进!Procedural assignments 在过程块中的赋值对比:延续赋值? RHSLHS / Right Hand Side Left Hand Side LHS不能是Net类型 always(posedge clk) begina=5;c=d; end阻塞赋值 Blocking AssignmentsDelayed Blocking assignments a得到的是b(t+1)的值!Blocking Intra-proceduraldelayed assignment 等价:tmp=b; #1; a=tmp;Blocking In

8、tra-proceduraldelayed assignment 多条语句情况问题: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

9、delayed AssignmentsNon-blocking Intra-proceduraldelayed 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;

10、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:单个

11、always块中赋值reg temp;always(posedge clk) begintemp = Dout;Dout = Dout Reg1;Reg1 = temp Din;end 上述描画是正确的! 前提是:暂时变量保管上一时钟的值,always块中的语句只能按上述顺序,否那么也是错误方法3:非阻塞赋值always(posedge clk)Dout = Dout Reg1;always(posedge clk)Reg1 = Dout Din; 上述描画正确! 非阻塞的含义:首先计算出全部的RHS当前值当前仿真时间槽,在时间槽处置事件队列末,更新LHS未必是在时间槽的后边沿时辰上 阻塞含义

12、:计算当前仿真时间槽上各语句的RHS,并立刻调度赋给LHS。未思索延时情况。随后语句等待此语句完成。语句顺序不同,能够导致不同结果! 非阻塞赋值更适于建模并发电路时序逻辑中的阻塞赋值,结果?module reg_test(clk,in1,out1);input clk;input in1;output out1;reg reg1,reg2,reg3,out1;always(posedge clk)beginreg1 = in1;reg2 = reg1;reg3 = reg2;out1 = reg3;endendmodule时序逻辑中的非阻塞赋值,结果?module reg_test(clk,i

13、n1,out1);input clk;input in1;output out1;reg reg1,reg2,reg3,out1;always(posedge clk)beginreg1 = in1;reg2 = reg1;reg3 = reg2;out1 = reg3;endendmodule组合电路中的阻塞赋值,结果?module reg_test(clk,in1,out1);input clk;input in1;output out1;reg reg1,reg2,reg3,out1;always(in1)beginreg1 = in1;reg2 = reg1;reg3 = reg2;o

14、ut1 = reg3;endendmodule 逻辑错误多是不规范或错误的表达引起的!2019.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 endmod

15、uleAsynchronous set latchmodule d1(clk,d,q,set);input clk,d,set;output q;reg q;always(clk or d or set)beginif(set) q = 1b1;elseif(clk)q = d;endendmoduleAsynchronous reset latchmodule d1(clk,d,q,reset);input clk,d,reset;output q;reg q;always(clk or d or reset)beginif(reset) q = 1b0;elseif(clk)q = d;e

16、ndendmoduleAsynchronous set and reset latchmodule d1(clk,d,q,set,reset);input clk,d,set,reset;output q;reg q;always(clk or d or set or reset)beginif(reset)q = 1b0;else if(set) q = 1b1;elseif(clk)q = d;endendmoduleD Flip-Flop (DFF) posedge 含义?posedge含义010X or ZX or Z 1DFF演示timescale 1ns/100psmodule d

17、_ff(clk,d,q,q_b);input clk;input d;output q;output q_b;reg q;reg q_b;always(posedge clk) beginq=d;q_b=d;endendmodule/Lab5/附带演示附带演示posedge含义含义DFF 常用表达 根本DFFmodule dff (clk, d, q);input clk,d;output q;reg q;always(posedge clk) beginq=d;endendmoduleAsynchronous set FFmodule asdff (clk, d, q,set);input

18、clk,d,set;output q;reg q;always(posedge clk or posedge set) beginif(set)q = 1b1;elseq=d;endendmoduleAsynchronous reset FFmodule ardff (clk, d, q,reset);input clk,d,reset;output q;reg q;always(posedge clk or posedge reset) beginif(reset)q = 1b0;elseq=d;endendmoduleAsynchronous set and reset FFmodule

19、arsdff (clk, d, q,set,reset);input clk,d,set,reset;output q;reg q;always(posedge clk or posedge set or posedge reset) beginif(reset)q = 1b0;else if(set)q = 1b1;elseq=d;endendmoduleSynchronous set FFmodule ssdff (clk, d, q,set);input clk,d,set;output q;reg q;always(posedge clk) beginif(set)q = 1b1;el

20、seq=d;endendmoduleSynchronous reset FFmodule srdff (clk, d, q,reset);input clk,d,reset;output q;reg q;always(posedge clk) beginif(reset)q = 1b0;elseq=d;endendmoduleSynchronous set and reset FFmodule ssrdff (clk, d, q,set,reset);input clk,d,set,reset;output q;reg q;always(posedge clk) beginif(reset)q = 1b0;else if(set)q = 1b1;elseq=d;endendmoduleregister DFF可以看作1bit存储器、存放器registermodule 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)beginif(set) q=8hff;elseif(reset)q = 8

温馨提示

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

评论

0/150

提交评论