第二三章Verilog语法的基本概念及常用Verilog语法之一_第1页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第2页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第3页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第4页
第二三章Verilog语法的基本概念及常用Verilog语法之一_第5页
已阅读5页,还剩51页未读 继续免费阅读

下载本文档

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

文档简介

第二章Verilog语法的基本概念VerilogHDL是一种用于数字系统设计的语言。用VerilogHDL描述的电路设计就是该电路的VerilogHDL模型(模块)。Verilog模型可以是实际电路的不同级别的抽象。行为描述:系统级、算法级、RTL级结构描述:门级、开关级2/4/20231Verilog的应用系统级(system):用高级语言结构实现设计模块的外部性能的模型。算法级(algorithmic):用高级语言结构实现设计算法的模型。RTL级(RegisterTransferLevel):描述数据在寄存器之间流动和如何处理这些数据的模型。门级(gate-level):描述逻辑门以及逻辑门之间的连接的模型。开关级(switch-level):描述器件中三极管和储存节点以及它们之间连接的模型。行为级描述modulemuxtwo(out,a,b,sl);input

a,b,sl;output

out;

regout;

always@(sloraorb)

if(!sl)out=a;

elseout=b;endmoduleabslout门级描述modulemuxtwo(out,a,b,sl);input

a,b,sl;output

out;

notu1(ns1,sl);and#1u2(sela,a,nsl);

and#1u3(selb,b,sl);

or#2u4(out,sela,selb);endmoduleoutabslselbselanslu2u3

u4

u1RTL级描述modulemuxtwo(out,a,b,sl,clk);input

a,b,sl;output

out;

regout,s;

always@(posedgeclk) out<=s;

always@(sloraorb)

if(!sl)s=a;

elses=b;endmoduleabsloutclk行为级和RTL级RTL模块的数据流动必须基于时钟。RTL模块在每个时钟的沿时刻,其变量的值必定是精确的。RTL模块是可综合的,它是行为模块的一个子集合。该行为描述并没有说明如果输入a或b是三态的(高阻时)输出应该是什么,但有实际电路是有一定的输出的。abslout简单的VerilogHDL模块例:moduleadder(count,sum,a,b,cin);

input[2:0]a,b;

inputcin;

outputcount;

output[2:0]sum;

assign{count,sum}=a+b+cin;

endmodule

简单的VerilogHDL模块modulecompare(equal,a,b);outputequal;//声明输出信号equalinput[1:0]a,b;//声明输入信号a,b

assignequal=(a==b)?1:0;

/*如果两个输入信号相等,输出为1。否则为0*/endmodule/*........*/和//.........表示注释部分一个复杂电路的完整VerilogHDL模型是由若个VerilogHDL模块构成的,每一个模块又可以由若干个子模块构成。

利用VerilogHDL语言结构所提供的这种功能就可以构造一个模块间的清晰层次结构来描述极其复杂的大型设计。VerilogHDL行为描述语言作为一种结构化和过程性的语言,其语法结构非常适合于算法级和RTL级的模型设计。这种行为描述语言具有以下八项功能:Verilog的应用可描述顺序执行或并行执行的程序结构。用延迟表达式或事件表达式来明确地控制过程的启动时间。通过命名的事件来触发其它过程里的激活行为或停止行为。提供了条件、if-else、case、循环程序结构。提供了可带参数且非零延续时间的任务(task)程序结构。提供了可定义新的操作符的函数结构(function)。Verilog的应用提供了用于建立表达式的算术运算符、逻辑运算符、位运算符。VerilogHDL语言作为一种结构化的语言也非常适合于门级和开关级的模型设计。VerilogHDL的构造性语句可以精确地建立信号的模型。这是因为在VerilogHDL中,提供了延迟和输出强度的原语来建立精确程度很高的信号模型。信号值可以有不同的的强度,可以通过设定宽范围的模糊值来降低不确定条件的影响。Verilog的应用第三章常用Verilog语法之一模块结构数据类型变量、基本的运算符号2/4/202314模块的结构Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的:描述接口;描述逻辑功能,即定义输入是如何影响输出的。从上面的例子可以看出:-Verilog模块结构完全嵌在module和endmodule声明语句之间;每个Verilog程序包括四个主要部分:端口定义I/O说明内部信号声明功能定义模块的结构模块的端口定义module模块名(口1,口2,口3,…

)模块的端口表示的是模块的输入输出口名,它与别的模块联系端口的标识。2/4/202317modulecompare(equal,a,b);

