两者差别很大,完全不能取消。
在Verilog中,wire永远是wire,就是相当于一条连线,用来连接电路,不能存储数据,无驱动能力,是组合逻辑,只能在assign左侧赋值,不能在always @ 中赋值;
reg可以综合成register,latch,甚至wire(当其只是中间变量的时候),可以用于组合逻辑或者时序逻辑,能存储数据,有驱动能力,在always @模块表达式左侧被赋值。
两个共同具有性质:都能用于assign与always @模块表达式的右侧。
这是一个历史遗留问题。在 Verilog 被 Cadence 买下之前(大约上世纪八九十年代的样子),Verilog 只是一个用来做仿真的 HDL,不可综合。在那个年代,仿真器看到 wire 和 reg 会区别处理(实际上至今也是这样)。不知道你有没有发现,reg 类型信号的跳变,是依靠输入和敏感列表的,而且在非阻塞赋值中也存在一种并行的概念(同样条件下 B <= A、C <= B 的时候,A 的值不会直接到 C 去)。而 wire 只需要输入就足够了。这样区分两种类型也是为了更好地模拟真实硬件中时序逻辑和组合逻辑的行为。
仿真器对 wire 类型会在每个 delta time 都进行计算并赋值,而 reg 类型只有在满足敏感列表条件时才会计算。
而如今随着 SV 的推出 Verilog 都已经到 2005 了,但当初的这一习惯继承了下来。虽然 reg 不一定综合出来 register,但这属于综合工具对代码描述的硬件行为的一种解读。always @ (*) 当中这个敏感列表依然存在,仿真器依然会依照敏感列表的指示去干活,不论你的敏感列表是不是*。反过来看 wire,虽然 RTL 代码中这个 wire 信号可能就是综合后网表中某个寄存器的 Q 端,但是在行为级描述中你对这根 wire 重命名也确实是在描述一种硬件行为。

wire与reg类型的区别:

wire型数据常用来表示以assign关键字指定的组合逻辑信号。模块的输入输出端口类型都默认为wire型。默认初始值是z。

reg型表示的寄存器类型。always模块内被赋值的信号,必须定义为reg型,代表触发器。

默认初始值是x。

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

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

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

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

输入端口可以由net/reg驱动,但输入端口只能是net,如a = b & c,输入端口a 只能是net型,但其驱动b,c可以是net/reg型;输出端口可以使net/reg类型,输出端口只能驱动net,如a = b & c,模块的输出端口b,c可以是net/reg型,但它们驱动的a必须是net型;若输出端口在过程块(always/initial)中赋值则为reg型,若在过程块外赋值则为net型。用关键词inout声明一个双向端口, inout端口不能声明为寄存器类型,只能是net类型。

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

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

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

wire型的变量综合出来一般是一根导线;

reg变量在always块中有两种情况:    always后的敏感表中是(a or b or c)形式的,也就是不带时钟边沿的,综合出来还是组合逻辑   always后的敏感表中是(posedge clk)形式的,也就是带边沿的,综合出来一般是时序逻辑,会包含触发器(Flip-Flop)

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

Verilog 中 wire 和 reg 数据类型区别相关推荐

  1. 萌新食用:Verilog中wire和reg数据类型的区别

    萌新食用:Verilog中wire和reg数据类型的区别 最近恰好在学习数电相关知识扯到Verilog中的wire与reg类型数据的区别: 总的来说,其实就一句话:wire相当于物理连线,而reg相当 ...

  2. verilog中wire和reg的区别,什么时候用wire?什么时候用reg?

    相信很多和我一样刚开始接触verilog语言的小白都会有这样的困惑,wire型变量和reg型变量到底有什么区别?什么情况下使用wire定义变量.什么情况下使用reg定义变量?下面就详细分析两者在使用中 ...

  3. verilog中wire和reg的用法区别

    verilog中wire和reg的用法区别 wire(组合逻辑) reg(组合和时序逻辑) 可以相互替代的情况 看到一个文档,很详细的讲了wire和reg的区别,随便记录一下 wire(组合逻辑) w ...

  4. Verilog中wire与reg类型的区别

    这是事转载的一篇文章,觉得不错,虽然中间有点小错误. wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值 ...

  5. Verilog中wire与reg类型的区别(转载自http://www.cnblogs.com/farbeyond/p/5204586.html)

    wire与reg类型的区别: wire型数据常用来表示以assign关键字指定的组合逻辑信号.模块的输入输出端口类型都默认为wire型.默认初始值是z. reg型表示的寄存器类型.always模块内被 ...

  6. fpga中wire和reg的区别

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

  7. wire与reg的区别?什么时候用wire?什么时候用reg?(转)

    wire与reg的区别?什么时候用wire?什么时候用reg?(转) 简单来说硬件描述语言有两种用途:1.仿真,2.综合. 对于wire和reg,也要从这两个角度来考虑. 从仿真的角度来说,HDL语言 ...

  8. verilog中assign和always@(*)的区别和易忽略的点

    今天在做IC的模块验证时,发现某个模块的输出信号为x态,一般遇到x态首先思考以下几种情况: 变量未进行初始化 多个相同驱动强度的信号同时驱动1和0 代码中直接赋值的x态 如果是PAD电路上的X态,则另 ...

  9. wire和reg的区别

    1.wire和reg的本质是什么 wire的本质是一条没有逻辑的连线,也就是说输入时什么输出也就是什么.wire型数据常用来表示以assign关键字指定的组合逻辑信号,模块的输入输出端口类型都默认为w ...

最新文章

  1. Java 8学习资料汇总
  2. 除了收割票房,内战中的中国喜剧电影到底在拼什么?
  3. Alpha冲刺(8/10)
  4. 如何将IntelliJ项目添加到GitHub
  5. 6.过滤器(Filter)
  6. 如何在Mac OSX 系统上安装 Vagrant
  7. php pdf转为word,免费pdf转word软件汇总
  8. 学前端的记录帖html+css b站千峰19版
  9. VOC2007和VOC2012数据集下载地址
  10. Keytool 工具使用
  11. 华为管理学案例分析_华为战略管理案例分析.docx
  12. 【3D Max】3D max如何删除环境贴图
  13. R语言缺失值判断以及处理
  14. css图片悬停特效,使用CSS3实现图片悬停放大的特效
  15. MessageBox confirm弹框确认和取消按钮的使用-回调
  16. 逗比老师带你搞定C语言指针
  17. 通俗易懂_汉诺塔(java递归实现)
  18. html5百度地图展示运动轨迹,百度地图根据经纬度获取运动轨迹
  19. Python3自然语言处理(3)——WordNet
  20. SDN控制器的功能及作用—Vecloud

热门文章

  1. 节能信标无线感应定位测试:200kHz
  2. 将扫描字符转换成点阵信息
  3. 如何配置Keil 外部编辑器?
  4. android触摸事件分发,Android 事件分发机制
  5. 汇编语言ac和c何时为1,汇编语言课堂练习一(参考答案)
  6. python实现数据库连接池_Python实现Mysql数据库连接池
  7. wcf返回json android,WCF返回JSON的详细配置
  8. linux怎么配置mysql数据库服务器_linux下指定mysql数据库服务器主从同步的配置实例...
  9. :empty css 可以用在哪些标签,CSS伪类:empty让我眼前一亮(实例代码)
  10. 机器人铁锈斑斑皮肤怎么买_脸上出现了皱纹,变难看,怎么办?几招轻松改善皱纹...