第八章可编程逻辑器件verilog语言简介_第1页
第八章可编程逻辑器件verilog语言简介_第2页
第八章可编程逻辑器件verilog语言简介_第3页
第八章可编程逻辑器件verilog语言简介_第4页
第八章可编程逻辑器件verilog语言简介_第5页
已阅读5页,还剩58页未读 继续免费阅读

下载本文档

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

文档简介

基于VerilogHDL的

硬件描述语言简介刘杰惠wljh@2012年5月25日目录什么是VerilogHDLVerilogHDL语法设计描述层次组合逻辑和时序逻辑设计测试和验证可综合的设计设计注意事项什么是VerilogHDLVerilogHDL是一种硬件描述语言

用于数字系统的设计各种级别的逻辑设计:

算法级、结构级、门级到开关级的多种抽

象设计层次的数字系统建模;

被建模的数字系统对象的复杂性可以介于

简单的门和完整的复杂电子数字系统之间

(例如

CPU)什么是VerilogHDL进行数字逻辑系统的仿真验证、时序分析、逻辑综合特点:

从C语言继承了多种操作符和结构

应用广泛

比VHDL更简洁、灵活

语法类似C,但思想不同,着眼于电路VerilogHDL的历史1983年GatewayDesignAutomation公司在C语言的基础上,为其仿真器产品Verilog-XL开发了一种专用硬件描述语言——VerilogHDL硬件描述语言的设计优点电路的逻辑功能容易理解;便于计算机对逻辑进行分析处理;把逻辑设计与具体电路的实现分成两个独立的阶段来操作;逻辑设计与实现的工艺无关;逻辑设计的资源积累可以重复利用;可以由多人共同更好更快地设计非常复杂的逻辑电路(几十万门以上的逻辑系统)。硬件描述语言的设计优点VerilogHDL较多的第三方工具的支持语法结构比VHDL简单学习起来比VHDL容易仿真工具比较好使测试激励模块容易编写硬件描述语言的设计优点VHDL比VerilogHDL早几年成为IEEE标准;语法/结构比较严格,因而编写出的模块风格比较清晰;比较适合由较多的设计人员合作完成的特大型项目(一百万门以上)。

VerilogHDL的结构模块(Module)-可对应各种规模电路模块VerilogHDL的结构VerilogHDL的结构VerilogHDL语法模块数据类型及常量、变量运算符与表达式条件与循环语句结构说明语句模块(module)Verilog

基本设计单元:一个电路模块/一种逻辑功能基本元素:接口,逻辑功能命名:字母,数字,$,_,区分大小写 第一个必须为:字母/_

模块(module)Verilog模块的结构由在module和endmodule关键词之间的四个主要部分组成:端口信息:

moduleblock1(a,b,c,d);输入/输出说明:

inputa,b,c;

outputd;内部信号:

wirex;功能定义:

assignd=a|x;

assignx=(b&~c);

endmodule模块(module)请在下面的空格中填入适当的符号使其成为右图的Verilog模块:moduleblock1(a,b,—,—,—);

input—,—,—;

——d,—;

assignd=a|(b&~c);

assigne=(b&~c);_______abcde模块(module)请在下面的空格中填入适当的符号使其成为右图的Verilog模块:moduleblock1(a,b,c,d,e);inputa,b,c;

outputd,e;assignd=a|(b&~c);assigne=(b&~c);endmoduleabcde模块(module)模块实例化模块名称实例化名称(.接口名称(信号名称),…);若接口按顺序排列,可以省略接口名称数据类型及其常量变量VerilogHDL有下列四种基本的值:0:逻辑0或假1:逻辑1或真X:未知z:高阻x,z值不区分大小写z也可以用?表示数据类型及其常量变量VerilogHDL中有三类常量:整型: 缺省十进制:1,-2 基数表示:<位宽>’<进制><数字>b/B,o/O,d/D,h/H 4’b0101,8’h42,-8’d5实数型:1.234,-56.78,3.6e4 字符串型:双引号内,每个字母用8位的ASCII值表示。 如“verilog!!”看作9个8位无符号整数反斜杠(\)用于定义特殊转义字符,例如\n,\t。下划线(_)可以用来分隔数的表达式以提高易读性;但不能用于位宽和进制处。 例如:32’b0010_1101_1110_1111==32’b0010110111101111数据类型及其常量变量VerilogHDL

变量最主要的数据类型:线网类型(nettype): 表示Verilog结构化元件间的物理连线。它的值由驱动元件的值决定,例如连续赋值或门的输出。如果没有驱动元件连接到线网,线网的缺省值为z。 类型:wire,wor,wand,tri1,tri0,supply1,supply0

