EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现

上传人:壹****1 文档编号:567501162 上传时间:2024-07-20 格式:PPT 页数:93 大小:1.60MB
返回 下载 相关 举报
EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现_第1页
第1页 / 共93页
EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现_第2页
第2页 / 共93页
EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现_第3页
第3页 / 共93页
EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现_第4页
第4页 / 共93页
EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现_第5页
第5页 / 共93页
点击查看更多>>
资源描述

《EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现》由会员分享,可在线阅读,更多相关《EDA设计仿真与硬件描述语言课件6时序逻辑描述与实现(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电路的每一条路径中至少

4、包含一个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

5、#1 g2(_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

6、 = d;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 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-pro

8、ceduraldelayed 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 delayed A

9、ssignmentsNon-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; end initi

10、al 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

11、 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,in1,out1);input

13、 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;out1 = reg3;end

14、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;endendmoduleAsynchronous set l

15、atchmodule 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;endendmoduleAsynchrono

16、us 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_ff(clk,d,q,q_b);input

17、 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 clk,d,set;output q;reg q;alwa

18、ys(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 arsdff (clk, d, q,set,reset);

19、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;elseq=d;endendmoduleSynchronous

20、 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;el

21、seq=d;endendmoduleregisterDFF可以看作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 = 8h0;elseq = d;endendmoduleShift-regmodule shift_reg(clk,d,q,ld,rst,l_r,s_in);input 3:0 d;input clk,ld,

22、rst,l_r,s_in;output 3:0 q;always(posedge clk)beginif(rst) q=4b0000;else if(ld) q=d;else if(l_r) q=q2:0,s_in;else q=s_in,q3:1;endendmodule实例/计数,控制流水灯显示/lab5.5,课下实验memory(用2D reg数组建模)module memory(inbus,outbus,addr,clk,rw);input clk,rw;input 9:0 addr;input 7:0 inbus;output 7:0 outbus;reg 7:0 mem0:1023;assign outbus = rw ? memaddr:8hz;always(posedge clk)if(rw = 0) memaddr = inbus;endmodule;Synthesis问题延时信息全部忽略!延时实际是对实际电路建模,只有综合适配(布局布线)之后才能得到较精确的值考虑工艺库支持问题如FPGA综合时,大多数FPGA中未实现三态门,一般会转换成其他逻辑。小结由基本门构建时序逻辑同步电路概念数字电路中基本部件描述举例D LatchDFFRegister,Shift-regcounterMemory课后作业熟悉课堂内容,查阅verilog手册准备实验

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 医学/心理学 > 基础医学

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号