设计示例一•用门级结构描述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设计示例二•由已设计的模块来构成高一级的模块clrdqclkclrdqclkclrdqclkq0d0clrdqclkd3d2q2q3q1d1clrbclkf4f3f2f1四位寄存器电路结构图设计示例二`include“flop.v”modulehardreg(d,clk,clrb,q);inputclk,clrb;input[3:0]d;output[3:0]q;flopf1(d[0],clk,clrb,q[0],),f2(d[1],clk,clrb,q[1],),f3(d[2],clk,clrb,q[2],),f4(d[3],clk,clrb,q[3],);endmodule设计示例三•编写测试模块通过仿真检查设计正确与否:`include“hardreg.v”modulehardreg_top;regclock,clearb;reg[3:0]data;wire[3:0]qout;`definestim#100data=4'b//宏定义stim,可使源程序简洁eventend_first_pass;//定义事件end_first_pass设计示例三(续)hardregreg_4bit(.d(data),.clk(clock),.clrb(clearb),.q(qout));/*---------------------------------------------------把本模块中产生的测试信号data、clock、clearb输入实例reg_4bit以观察输出信号qout.实例reg_4bit引用了hardreg---------------------------------------------------*/initialbeginclock=0;clearb=1;endalways#50clock=~clock;设计示例三(续)/*-------------------------------------------------宏定义stim引用,等同于#100data=4'b注意引用时要用`符号。--------------------------------------*/`stim0000;`stim0001;......`stim1111;end#200-end_first_pass;/*-------------------------------------------------延迟200个单位时间,触发事件end_first_pass-------------------------------------------------*/$finish;//结束仿真endendmoduleVerilogHDL设计示例四•有限状态机的设计-有限状态机是由寄存器组和组合逻辑构成的硬件时序电路;-其状态(即由寄存器组的1和0的组合状态所构成的有限个状态)只能在同一时钟跳变沿的情况下才能从一个状态转向另一个状态;-究竟转向哪一状态不但取决于各个输入值,还取决于当前状态。-状态机可用于产生在时钟跳变沿时刻开关的复杂的控制逻辑,是数字逻辑的控制核心。设计示例四(续) !Reset/F=0G=0IdleStartStopClearA/G=0!AA/F=1!Reset/F=0G=0!Reset/F=0G=0!Reset|!A/F=0G=1设计示例四(续)modulefsm(Clock,Reset,A,F,G);inputClock,Reset,A;outputF,G;regF,G;reg[1:0]state;parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;always@(posedgeClock)if(!Reset)beginstate=Idle;F=0;G=0;endelse设计示例四(续)case(state)idle:beginif(A)state=Start;G=0;endstart:if(!A)state=Stop;Stop:beginif(A)state=Clear;F=1;endClear:beginif(!A)state=Idle;F=0;G=1;endendcaseendmodule设计示例四(续)还可以用另一个VerilogHDL模型来表示同一个有限状态,见下例:modulefsm(Clock,Reset,A,F,G);inputClock,Reset,A;outputF,G;regF,G;reg[3:0]state;parameterIdle=4’b1000,Start=4’b0100,Stop=4’b0010,Clear=4’b0001;设计示例四(续)always@(posedgeclock)if(!Reset)beginstate=Idle;F=0;G=0;endelsecase(state)Idle:beginif(A)state=Start;G=0;endStart:if(!A)state=Stop;Stop:beginif(A)state=Clear;设计示例四(续)F=1;endClear:beginif(!A)state=Idle;F=0;G=1;enddefault:state=Idle;endcaseendmodule设计示例四(续)我们还可以用另一种风格的VerilogHDL模型来表示同一个有限状态。在这个模型中,我们把用always语句在时钟沿触发条件下的状态变化放在一个独立的块中,而把在状态控制下的两个开关分两个独立的组合逻辑always块来描述。见下例:modulefsm(Clock,Reset,A,F,G);inputClock,Reset,A;outputF,G;reg[1:0]state;regF,G;parameterIdle=2’b00,Start=2’b01,Stop=2’b10,Clear=2’b11;设计示例四(续)always@(posedgeClock)if(!Reset)beginstate=Idle;endelsecase(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@(stateorResetorA)beginif(!Reset)F=0;elseif(state==Stop)F=1;endalways@(stateorResetorA)beginif(!Reset)G=0;elseif(state==Clear)G=1;endendmoduleVerilogHDL基础语法入门第一部分课程简介•目的:•简单介绍VerilogHDL语言和仿真工具•介绍讲课计划•介绍如何不断地学习新的有关知识讲座中关于VerilogHDL的主要内容讲课内容主要包括:Verilog的应用Verilog语言的组成部件结构级的建模与仿真行为级的建模与仿真延迟参数的表示Verilog的测试平台:怎样产生激励信号和控制信号输出响应的产生、记录和验证任务和函数用户定义的元器件(primitives)可综合风格的Verilog建模讲座中关于Verilog仿真工具的主要内容讲课内容主要包括:如何对所做的设计进行编译和仿真如何使用元器件库如何用Verilog-XL命令行界面调试代码如何用图形用户界面(GUI)延迟的计算和标记仿真性能建模循环多次仿真目的:了解用HDL语言设计数字逻辑的优点了解Verilog主要应用领域了解Verilog的发展历史了解电路系统的不同层次的Verilog抽象第二部分:Verilog的应用VerilogHDL是一种用于数字逻辑电路设计的语言:-用VerilogHDL描述的电路设计就是该电路的VerilogHDL模型。-VerilogHDL既是一种行为描述的语言也是一种结构描述的语言。这也就是说,既可以用电路的功能描述也可以用元器件和它们之间的连接来建立所设计电路的VerilogHDL模型。Verilog模型可以是实际电路的不同级别的抽象。这些抽象的级别和它们对应的模型类型共有以下五种:Verilog的应用Verilog的应用•系统级(system):用高级语言结构实现设计模块的外部性能的模•算法级(algorithmic):用高级语言结构实现设计算法的模型。•RTL级(RegisterTransferLevel):描述数据在寄存器之间流动和如何处理这些数据的模型。•门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。•开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。Verilog的应用一个复杂电路的完整VerilogHDL模型是由若个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。利用VerilogHDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计。VerilogHDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下八项功能:Verilog的应用•可描述顺序执行或并行执行的程序结构。•用延迟表达式或事件表达式来明确地控制过程的启动时间。•通过命名的事件来触发其它过程里的激活行为或停止行为。•提供了条件、if-else、case、循环程序结构。•提供了可带参数且非零延续时间的任务(task)程序结构。•提供了可定义新的操作符的函数结构(function)。Verilog的应用提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。VerilogHDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。VerilogHDL的构造性语句可以精确地建立信号的模型。这是因为在VerilogHDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。Verilog的应用VerilogHDL作为一种高级的硬件描述编程语言,有着类似C语言的风格。其中有许多语句如:if语句、case语句等和C语言中的对应语句十分相似。如果读者已经掌握C语言编程的基础,那么学习VerilogHDL并不困难,我们只要对VerilogHDL某些语句的特殊方面着重理解,并加强上机练习就能很好地掌握它,利用它的强大功能来设计复杂的数字逻辑电路。下面我们将对VerilogHDL中的基本语法逐一加以介绍。模块的抽象技术指标:用文字表示用算法表示用高级行为的Verilog模块表示RTL/功能级:用可综合的Verilog模块表示门级/结构级:用实例引用的Verilog模块表示版图布局/物理级:用几何形状来表示行为综合逻辑综合综合前仿真综合后仿真布局布线第三部分.简单的VerilogHDL模块目的:通过简单的例子了解Verilog模块的基本构成了解Verilog模块的层次结构和行为模块了解Verilog模块的测试简单的VerilogHDL模块下面先介绍几个简单的VerilogHDL程序,然后从中