fpga中wire和reg的区别

原创 2013年12月02日 09:10:29
wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。
不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。        不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。wire使用在连续赋值语句中,而reg使用在过程赋值语句中。


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


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


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


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




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


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


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

相关文章推荐

[FPGA]如何使用SignalTap观察wire与reg值

简介   在FPGA程序调试时,我们除了仿真还经常的会用到SignalTap进行板级调试,其可以真实有效的反应某些变量的变化,方便我们理解内在跳转,方便Debug的运行。SignalTap需要制定时...

我对sobel算子的理解

索贝尔算子(Sobeloperator)主要用作边缘检测,在技术上,它是一离散性差分算子,用来运算图像亮度函数的灰度之近似值。在图像的任何一点使用此算子,将会产生对应的灰度矢量或是其法矢量 Sobe...

FPGA中wire与reg类型的区别

wire表示直通,即只要输入有变化,输出马上无条件地反映;reg表示一定要有触发,输出才会反映输入。         不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。...
  • fxqcn
  • fxqcn
  • 2011年07月28日 13:49
  • 4772

verilog编程语言中wire与reg的区别

  • 2013年03月14日 11:28
  • 32KB
  • 下载

Verilog中wire和reg数据类型的区别

http://blog.csdn.net/l_y_h_89/article/details/9722201 Verilog中wire和reg数据类型的区别 标签: Verilog...

Verilog中Wire 和 Reg 的区别

wire 和reg是Verilog程序里的常见的两种变量类型,他们都是构成verilog程序逻辑最基本的元素。正确掌握两者的使用方法是写好verilog程序的前提。但同时,因为他们在大多数编程语言中不...

verilog HDL中wire和reg的区别

wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。reg相当于存储单元,wire相当于物理连线。reg表示一定要有触发,没有...

Verilog中wire和reg数据类型的区别

对模块中所用到的所有信号(包括端口信号、节点信号等)都必须进行数据类型的定义。如果信号的数据类型没有定义,综合器将其默认为wire型。 wire表示直通,即只要输入有变化,输出马上无条件地反映;reg...

Verilog中wire与reg类型的区别

wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。 reg型表示的寄存器类型。always模块...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:fpga中wire和reg的区别
举报原因:
原因补充:

(最多只允许输入30个字)