EDA verilog程序设计语言数据类型综述_第1页
EDA verilog程序设计语言数据类型综述_第2页
EDA verilog程序设计语言数据类型综述_第3页
EDA verilog程序设计语言数据类型综述_第4页
EDA verilog程序设计语言数据类型综述_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

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

文档简介

1、程序设计语言数据类型综述学院:电信分院专业:10通信1班姓名:学号:20100210420110目录一、概述31、线网类型(net):32、寄存器类型(register):43、net、register和parameter的声明4net声明4register声明5parameter声明5二、主要数据类型详细介绍51、Wire型52、reg73、reg和wire的区别8三、选择正确的数据类型10举例11四、Verilog语言相关介绍12一、概述Verilog数据类型分为两大类:线网类型和寄存器类型。线网类型主要表示Verilog中结构化元件之间的物理连线,其数值由驱动元件决定。如果没有驱动元件接

2、到线网上,则其默认值为高阻z。寄存器类型主要表示数据的存储单元,其默认值为不定x。二者最大的区别在于:寄存器类型数据保持最后一次的赋值,而线网类型数据则需要持续的驱动。另外,还有一类参数,主要是运行时的常数。1、线网类型(net):wire:标准连线(默认为该类型);tri:具备高阻状态的标准连线;wor:线或类型驱动;trior:三态线或特性的连线;wand:线与类型驱动;triand:三态线与特性的连线;trireg:具有电荷保持特性的连线;tri1:上拉电阻(pullup);tri0:下拉电阻(pulldown);supply0:地线,逻辑0;supply1:电源线,逻辑1。注意,其中只

3、有wire、tri、supply0和supply1是可综合的,其余都是不可综合的,只能用于仿真。Verilog HDL程序模块中输入、输出信号类型默认为wire型。线网数据类型的通用说明语法为:net_kind msb:lsb net1,net2,;线网类型变量的赋值(也就是驱动)只能通过数据流assign操作来完成,不能用于always语句中。2、寄存器类型(register):reg:常用的寄存器型变量,用于行为描述中对寄存器类的说明,由过程赋值语句赋值;integer:32位带符号整型变量;time:64位无符号时间变量;real:64位浮点、双精度、带符号实型变量;realtime:其

4、特征和real型一致;reg的扩展类型-memory类型。3、net、register和parameter的声明net声明<net_type> range delay <net_name>, net_name; net_type: net类型 range: 矢量范围,以MSB:LSB格式 delay: 定义与net相关的延时 net_name: net名称,一次可定义多个net, 用逗号分开。举例: wand w; / 一个标量wand类型net tri 15: 0 bus; / 16位三态总线 wire 0: 31 w1, w2; / 两个32位wire,MSB为bi

5、t0 register声明 <reg_type> range <reg_name>, reg_name; reg_type:寄存器类型 range: 矢量范围,MSB:LSB格式。只对reg类型有效 reg_name :register名称,一次可定义多个register,逗号分开 举例: reg a; /一个标量register reg 3: 0 v; / 从MSB到LSB的4位寄存器向量 reg 7: 0 m, n; / 两个8位register parameter声明用参数声明一个可变常量,常用于定义延时及宽度等参数。 参数定义:parameter <lis

6、t_of_assignment> 可一次定义多个参数,用逗号隔开。 参数的定义是局部的,只在当前模块中有效。参数定义可使用以前定义的整数和实数参数二、主要数据类型详细介绍1、Wire型 wire属于net型数据类型,相当于硬件电路中的各种物理连接,其特点是输出值紧跟输入值的变化而变化,verilog里一般不声明输出类型的话 默认是wire型的。例如,wire cout=cin; /只要cin变化,cout就变化reg属于variable型数据类型,必须放在过程语句中,通过过程赋值语句赋值;在过程块内被赋值的信号也必须定义成variable型。也就是说,要在always和initial中赋

7、值的变量必须定义为variable型。有几种情况变量需要定义成wire。第一。assign 语句例如:reg a,b;wire and_result;.assign and_result =a&&b;第二。元件例化时候的输出必须用wire例如:wire dout;ram u_ram(.out(dout).);2、regreg型寄存器是数据储存单元的抽象。寄存器数据类型的关键字是reg.通过赋值语句可以改变寄存器储存的值,其作用与改变触发器储存的值相当。Verilog HDL语言提供了功能强大的结构语句使设计者能有效地控制是否执行这些赋值语句。这些控制结构用来描述硬件触发条件,例

8、如时钟的上升沿和多路器的选通信号。在行为模块介绍这一节中我们还要详细地介绍这些控制结构。reg类型数据的缺省初始值为不定值,x。reg型数据常用来表示用于“always”模块内的指定信号,常代表触发器。通常,在设计中要由“always”块通过使用行为描述语句来表达逻辑关系。在“always”块内被赋值的每一个信号都必须定义成reg型。reg型数据的格式如下:reg n-1:0 数据名1,数据名2, 数据名i;或reg n:1 数据名1,数据名2, 数据名i; reg是reg型数据的确认标识符,n-1:0和n:1代表该数据的位宽,即该数据有几位(bit)。最后跟着的是数据的名字。如果一次定义多个

