`

verilog中reg和wire类型的区别和用法

    博客分类:
  • FPGA
 
阅读更多

reg相当于存储单元,wire相当于物理连线

Verilog 中变量的物理数据分为线型和寄存器型。这两种类型的变量在定义时要设置位宽,缺省为1位。变量的每一位可以是0,1,X,Z。其中x代表一个未被预置初始状态的变量或者是由于由两个或多个驱动装置试图将之设定为不同的值而引起的冲突型线型变量。z代表高阻状态或浮空量。

线型数据包括wire,wand,wor等几种类型在被一个以上激励源驱动时,不同的线型数据有各自决定其最终值的分辨办法。

两者的区别是:即存器型数据保持最后一次的赋值,而线型数据需要持续的驱动

输入端口可以由net/reg驱动,但输入端口只能是net;输出端口可以使net/reg类型,输出端口只能驱动net;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型
用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。

***************************************************************************************************************************************************

    wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。

        不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。

        在连续赋值语句中,表达式右侧的计算结果可以立即更新表达式的左侧。在理解上,相当于一个逻辑之后直接连了一条线,这个逻辑对应于表达式的右侧,而这条线就对应于wire。在过程赋值语句中,表达式右侧的计算结果在某种条件的触发下放到一个变量当中,而这个变量可以声明成reg类型的。根据触发条件的不同,过程赋值语句可以建模不同的硬件结构:如果这个条件是时钟的上升沿或下降沿,那么这个硬件模型就是一个触发器;如果这个条件是某一信号的高电平或低电平,那么这个硬件模型就是一个锁存器;如果这个条件是赋值语句右侧任意操作数的变化,那么这个硬件模型就是一个组合逻辑。

        输入端口可以由wire/reg驱动,但输入端口只能是wire;输出端口可以使wire/reg类型,输出端口只能驱动wire;若输出端口在过程块中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为reg类型,只能是wire类型;输入和双向端口不能声明为寄存器类型。

       简单来说硬件描述语言有两种用途:1、仿真,2、综合。

对于wire和reg,也要从这两个角度来考虑。

*********************************************************************************
从仿真的角度来说,HDL语言面对的是编译器(如Modelsim等),相当于软件思路。
这时:
wire对应于连续赋值,如assign
reg对应于过程赋值,如always,initial

*********************************************************************************
从综合的角度来说,HDL语言面对的是综合器(如DC等),要从电路的角度来考虑。
这时:
1、wire型的变量综合出来一般是一根导线;
2、reg变量在always块中有两种情况:
(1)、always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑
(2)、always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

在设计中,输入信号一般来说你是不知道上一级是寄存器输出还是组合逻辑输出,那么对于本级来说就是一根导线,也就是wire型。而输出信号则由你自己来决定是寄存器输出还是组合逻辑输出,wire型、reg型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

分享到:
评论

相关推荐

    Verilog中-reg和wire-用法和区别以及always和assign的区别.pdf

    在Verilog硬件描述语言中,wire和reg是两种基本的数据类型,而always和assign是两种常用于给变量赋值的关键字。理解他们的用法和区别对于编写正确且高效的Verilog代码非常重要。 首先,wire和reg数据类型的区别非常...

    FPGA_wire_reg

    在FPGA设计中,`wire`和`reg`是两种基本的数据类型,它们在硬件描述语言(HDL)如Verilog中扮演着至关重要的角色。正确理解和区分这两种类型对设计高质量的数字系统至关重要。本文将详细介绍`wire`和`reg`之间的主要...

    verilog文献

    该文献将详细阐释reg和wire数据类型之间的差异,并提出一个增强Verilog语言的提案,旨在消除声明reg数据类型的必要性。 2. Verilog中的变量声明和数据类型: Verilog中的数据类型包括reg和net两大类,具体包括...

    Verilog HDL 综合实用教程 孙海平

    - **数据类型**:Verilog HDL支持多种数据类型,其中比较常用的是`reg`、`wire`和`int`。 - `wire`:用于表示组合逻辑中的信号线,是Verilog中最基本的数据类型之一。默认情况下,`wire`类型的数据被认为是无符号的...

    Verilog双端口inout的使用和仿真

    在硬件描述语言Verilog中,双端口的inout接口是经常需要使用的一个功能,尤其在需要双向数据传输的场合。...通过阅读专业文章和实践,可以加深对这些概念和使用方法的理解,并在实际工作中准确地应用这些知识。

    Verilog例程

    以上知识点构成了Verilog例程的基础结构和使用方法,这些内容对于理解Verilog程序编写和硬件描述至关重要。在深入学习Verilog时,需要注意各种语法细节和设计风格,以保证硬件功能的正确实现和效率优化。

    verilog教程

    在Verilog的设计中,一个基本的设计单元被称为模块(module),模块可以包含端口列表、声明(如reg和wire类型)、语句(初始语句initial和始终语句always)等部分。Verilog模块的端口列表定义了模块外部的连接点,...

    Notepad Verilog 插件nppVerilog

    在VERILOG中,REG和WIRE是两种基本的信号类型,REG用于表示存储数据的变量,WIRE则表示连接不同逻辑块的线。nppVerilog插件允许用户方便地插入这些声明,这在构建复杂的逻辑电路时非常有用。 3. **生成测试激励...

    小白的礼物——Verilog实例代码_verilog_verilog实例_verilog实例_

    1. **语法结构**:Verilog的语法类似于C语言,包括数据类型(如reg、wire)、赋值语句(如assign、always)、条件语句(如if-else)、循环语句(如for、while)等。 2. **模块定义**:在Verilog中,设计是通过模块...

    零基础教你学FPGA之Verilog语法基础(上)

    关于数据类型,Verilog中主要使用reg、wire、integer和parameter。reg类型用于表示存储状态的数据,wire用于表示连续赋值的信号,integer是整型变量,parameter用于定义常量,它可以是整型、浮点型或者表达式。 在...

    verilog语法胶片

    Verilog模块中,常见的信号类型只有两种:reg和wire。在always块中被赋值的信号通常代表触发器,而纯组合逻辑电路中被赋值的信号则常被综合为连线。 在编写Verilog代码时,需要掌握的关键概念包括连续赋值、阻塞...

    Verilog HDL练习题

    理解这两者的区别和如何在Verilog中实现是关键。 4. **仿真和综合**:练习题可能包含如何使用仿真工具(如ModelSim、Icarus Verilog等)验证设计功能,以及如何将Verilog代码转换为实际硬件(即综合过程)的相关...

    Verilog语言参考手册

    2. **数据类型**:了解wire、reg、integer、real、time等数据类型的用法和区别,以及它们在逻辑设计中的作用。 3. **结构化元素**:学习如何定义模块、实例化其他模块以及理解模块间接口。 4. **进程与事件驱动**...

    verilog国外经典例子

    这个“verilog国外经典例子”压缩包包含了一些国外专家和工程师在Verilog设计中的示例代码,这些例子可以帮助我们深入理解和掌握Verilog的关键概念和用法。 1. **基本语法与结构**: Verilog的基本语法类似于C语言...

    verIlogHDL 学习资料

    这包括模块定义(module)、输入和输出端口声明、数据类型(如reg和wire)、赋值操作(如assign和always)以及各种逻辑运算符。例如,`module`关键字用于定义一个独立的硬件模块,其中包含了输入、输出以及内部信号...

    Verilog中阻塞赋值和非阻塞赋值的正确使用

    这两种赋值方式对硬件的时序行为和功能仿真有直接影响,因此了解它们的区别和正确的使用场合对于设计高质量的硬件电路至关重要。 首先,我们需要了解在Verilog中存在两种主要的赋值方法:连续赋值(Continuous ...

    北航 夏宇闻 Verilog教程

    2. **数据类型与运算符**:讲解Verilog中的各种数据类型,如reg、wire、integer、real等,并介绍各类算术、逻辑、位操作运算符。 3. **基本语句与结构**:涵盖顺序控制结构(always块、initial块)、并行结构...

Global site tag (gtag.js) - Google Analytics