设计示例一 用门级结构描述D触发器.ppt
《设计示例一 用门级结构描述D触发器.ppt》由会员分享,可在线阅读,更多相关《设计示例一 用门级结构描述D触发器.ppt(518页珍藏版)》请在三一办公上搜索。
1、设计示例一,用门级结构描述D触发器:,设计示例一,moduleflop(data,clock,clear,q,qb);inputdata,clock,clear;outputq,qb;nand#10nd1(a,data,clock,clear),nd2(b,ndata,clock),nd4(d,c,b,clear),nd5(e,c,nclock),nd6(f,d,nclock),nd8(qb,q,f,clear);nand#9nd3(c,a,d),nd7(q,e,qb);not#10iv1(ndata,data),iv2(nclock,clock);endmodule,设计示例二,由已设计的模
2、块来构成高一级的模块,设计示例二,include“flop.v”modulehardreg(d,clk,clrb,q);inputclk,clrb;input3:0 d;output3:0q;flopf1(d0,clk,clrb,q0,),f2(d1,clk,clrb,q1,),f3(d2,clk,clrb,q2,),f4(d3,clk,clrb,q3,);endmodule,设计示例三,编写测试模块通过仿真检查设计正确与否:,include“hardreg.v”module hardreg_top;reg clock,clearb;reg 3:0 data;wire 3:0 qout;def
3、ine stim#100 data=4b/宏定义 stim,可使源程序简洁event end_first_pass;/定义事件end_first_pass,设计示例三(续),hardreg reg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout);/*-把本模块中产生的测试信号data、clock、clearb输入实例reg_4bit以观察输出信号qout.实例reg_4bit引用了hardreg-*/initial begin clock=0;clearb=1;end always#50 clock=clock;,设计示例三(续),/*-宏定义
4、stim引用,等同于#100 data=4b 注意引用时要用 符号。-*/stim 0000;stim 0001;.stim 1111;end#200 end_first_pass;/*-延迟200个单位时间,触发事件end_first_pass-*/$finish;/结束仿真endendmodule,Verilog HDL 设计示例四,有限状态机的设计,-有限状态机是由寄存器组和组合逻辑构成的 硬件时序电路;-其状态(即由寄存器组的1和0的组合状态所 构成的有限个状态)只能在同一时钟跳变沿 的 情况下才能从一个状态转向另一个状态;-究竟转向哪一状态不但取决于各个输入值,还取决于当前状态。-状
5、态机可用于产生在时钟跳变沿时刻开关的 复杂的控制逻辑,是数字逻辑的控制核心。,设计示例四(续),设计示例四(续),module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg F,G;reg 1:0 state;parameter Idle=2b00,Start=2b01,Stop=2b10,Clear=2b11;always(posedge Clock)if(!Reset)begin state=Idle;F=0;G=0;end else,设计示例四(续),case(state)idle:begin if(A)state=S
6、tart;G=0;end start:if(!A)state=Stop;Stop:begin if(A)state=Clear;F=1;end Clear:begin if(!A)state=Idle;F=0;G=1;end endcaseendmodule,设计示例四(续),还可以用另一个Verilog HDL模型来表示同一个有限状态,见下例:module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg F,G;reg 3:0 state;parameter Idle=4b1000,Start=4b0100,Stop=4b0
7、010,Clear=4b0001;,设计示例四(续),always(posedge clock)if(!Reset)begin state=Idle;F=0;G=0;end else case(state)Idle:begin if(A)state=Start;G=0;end Start:if(!A)state=Stop;Stop:begin if(A)state=Clear;,设计示例四(续),F=1;end Clear:begin if(!A)state=Idle;F=0;G=1;end default:state=Idle;endcaseendmodule,设计示例四(续),我们还可以用
8、另一种风格的Verilog HDL模型来表示同一个有限状态。在这个模型中,我们把用always语句在时钟沿触发条件下的状态变化放在一个独立的块中,而把在状态控制下的两个开关分两个独立的组合逻辑always块来描述。见下例:module fsm(Clock,Reset,A,F,G);input Clock,Reset,A;output F,G;reg 1:0 state;reg F,G;parameter Idle=2b00,Start=2b01,Stop=2b10,Clear=2b11;,设计示例四(续),always(posedge Clock)if(!Reset)begin state=I
9、dle;end else case(state)Idle:if(A)state=Start;Start:if(!A)state=Stop;Stop:if(A)state=Clear;Clear:if(!A)state=Idle;default:state=2 bxx;endcase,设计示例四(续),always(state or Reset or A)begin if(!Reset)F=0;else if(state=Stop)F=1;end always(state or Reset or A)begin if(!Reset)G=0;else if(state=Clear)G=1;end
10、endmodule,Verilog HDL 基础语法入门,第一部分 课程简介,目的:简单介绍Verilog HDL语言和仿真工具介绍讲课计划介绍如何不断地学习新的有关知识,讲座中关于Verilog HDL的主要内容,讲课内容主要包括:Verilog 的应用Verilog 语言的组成部件 结构级的建模与仿真行为级的建模与仿真延迟参数的表示Verilog 的测试平台:怎样产生激励信号和控制信号 输出响应的产生、记录和验证任务和函数用户定义的元器件(primitives)可综合风格的Verilog 建模,讲座中关于Verilog仿真工具的主要内容,讲课内容主要包括:如何对所做的设计进行编译和仿真如何
11、使用元器件库如何用Verilog-XL命令行界面调试代码如何用图形用户界面(GUI)延迟的计算和标记仿真性能建模循环多次仿真,目的:了解用HDL语言设计数字逻辑的优点了解Verilog 主要应用领域了解Verilog 的发展历史了解电路系统的不同层次的Verilog抽象,第二部分:Verilog 的应用,Verilog HDL是一种用于数字逻辑电路设计的语言:-用Verilog HDL描述的电路设计就是该电路 的 Verilog HDL模型。-Verilog HDL 既是一种行为描述的语言也 是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路
12、的Verilog HDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下五种:,Verilog 的应用,Verilog 的应用,系统级(system):用高级语言结构实现设计模块的外部性能的模 算法级(algorithmic):用高级语言结构实现设计算法的模型。RTL级(Register Transfer Level):描述数据在寄存器之间流动和如何处理这些数据的模型。门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。,Verilog 的应用
13、,一个复杂电路的完整Verilog HDL模型是由若个 Verilog HDL 模块构成的,每一个模块又可以由若干个子模块构成。利用Verilog HDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计。Verilog HDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下八项功能:,Verilog 的应用,可描述顺序执行或并行执行的程序结构。用延迟表达式或事件表达式来明确地控制过程的启动时间。通过命名的事件来触发其它过程里的激活行为或停止行为。提供了条件、if-else、case、循环程序结构
14、。提供了可带参数且非零延续时间的任务(task)程序结构。提供了可定义新的操作符的函数结构(function)。,Verilog 的应用,提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。Verilog HDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。Verilog HDL的构造性语句可以精确地建立信号的模型。这是因为在Verilog HDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。,Verilog 的应用,Verilog HDL作为一种高级的硬件描述编程语言,有着类似C语言的
15、风格。其中有许多语句如:if语句、case语句等和C语言中的对应语句十分相似。如果读者已经掌握C语言编程的基础,那么学习 Verilog HDL并不困难,我们只要对Verilog HDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面我们将对Verilog HDL中的基本语法逐一加以介绍。,模块的抽象,技术指标:用文字表示用算法表示用高级行为的Verilog模块表示RTL/功能级:用可综合的Verilog模块表示门级/结构级:用实例引用的Verilog模块表示版图布局/物理级:用几何形状来表示,第三部分.简单的 Verilog HDL
16、模块,目的:通过简单的例子了解Verilog模块的基本构成了解Verilog模块的层次结构和行为模块了解Verilog模块的测试,简单的 Verilog HDL 模块,下面先介绍几个简单的Verilog HDL程序,然后从中分析Verilog HDL程序的特性。例2.1.1:module adder(count,sum,a,b,cin);input 2:0 a,b;input cin;output count;output 2:0 sum;assign count,sum=a+b+cin;endmodule 这个例子描述了一个三位的加法器。从例子中可以看出整个Verilog HDL程序是嵌套在
17、module和endmodule声明语句里的。,简单的 Verilog HDL 模块,例2.1.2:module compare(equal,a,b);output equal;/声明输出信号equal input 1:0 a,b;/声明输入信号a,b assign equal=(a=b)?1:0;/*如果两个输入信号相等,输出为1。否则为0*/endmodule这个程序描述了一个比较器.在这个程序中,/*.*/和/.表示注释部分,注释只是为了方便程序员理解程序,对编译是不起作用的。,简单的 Verilog HDL 模块,例2.1.3:module trist2(out,in,enable);
18、output out;input in,enable;bufif1 mybuf(out,in,enable);endmodule这个程序描述了一个三态驱动器。程序通过调用一个实例元件bufif1来实现其功能。,简单的 Verilog HDL 模块,例2.1.4:module trist1(out,in,enable);output out;input in,enable;mytri tri_inst(out,in,enable);endmodule module mytri(out,in,enable);output out;input in,enable;assign out=enable?
19、In:bz;endmodule,简单的 Verilog HDL 模块,上述程序例子通过另一种方法描述了一个三态门。在这个例子中存在着两个模块:模块trist1 调用模块 mytri 的实例元件 tri_inst。模块 trist1 是上层模块。模块 mytri 则被称为子模块。通过这种结构性模块构造可构成特大型模块。,简单的 Verilog HDL 模块,通过上面的例子可以看到:Verilog HDL程序是由模块构成的。模块是可以进行层次嵌套的。正因为如此,才可以将大型的数字电路设计分割成不同的小模块来实现特定的功能,最后通过顶层模块调用子模块来实现整体功能。每个模块要进行端口定义,并说明输入
20、输出口,然后对模块的功能进行行为逻辑描述。Verilog HDL程序的书写格式自由,一行可以写几个语句,一个语句也可以分写多行。除了endmodule语句外,每个语句和数据定义的最后必须有分号 可以用/*.*/和/.对Verilog HDL程序的任何部分作注释。一个好的,有使用价值的源程序都应当加上必要的注释,以增强程序的可读性和可维护性。,模块的结构,Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的:一)描述接口;二)描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:,模块的结构,从上面的例子可以看出:-Verilog模块结构完全嵌在module和endm
21、odule声明语句之间;-每个Verilog程序包括四个主要部分:端口定义、I/O说明、内部信号声明、功能定义。,模块的测试,如何检查上述例子其功能是否正确?需要有测试激励信号输入到被测模块 需要记录被测模块的输出信号 需要把用功能和行为描述的Verilog模块 转换为门级电路互连的电路结构(综合)。需要对已经转换为门级电路结构的逻辑 进行测试(门级电路仿真)。需要对布局布线后的电路结构进行测试。(布局布线后仿真)。,模块的测试,模块的测试,测试模块常见的形式:module t;reg;/被测模块输入/输出变量类型定义wire;/被测模块输入/输出变量类型定义initial begin;end
22、/产生测试信号always#delay begin;end/产生测试信号Testedmd m(.in1(ina),.in2(inb),.out1(outa),.out2(outb);/被测模块的实例引用initial begin.;.;.end/记录输出和响应endmodule,模块的测试,测试模块中常用的过程块:,always,所有的过程块都在0时刻同时启动;它们是并行的,在模块中不分前后。initial块 只执行一次。always块 只要符合触发条件可以循环执行。,模块的测试,如何描述激励信号:module t;reg a,b,sel;wire out;/引用多路器实例 mux2_m(ou
23、t,a,b,sel);/加入激励信号initial begin a=0;b=1;sel=0;#10 b=0;#10 b=1;sel=1;#10 a=1;#10$stop;end,模块的测试,如何观察被测模块的响应:在initial 块中,用系统任务$time 和$monitor$time 返回当前的仿真时刻$monitor 只要在其变量列表中有某一个或某几个变 量值发生变化,便在仿真单位时间结束时显示其变 量列表中所有变量的值。例:initial begin$monitor($time,“out=%b a=%b sel=%b”,out,a,b,sel);end,模块的测试,如何把被测模块的输出
24、变化记录到数据库文件中?(文件格式为VCD,大多数的波形显示工具都能读取该格式)可用以下七个系统任务:$dumpfile(“file.dump”);/打开记录数据变化的数据文件$dumpvars();/选择需要记录的变量$dumpflush;/把记录在数据文件中的资料转送到硬盘保存$dumpoff;/停止记录数据变化$dumpon;/重新开始记录数据变化$dumplimit();/规定数据文件的大小(字节)$dumpall;/记录所有指定信号的变化值到数据文件中,模块的测试,如何把被测模块的响应变化记录到数据库文件中?举例说明:$dumpvars;/记录各层次模块中所有信号的变化$dumpva
25、rs(1,top);/只记录模块top中所有信号的变化$dumpvars(2,top.u1);/记录top模块中实例u1和它以下一层子模块所有信号的变化$dumpvars(0,top.u2,top.u1.u13.q);/记录top模块中实例u2和它本层所有信号的变化,还有信号的变化。$dumpvars(3,top.u2,top.u1);/记录top模块中u2和u1所有信号的变化(包括其两层以下子模块的信号变化)。,模块的测试,如何把被测模块的响应变化记录到数据库文件中?举例说明:下面的 Verilog 代码段可以代替测试文件中的系统任务$monitor initial begin$dumpfi
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 设计示例一 用门级结构描述D触发器 设计 示例 用门级 结构 描述 触发器

链接地址:https://www.31ppt.com/p-6344061.html