。。。。endmodule模块内容输入口:input[信号位宽-1:0]端口名1;input[信号位宽-1:0]端口名2;输出口:output[信号位宽-1:0]端口名1;output[信号位宽-1:0]端口名2;输入/输出口: inout[信号位宽-1:0]端口名1;inout[信号位宽-1:0]端口名2;2/4/202318I/O说明I/O说明也可以写在端口声明语句里modulemodule_name(inputport1,…,outputport1,….)

2/4/202319模块内容I/O说明模块内容模块内部用到的与端口有关的wire和reg类型变量的声明reg[width-1:0]R1,R2;wire[width-1:0]W1,W2;

2/4/202320内部信号声明模块内容功能定义:定义逻辑功能

用assign声明语句 assigna=b&c;

用实例元件 and#2ul(q,a,b);ul为与门,输入a,b,输出q,输出延迟2个时间单位2/4/202321模块内容功能定义:定义逻辑功能用always块(过程块,proceduralblock)always@(posedgeclkorposedgeclr)beginif(clr)q<=0;elseif(en)q<=d;end;2/4/202322模块内容功能定义:定义逻辑功能assign语句是描述组合逻辑常用方法;always可用于描述组合逻辑和时序逻辑;assign,always,实例化描述的逻辑功能是同时(并行)执行;在always模块内,逻辑是顺序执行的。但是不同的always模块式并行执行的。2/4/202323modulemu1(a,q,q2,b,c);inputb,c;outputq,q2,a;

assigna=b&c;

and#2ul(q,c,b);

always@(b,c)beginq2<=b&c;end;

endmodule模块的引用严格按照模块定义的端口顺序来连接,不用标明原模块定义时的端口名:

