第三章常用Verilog语法之一课件_第1页
第三章常用Verilog语法之一课件_第2页
第三章常用Verilog语法之一课件_第3页
第三章常用Verilog语法之一课件_第4页
第三章常用Verilog语法之一课件_第5页
已阅读5页,还剩51页未读, 继续免费阅读

下载本文档

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

文档简介

第三章常用Verilog语法(一)周晓波北京交通大学电子信息学院xbzhou@516836367/10/20231内容提要3.1模块结构3.2数据类型7/10/202323.1模块结构Verilog的基本设计单元是“模块”(block)。一个模块是由两部分组成的:一)描述接口;二)描述逻辑功能,即定义输入是如何影响输出的。下面举例说明:7/10/202333.1模块结构端口定义I/O说明内部信号声明功能定义7/10/202343.1模块的结构Verilog模块的结构由在module和endmodule关键词之间的四个主要部分组成:-端口信息:moduleblock1(a,b,c,d);-输入/输出说明:inputa,b,c;outputd;-内部信号:wirex;-功能定义:assignd=a|x;assignx=(b&~c);endmodule

7/10/20235编写VerilogHDL模块的练习请在下面的空格中填入适当的符号使其成为右图的Verilog模块:moduleblock1(a,b,—,—,—);input—,—,—;——d,—;assignd=a|(b&~c);assigne=(b&~c);______abcde7/10/202363.1.1模块的端口定义模块的端口声明了模块的输入输出端口

module模块名(端口1,端口2,端口3,…);模块的端口表示的是模块的输入输出口名,与别的模块联系端口的标识。模块引用的问题

7/10/20239模块调用(引用)形式模块调用的基本形式为:模块名调用名(端口名表项)

由于描述的是具体的硬件逻辑,每个模块都表示一个具有特定功能的电路块。因此每当它被其它模块调用时,该模块内部被调用的电路块就被复制一次。如果在当前模块中多次调用同一个模块,则需要用不同的调用名。VerilogHDL的模块调用和C语言的函数调用相似,也存在形参和实参的结合问题。7/10/202310模块调用(引用)方式模块的调用方式可大致分为两种:位置关联调用方式、端口名关联调用方式。【例】模块调用的例子。moduleha(out1,out2,in1,in2);inputin1,in2;outputout1,out2;…...endmodule7/10/202311模块调用(引用)方式模块调用采用位置关联调用方式,只需按序列出实例的端口名。模块实例语句如下:hah1(P,Q,S,C);在本语句中,ha是模块名,h1是实例名称,并且端口按序关联。模块调用采用端口名关联调用方式,则无需按序排列端口名,但实例的端口信号和被调用模块的端口信号必须一一列出。模块实例语句如下:hah2(.in2(C),.in1(S),.out1(P),.out2(Q),)由于端口之间的对应关系十分清楚,因此端口名的排列顺序可随意改变。7/10/202312模块端口定义声明输入、输出或是双向声明数据类型(wireorreg)default:wire输入和双向不能声明为reg型测试模块不需要端口定义7/10/2023133.1.2模块内容I/O说明内部信号声明功能定义7/10/202314I/O说明的格式(1)输入口:input[信号位宽-1,0]端口名1;input[信号位宽-1,0]端口名2;……input[信号位宽-1,0]端口名i;输出口output[信号位宽-1,0]端口名1;output[信号位宽-1,0]端口名2;……output[信号位宽-1,0]端口名j;输入输出口inout[信号位宽-1,0]端口名1;inout[信号位宽-1,0]端口名2;……inout[信号位宽-1,0]端口名k;7/10/202315I/O说明的格式(2)可以在端口声明语句中同时进行端口类型说明modulemodule_name(inputport1,inputport2,…outputport1,outputport2…);7/10/202316内部信号说明对端口信号、节点信号必须进行数据类型的定义默认定义:wire类型 regcout;reg[3:0]out;wireA,B,C,D;7/10/202317功能定义在Verilog模块中有三种方法可以生成逻辑电路:-用assign语句:assigncs=(a0&~a1&~a2);-用元件的实例调用:and2and_inst(q,a,b);-用always块:always@(posedgeclkorposedgeclr)begin if(clr)q<=0; elseif(en)q<=d;end7/10/202318功能定义assign:描述组合逻辑最常用的方法之一always:组合逻辑时序逻辑“<=“一种赋值7/10/202319并发和顺序执行并发:Verilog模块中各子模块是并发执行过程块:always、initial元件例化assign顺序:always模块内部各个always块之间是并发关系7/10/202320要点小结Verilog模块中所有过程块、连续赋值语句、实例引用都是并行的;表示一种通过变量名互相连接的关系;同一模块中这三者出线的先后顺序没有关系;只有assign和实例引用语句可以独立于过程块出线在模块的功能定义部分。7/10/202321内容提要3.1模块结构3.2数据类型7/10/202322Verilog有三种主要的数据类型:Nets