寄存器类型(registertype) 表示一个抽象的数据存储单元,它只能在always语句和initial语句中被赋值,并且它的值从一个赋值到另一个赋值过程中被保存下来。寄存器类型缺省值为x。 类型:reg,integer,real,time

数据类型及其常量变量wire型变量格式 wire[n-1:0]name1,name2,…,namen;举例 wirerdy,finish;//2个1位的连线 wire[3:0]result;//1个4位的连线可用作任何方程式的输入,也可用作assign语句和元件的输出。 例如:assignresult=a+b;数据类型及其常量变量reg型变量格式 reg[n-1:0]name1,name2,…,namen;举例

regrdy,finish;//2个1位寄存器 reg[3:0]result;//1个4位寄存器 reg[3:0]mem[63:0];//64个4位寄存器组,可表示存储器可取任意一位: result[2]表示4位寄存器的次高位; mem[2]表示一个4位寄存器; mem[2][1:0]表示一个4位寄存器中的低2位。数据类型及其常量变量需要注意的是:

寄存器(reg)类型不一定是触发器,它只是在always块中赋值的信号。

用寄存器(reg)类型变量生成组合逻辑举例:

modulerw1(a,b,out1,out2);Input

a,b;output

out1,out2;reg

out1;wire

out2;assignout2=a;always@(b)out1<=~b;endmoduleaout2BUFFERbINVout1运算符与表达式算术运算符:+,-,*,/,%赋值运算符:=,<=关系运算符:>,<,>=,<=相等运算符:==,!=,===,!==逻辑运算符:&&,||,!位运算符:~,&,|,Λ,~Λ,Λ~移位运算符:<<,>>条件运算符:?:assignresult=exp?exp1:exp2;连接和复制操作符:{}assign{cout,sum}=a+b+cin;运算符与表达式表达式:操作数+运算符分类:单目运算符:带一个操作数如~clock双目运算符:带两个操作数如a&b三目运算符:带三个操作数如r=s?a:b优先级:

!~>*/%>+-><<>>>>,<,>=,<=>==!====!==>&>Λ

>|>&&>||>?:块语句两条或多条语句的组合,主要有两种:begin_end语句:顺序块块内的语句顺序执行;每条语句的延时为相对于前一语句;最后一句执行完,才能跳出该块。fork_join语句:并行块块内语句同时执行;每条语句的延时为相对进入块仿真时间。条件与循环语句ifelse语句If(表达式)语句;[elseif(表达式)语句;][else语句;]多个语句须放在beginend间case语句:多分支选择语句case(表达式)case1,case2分支:语句;default:语句;endcase条件与循环语句forever连续执行,常用于产生时钟信号如:timescale1ns/100ps forever#5clk=~clk;//产生100MHz的时钟while执行语句,直到某个条件不满足 While(表达式)

begin语句;end

若开始即不满足条件,则不执行

repeat连续执行语句n次 repeat(表达式)

begin语句;end

在此表达式通常为常量表达式条件与循环语句forfor(表达式1;表达式2;表达式3)语句;例:for(i=0;i<4;i=i+1)a[i]<=b[i];执行过程:(1)求解表达式1;(2)求解表达式2, 若为真,则执行语句,转到(3); 若为假,结束循环,转到(5);(3)若表达式2为真,执行语句后,求解表达式3;(4)转回(2)继续;(5)执行for语句后面的语句。结构说明语句initial仿真开始时对各变量初始化生成激励波形作为电路测试信号只执行一次程序模块中可有多个,并行执行alwaysalways@(触发条件)begin语句;end

若触发条件满足,则被执行,满足一次执行一次可有多个always块,并行执行结构说明语句function返回一个用于表达式的值调用:将函数作为表达式中的操作数实现

word={getbyte(a),getbyte(b)};规则:不能包含时间控制语句,不能启动任务,至少有一个输入,必须存在给与函数名同名变量赋值语句。结构说明语句task支持多种目的,可计算多个结果值调用: my_task(v,w,x,y,z);特点: 可定义自己的仿真时间单位 可以启动其他task和function阻塞赋值与非阻塞赋值非阻塞赋值如:b<=a块结束后才完成赋值操作b的值并不是立刻改变常用于沿触发的always块阻塞赋值如:b=a赋值语句执行完后,块才结束b的值在赋值语句执行后立刻改变常用于组合逻辑的赋值设计描述层次VerilogHDL既是一种行为描述语言,也是一种结构描述语言。也就是说,既可以用电路的逻辑功能描述,也可以用元器件和它们之间的连接来建立所设计电路的VerilogHDL模型。例:MUX的行为描述modulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;

Regout;always@(sloraorb)if(!sl)out=a;