模块名(连接端口1信号名,连接端口2信号名,….)在引用时用“.”符号,标明原模块定义时规定的端口名.模块名(.端口1名(连接信号1名),.端口2名(连接信号2名,….)2/4/202325要点总结Verilog模块中所有过程块(如initial,always)、连续赋值语句、实例引用都是并行的;它们表示的是一种通过变量名互相连接的关系;

在同一模块中这三者出现的先后顺序没有关系;只有连续赋值语句和实例引用语句可以独立于过程块(always,initial)而存在于模块的功能定义部分。2/4/2023263.2数据类型及其常量和变量VerilogHDL中总共有19种数据类型。数据类型是表示数字电路中的数据存储和传送元素的。2/4/202329常量数字——整数

二进制(b,B),十进制(d,D),十六进制(h,H),八进制(o,O)表示方法:<位宽>’<进制><数字>

<进制><数字>,默认32位

<数字>,默认32位,十进制8’b10101100,8’ha2,2/4/202330常量数字——x和z

x——不定值;z——高阻值,也可用?表示4’b10x0,4’b101z,12’dz,12’d?,8’h4x2/4/202331常量数字——负数在数字表达式的前面加‘-’-8’d52/4/202332常量数字——下划线(underscore_)用来分割数的表达以提高程序可读性,但不可以用在位宽和进制处,只能用在具体的数字之间16’b1010_1011_1111_10102/4/202333常量当常量不说明位数时,默认值是32位,10=32’d10,-1=-32’d1=32’hFFFF_FFFF

’BX=32’BX=32’BXXXX…X每个字母用8位的ASCII值表示

“AB”=16’B01000001_010000102/4/202334参数型(parameter)常量可以用parameter来定义常量,即用parameter定义一个标识符代表一个常量,称为符号常量,即标识符形式的常量parameter参数名1=表达式,参数名2=表达式;

注意:表达式必须是常数表达式,只能包含数字或先前已定义过的参数parametermsb=7,e=25;parameterbyte_size=8,byte_msb=byte_size-1;2/4/202335参数型(parameter)参数型常数用来定义延迟时间和变量宽度。在模块或实例引用时,可通过参数传递改变在被引用模块或者实例中已定义的参数。2/4/202336参数型(parameter)例:moduleDecode(A,F);parameterWidth=1,Polarity=1;

……endmodulemoduleTopwire[3:0]A4;wire[15:0]F16;Decode#(4,0)D1(A4,F16);Decode#(5)

D2(A4,F16);endmodule2/4/202337变量在程序运行过程中其值可以改变的量。变量数据类型(variabledatatype),用来暂存数据,在过程中被赋值的变量。可在initialprocedure,alwaysprocedure,task,function中被赋值。未被初始化时,默认值为X。默认为unsigned类型,除非指定为signed类型。默认位宽为1bit。变量网络数据类型(netdatatype)表示结构实体之间的物理连接,不能储存值,而且必须受到驱动器的驱动。如果没有驱动器连接到网络类型的变量上,则该变量就是高阻值z。Wire:表示单个门驱动或者连续赋值语句驱动的网络类型数据。Tri:表示多驱动源(器)驱动的网络类型数据。变量Wire:常用来表示以assign关键字指定的组合逻辑信号。Verilog中输入、输出信号类型默认时自动定义为wire型。Wire信号可以用作任何方程式的输入可用作assign语句或实例元件的输出。

wire[n-1:0]b,a;定义了两条总线b、a,每条总线宽度为nbits;变量reg型:寄存器数据类型,默认初始值为不定值x。reg型数据常用来表示always模块内的指定信号,代表触发器。在always内被赋值的每一个信号都必须定义成reg型。

reg[n-1:0]数据名1,数据名2;

reg[n:1]数据名1,数据名2;reg[3:0]regb;reg[4:1]regc,regd;变量reg型数据,其赋值语句的作用就如同改变一组触发器的存储单元的值;reg型数据的默认值是x,reg型数据可以赋正值、负值,若为表达式的操作数,其值被当作是无符号值。

reg只表示被定义的信号将用在always块内。memory型:Verilog通过对reg型变量建立数组来对存储器建模,RAM型存储器ROM存储器reg文件。Memory型数据通过扩展reg型数据的地址范围来生成。

reg[n-1:0]存储器名[m-1:0];

reg[n-1:0]存储器名[m:1];reg[7:0]mema[255:0];变量对存储器进行地址索引的表达式必须为常数表达式,m必须为常数在同一个数据类型声明语句里,可以同时定义存储器型数据和reg型数据。

parameterwordsize=16,memsize=256;reg[wordsize-1:0]mem[memsize-1:0],writereg,readreg;变量注意memory型数据与reg型数据的不同

reg[n-1:0]rega;定义一个n位的寄存器,regmema[n-1:0];定义一个由n个1位寄存器构成的存储器组。

rega=0;合法

mema=0;错误

mema[2]=0;正确变量3.3运算符及表达式按功能分类:算术运算符(+,-,x,/,%);位运算符(~,&,|,^,^~);逻辑运算符(&&,||,!);关系运算符(>,<,>=,<=);移位运算符(<<,>>);拼接运算符({});条件运算符(?:);赋值运算符(=,<=);

3.3运算符及表达式按运算符所带的操作数不同:

单目运算符(unaryoperator):可以带一个操作数,操作数放在运算符的右边;

双目运算符(binaryoperator):可以带两个操作数,操作数放在运算符的两边;三目运

温馨提示

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

评论

0/150

提交评论