表示器件之间的物理连接,称为网络连接类型Register表示抽象的储存单元,称为寄存器/变量类型Parameter

表示运行时的常数,称为参数类型主要的数据类型7/10/2023230、低、伪、逻辑低、地、VSS、负插入01XZ0bufbufbufbufif11、高、真、逻辑高、电源、VDD、正插入X、不确定:逻辑冲突无法确定其逻辑值HiZ、高阻抗、三态、无驱动源Verilog的四种逻辑值7/10/2023243.2.1常量值不改变的量数字整数二进制整数b或B十进制整数d或D十六进制整数h或H八进制整数o或O8‘b101000118’haa7/10/2023253.2.1常量x和zX:不定值Z:高阻值4’b10x08’h4z7/10/2023263.2.1常量负数-:放在数字定义表达式的最前面-8’d5下画线分割数的表达7/10/2023273.2.1常量参数parameterparameter参数名1=表达式,参数名2=表达式;表达式必须是常数表达式,只能包含数字或参数parameterbyte_size=8,byte_msb=byte_size-1;7/10/202328参数化设计参数化设计是电路设计的重要概念之一;参数化功能块只要在映射过程中赋予不同的参数,就可以得到不同的设计;参数化设计在IP产业中占有重要的位置;参数属性由其代表的参数属性决定7/10/202329参数传递举例moduledecode(A,F); parameterwidth=1,polarity=1;endmodulemoduletop; decode#(4,0)D1(A4,F16);decode#(5)D2(A5,F32);endmodule7/10/202330参数要点常用参数来声明运行时的常数。可用字符串表示的任何地方,都可以用定义的参数来代替。参数是本地的,其定义只在本模块内有效。7/10/202331举例说明:modulemd1(out,in1,in2);…..parametercycle=20,prop_del=3,setup=cycle/2-prop_del,p1=8,x_word=16’bx,file=“/user1/jmdong/design/mem_file.dat”;wire[p1:0]w1;//用参数来说明wire的位宽….initialbegin$open(file);…….#20000display(“%s”,file);$stopend….endmodule举例7/10/202332

举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…modmk(out,ina,inb);defparammk.cycle=6,mk.file=“../my_mem.dat”;…endmodule

参数值的改写(方法之一)

7/10/202333举例说明:modulemod(out,ina,inb);…parametercycle=8,real_constant=2.039,file=“/user1/jmdong/design/mem_file.dat”;…endmodulemoduletest;…mod#(5,3.20,“../my_mem.dat”)mk(out,ina,inb);…endmodule

参数值的改写(方法之二)7/10/2023343.2.2变量硬件描述语言中,变量的数据类型用来表示数字电路中的物理连线、数据存储和传输单元等物理量。7/10/2023353.2.2数据类型线网类型:表示结构化元件间的物理连线,综合后一般为连线节点网络(线网)数据类型表示结构实体之间的物理连接不能存储值,必须受到驱动值assign的驱动寄存器类型:抽象的数据存储单元只能在always和initial语句中被赋值,有可能被综合成寄存器7/10/202336Nets(网络连线):由模块或门驱动的连线。驱动端信号的改变会立刻传递到输出的连线上。例如:右图上,selb的改变,会自动地立刻影响或门的输出。netsabslselbselansloutNets线网类型7/10/202337连接(Nets)类型变量的种类:在为不同工艺的基本元件建立库模型的时候,常常需要用不同的连接类型来与之对应,使其行为与实际器件一致。常见的有以下几种。