elseout=b;endmoduleabslout设计描述层次MUX的结构描述modulemuxtwo(out,a,b,sl);inputa,b,sl;outputout;

notu1(ns1,sl);and#1u2(sela,a,nsl);and#1u3(selb,b,sl);or#2u4(out,sela,selb);endmoduleabslselbselanslout设计描述层次VerilogHDL语言本身提供了各种层次抽象的表述,可以用详细程度有很大差别的的多层次模块组合来描述一个电路系统。行为级:技术指标和算法的Verilog描述,有关行为和技术指标模块,容易理解RTL级:逻辑功能的Verilog描述,有关逻辑执行步骤的模块,较难理解门级:逻辑结构的Verilog描述,有关逻辑门以及逻辑门之间的连接关系的模块,很难理解开关级:具体的晶体管物理器件的描述,有关物理形状和布局参数的模块,非常难理解设计描述层次算法(行为)级描述结构级描述寄存器传输级(RTL)描述开关级(门级)描述混合层次描述设计描述层次算法级描述(行为级描述)主要用于快速验证算法的正确性不一定可以综合成实际电路结构设计描述层次结构级描述电路的层次化描述类似于电路框图使用两个半加器构造的全加器设计描述层次RTL描述更贴近实际电路结构的描述描述的细节到寄存器内容传输级别可以精确描述电路的工作原理、执行顺序细化到寄存器级别的结构描述也就是RTL级描述,并无绝对划分标准设计描述层次开关级(门级)描述完整描述了电路的细节最底层的电路描述可以描述MOS管设计描述层次混合层次描述以上各种层次描述方式可以任意混合使用,因此一个设计可能某些模块使用了行为描述的方式,而另外一些模块使用了开关级描述。在实际设计中,功能复杂的模块可以先用行为级或结构级的描述来表示,而对功能简单的模块则使用RTL级的描述,以尽早完成系统的仿真和算法的验证;在设计的过程中逐步细化复杂模块,替代原来的行为描述,直至设计可以综合并满足设计指标。组合逻辑电路组合逻辑:输出只是当前输入逻辑电平的函数,与电路的原始状态无关的逻辑电路。组合逻辑由与、或、非门组成的网络,如:多路器、比较器、加法器、乘法器等描述方式:assign语句&|~操作符and,or,not门组合组合逻辑电路加法器Assign和操作符描述 基本门组合时序逻辑电路时序逻辑:输出不只是当前输入的逻辑电平的函数,还与电路目前所处的状态有关的逻辑电路。由多个触发器和多个组合逻辑块组成,如计数器、同步有限状态机、移位寄存器等描述方式:always@(posedgeclk)非阻塞赋值<=触发器和组合电路连接有限状态机状态机是绝大部分控制电路的核心结构。有限状态机可以使用always语句和case语句描述。状态保存于寄存器中,根据寄存器中不同的取值(状态)执行不同的操作,case语句的多个分支则代表了不同状态的行为。Moore有限状态机:输出仅依赖于内部状态,跟输入无关。Mealy有限状态机:输出不仅决定于内部状态,还跟外部输入有关有限状态机有限状态机Moore机描述有限状态机Mealy机描述设计测试与验证一般需要编写测试文件对设计进行仿真测试,称为testbench。testbench一般采用行为级描述,产生一定的输入激励,得到设计的输出响应,并检查输出结果的正确性。在规范的模块设计中,每一个模块都需要编写独立的测试文件对模块进行充分的测试。注意选择合适的输入激励,保证测试能够覆盖典型输入和特殊输入。设计测试与验证计数器例子系统函数和任务Verilog提供一些封装的任务或函数,以标识符$确认$display,$monitor$time,$realtime$printtimescale$stop,$finish$fopen,$fclose$fdispay,$fwrite$readmemb,$readmemh$Random例如:

$display(“Helloworld!”);//打印输出Helloworld! $time//该系统任务返回当前的模拟时间

可综合的设计综合:通过工具把用VerilogHDL描述的模块自动转换为用门级电路网表表示的模块的过程。可综合:由综合工具将设计转换为门级电路可综合成电路的只是Verilog语法的一个子集可综合的基本原则:每部分代码都映射成相应的电路有经验的工程师设计代码时已经知道基本电路结构人往往比综合器更聪明

可综合的设计可综合的语法举例and,or,nand等基本逻辑门if块和case块+,-,*,&,|,Λ,~等运算符&&,||,!,

==,!=,>,<,>=,<=等运算符>>,<<,&,|,{}等运算符

=,<=,assign等赋值语句always块可综合的设计不可综合的语法举例initial块forever块for,while,repeat,force,release,task,enable,disable一般不可综合(某些特

温馨提示

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

评论

0/150

提交评论