9、数据,数据名之间用逗号隔开。声明语句的最后要用分号表示语句结束。看下面的几个例子: reg rega; /定义了一个一位的名为rega的reg型数据reg 3:0 regb; /定义了一个四位的名为regb的reg型数据reg 4:1 regc, regd; /定义了两个四位的名为regc和regd的reg型数据 对于reg型数据,其赋值语句的作用就象改变一组触发器的存储单元的值。在Verilog中有许多构造(construct)用来控制何时或是否执行这些赋值语句。这些控制构造可用来描述硬件触发器的各种具体情况,如触发条件用时钟的上升沿等,或用来描述具体判断逻辑的细节,如各种多路选择器。reg

10、型数据的缺省初始值是不定值。reg型数据可以赋正值,也可以赋负值。但当一个reg型数据是一个表达式中的操作数时,它的值被当作是无符号值,即正值。例如:当一个四位的寄存器用作表达式中的操作数时,如果开始寄存器被赋以值-1,则在表达式中进行运算时,其值被认为是+15。3、reg和wire的区别reg相当于存储单元,wire相当于物理连线Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻状态或浮空

11、量。线型数据包括wire,wand,wor等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法。两者的区别是:即存器型数据保持最后一次的赋值,而线型数据需要持续的驱动输入端口可以由net/reg驱动,但输入端口只能是net;输出端口可以使net/reg类型,输出端口只能驱动net;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。 wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。 不指定就默认为1位wire类型

12、。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。 在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个

13、条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。 输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。 简单来说硬件描述语言有两种用途:1、仿真,2、综合。对于wire和reg,也要从这两个角度来考虑。从仿真的角度来说:HDL语言面对的

14、是编译器(如Modelsim等),相当于软件思路。这时:wire对应于连续赋值,如assignreg对应于过程赋值,如always,initial从综合的角度来说:HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。这时:1、wire型的变量综合出来一般是一根导线;2、reg变量在always块中有两种情况:(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑。(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的综合出来一般是时序逻辑,会包含触发器(FlipFlop)。在设计中,输入信号一般来说你是

15、不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。三、选择正确的数据类型信号可以分为端口信号和内部信号。 出现在端口列表中的信号是端口信号,其它的信号为内部信号。 对于端口信号 输入端口、输入输出端口只能是net类型。 输出端口可以是net类型,也可以是register类型。若输出端口在过程块中赋值则为register类型;若在过程块外(包括实例化语句)赋值,则为net类型。 内

16、部信号类型与输出端口相同,可以是net或register类型。若在过程块中赋值,则为register类型;若在过程块外赋值,则为net类型。 一些错误:           用过程语句给一个net类型(或忘记声明类型)的信号赋值。          将实例的输入连接到register类型的信号上。         &#

17、160;将模块的输入信号声明为register类型。举例四、Verilog语言相关介绍Verilog是一种硬件描述语言(HDL:Hardware Discription Language),是一种一文本形式来描述数字系统硬件的结构和行为的语言,用它可以表示逻辑电路图、逻辑表达式,还可以表示数字逻辑系统所完成的逻辑功能。Verilog HDL和VHDL是目前世界上最流行的两种硬件描述语言,都是在20世纪80年代中期开发出来的。前者由Gateway Design Automation公司(该公司于1989年被Cadence公司收购)开发。两种HDL均为IEEE标准。设计人员通过计算机对HDL语言进

18、行逻辑仿真和逻辑综合,方便高效地设计数字电路及其产品。常用的Verilog HDL语言开发软件有Altera公司的MAX+PLUS II,Quartus II和Xilinx公司的Foundation ISE。Verlog HDL的发展历史1、1981年Gateway Automation(GDA)硬件描述语言公司成立。2、1983年该公司的Philip Moorby首创了Verilog HDL,Moorby后来成为Verrlog HDL-XL的主要设计者和Cadence公司的第一合伙人。3、1984-1985年Moorby设计出第一个关于Verilog HDL的仿真器。4、1986年Moorby对Verilog HDL的发展有做出另一个巨大的贡献,提出了用于快速门级仿真的XL算法。5、随着Verilog HDL-XL的成功,Verilog HDL语言得到迅速发展。6、1987年Synonsys公司开始使用Verilog HDL行为语言作为综合工具的输入。7、1989年Cadence公司收购了Gateway公司,Verilog HDL成为Cadence公司的私有财产。8、1990年初Cadence公司把Verilong HDL和Verilong

温馨提示

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

最新文档

评论

0/150

提交评论