类型功能wire,tri

对应于标准的互连线(缺省)supply1,supply2对应于电源线或接地线wor,trior对应于有多个驱动源的线或逻辑连接wand,triand对应于有多个驱动源的线与逻辑连接trireg对应于有电容存在能暂时存储电平的连接tri1,tri0对应于需要上拉或下拉的连接如果不明确地说明连接是何种类型,应该是指wire类型。Nets的种类7/10/202338Nets线网类型wire和tri线网:两者均为连线,tri用于描述多个驱动源同时驱动同一根线的线网类型,并无特殊意义wireA,B;wire[7:0]Data;tri[15:0]DataBus;Verilog数据类型的缺省值为1位wire7/10/202339wire型wire型数据通常用来表示以assign语句赋值的组合逻辑信号。模块的输入输出信号类型缺省定义为wireWire可以作为表达式输入,也可以作为assign语句或实例元件的输出。 wiredata1,data2,…,datan; wire[n-1:0]data1,data2,…,datan;7/10/202340寄存器(register)类型变量

register型变量能保持其值,直到它被赋于新的值。register型变量常用于行为建模,产生测试的激励信号。常用行为语句结构来给寄存器类型的变量赋值。abslselbselansloutreg_areg_selreg_bRegister7/10/202341寄存器(register)类型变量的数据类型

寄存器类型变量共有四种数据类型:类型功能.

reg无符号整数变量,可以选择不同的位宽。integer有符号整数变量,32位宽,算术运算可产生2的补码。real有符号的浮点数,双精度。time无符号整数变量,64位宽(Verilog-XL仿真工具用64位的正数来记录仿真时刻)Register的种类可综合7/10/202342reg型registertype表示一个抽象的数据存储单元,对应的是具有状态保持作用的电路元件(触发器、寄存器)只能在always语句和initial语句中被赋值,其值在两次赋值之间被保存,具有x的缺省值。在always,initial等过程块内,被赋值的每一个信号必须是寄存器型。regdata1,data2,…,datan; reg[n-1:0]data1,data2,…,datan;7/10/202343输入口(input)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输出口(output)可以由寄存器或网络连接驱动,但它本身只能驱动网络连接。输入/输出口(inout)只可以由网络连接驱动,但它本身只能驱动网络连接。如果信号变量是在过程块(initial块或always块)中被赋值的,必须把它声明为寄存器类型变量

如何选择正确的数据类型?7/10/202344举例说明数据类型的选择moduletop;wirey;rega,b;DUTu1(y,a,b);initialbegina=0;b=0;#10a=1;….endendmodule模块DUT的边界输入口输出口输出/入口netnetnet/registernetnet/registernetinoutmoduleDUT(Y,A,B_);outputY;inputA,B:wireY,A,B;and(Y,A,B);endmodule举例说明数据类型的选择7/10/202345

在过程块中对变量赋值时,忘了把它定义为寄存器类型(reg)或已把它定义为连接类型了(wire)把实例的输出连接出去时,把它定义为寄存器类型了把模块的输入信号定义为寄存器类型了。这是经常犯的三个错误!!!选择数据类型时常犯的错误

7/10/202346Verilog模块中的信号只有两种主要的信号类型:-寄存器类型:reg在always块中被赋值的信号,往往代表触发器,但不一定是触发器。-连线类型:wire用assign关键词指定的组合逻辑的信号或连线7/10/202347Verilog模块中的信号要点需要注意的是:-寄存器(reg)类型不一定是触发器。

-它只是在always块中赋值的信号。7/10/202348Verilog中reg与wire的不同点用寄存器(reg)类型变量生成组合逻辑举例:modulerw1(a,b,out1,out2);inputa,b;outputout1,out2;regout1;wireout2;assignout2=a;always@(b)out1<=~b;endmoduleaout2BUFFbINVout17/10/202349Verilog中reg与wire的不同点用寄存器(reg)类型变量生成触发器的例子:modulerw2(clk,d,out1,out2);inputclk,d;outputout1,out2;regout1;wireout2;assignout2=d&~out1;always@(posedgeclk)beginout1<=d;endendmoduledout2AND2i1clkout

温馨提示

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

评论

0/150

提交评论