reg型和wire型信号有什么本质的区别

作者&投稿:能供 (若有异议请与网页底部的电邮联系)
reg型和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型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。

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

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



2、数据不同
reg型数据保持最后一次的赋值。
wire型数据需要持续的驱动。
3、应用不同
wire用在连续赋值语句assign中。
reg用于always过程赋值语句中。

wire与reg型信号类型的区别:

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

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

  3. 默认初始值是x:

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

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

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

  5. 两者的区别是:

    寄存器型数据保持最后一次的赋值,而线型数据需要持续的驱动,输入端口可以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类型。

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

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

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

  9. wire型的变量综合出来一般是一根导线。

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

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



简单来说硬件描述语言有两种用途: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中要定义wire?

有几种情况变量需要定义成wire。
第一。assign 语句
例如:
reg a,b;
wire and_result;
...
assign and_result =a&&b;
你可以试试把wire定义成reg。综合器会报错。

第二。元件例化时候的输出必须用wire
例如:
wire dout;

ram u_ram
(
...
.out(dout)
...
);
wire按照国外的教材上面的定义:
wire为无逻辑连线。只做连线,wire本身是不带逻辑性的,所以输入什么输出就是什么。所以你尝试着用always语句对wire变量赋值。综合器就会报错。
那么你可能会问。assign c =a&&b不是就是对wire的赋值吗?
其实并非如此。综合器综合时将a&&b综合成ab经过一个与门。而c只是连接到与门输出的线。正真综合出与门的是&&。而不是c。

Abstract
Verilog初学者最常见的问题:『什麼时候该用wire?什麼时候又该用reg?』

Introduction
大体上来说,wire和reg都类似於C/C++的变数,但若此变数要放在begin...end内,该变数就须使用reg,在begin...end之外,则使用wire。

另外使用wire时,须搭配assign;reg则不必。

input,ouput,inout预设值都是wire。

若wire和reg用错地方,compiler都会提醒,所以不必太担心。

一个很重要的观念,在Verilog中使用reg,并不表示合成後就是暂存器(register)。若在组合电路中使用reg,合成後仍只是net,唯有在循序电路中使用reg,合成後才会以flip-flop形式表示成register。


存储器中的一个字节,可以存放多少个英文字母
一个字节 (Byte) 只能存一个字母(ASC编码)有些编码, 会需要2个字节...汉字至少要2个字节

中国有哪些著名的音乐艺人???
艺人包括GUNS N’ROSES、DON HENLEY、WHITESNAKE、AEROSMITH等。GYROWSCOPE公司独立品牌,以经营氛围音乐为特色,艺人包括CLUSTER、ROGER ENO等。HHARVEST公司活跃在70年代的英国公司,艺人包括PINK FLOYD、DEEP PURPLE、SYD BARRETT、WIRE、ROY HARPER等。HANNIBAL公司英国品牌,以经营英国及欧洲大陆 ...

如何做初中英语阅读题
完型填空1. 通读全文,掌握大意。2. 选择答案,填入空中。在选择时应考虑以下几点(1)注意上下文,通篇...eg.We won’t start if it fine tomorrow . 很明显,这道题中有连词if(如果),引导条件状语从句,

世界名狗的品种
藏獒 哈士奇 金毛 萨摩耶 拉布拉多 雪纳瑞 吉娃娃 德国牧羊犬 松狮犬 贵宾犬 边境牧羊犬 苏格兰牧羊犬 玩具贵宾犬 阿拉斯加雪橇犬 蝴蝶犬 沙皮犬 斗牛犬 博美犬 波音达犬 雪达犬 斑点狗 比熊犬 英国古代牧羊犬 阿富汗猎犬 秋田犬 苏俄牧羊犬 寻血猎犬 昆明犬 灵提 萨路基猎犬 法老王猎犬 西施犬 ...

学习的英语单词怎么写?
study 英 ['stʌdɪ] 美 ['stʌdi]n. 学习,研究;课题;书房;学问 vt. 学习;考虑;攻读;细察 vi. 研究;用功 n. (Study)人名;(英)斯塔迪 短语 Cohort study 队列研究 ; 世代研究 ; 定群研究 ; 列研究 event study 事件研究法 ; 事件研究 ; 事件分析 ; 事项研究...

一个英语翻译问题
Eg. The principal advantage of the products is a two-fold reduction in weight. 这些产品的主要优点是重量减轻了1\/2。 从上列倍数增减句型及其译法中不难看出:与汉语不 同的是,英语在表述或比较倍数时,无论使用什么句 型(除了不含倍数词的again句型外)都包括基础倍 数在内,因此都不是净增或净减n倍,...

Day 26 杂志常用英语词汇知多少?
edition 精装本 proof-reading 校对工作 encyclopaedia, encyclopedia 百科全书 affair n.桃色新闻;绯闻 continued story 连载故事;连载小说 cover girl n. 封面女郎 full position 醒目位置 inverted pyramid 倒金字塔(写作结构)wire service 通讯社 希望对大家有用哦^_^ 白雪 2018\/11\/11 于天津 ...

英语翻译
蒸汽支援队 http:\/\/www. 这个 通知 已发送到与您的蒸汽帐户相关的电子邮件地址。为了 关于阀门的隐私政策的信息,访问www. ValvsOfthay.com/PrimaCy.HTM。此电子邮件 消息是自动生成的。请不要回应。

王校长的战队叫什么
成立于2012年的iG Team Crossing FireWire赛区,成立后曾获得WCG2012中国及世界锦标赛冠军。2013年 2013年,IG传奇联盟在SWL第二赛季总决赛迎来了老对手WE队。前两场比赛,IG和WE各赢一局。第三局,IG抓住WE的失误,成功拿下比赛,拿到冠军。2013年LPL春季赛,IG队以15分7胜1负排名小组第一,季后赛...

下雨的多雨的英文怎么写作文
秋季型由于乌拉尔低槽和阿留申低槽于夏季在东北汇合加强,易造成低温多雨。 3、Kinds of alluvial and...`rain-water n soft water that has fallen as rain, eg not taken from wells, etc 雨水(软水,

都匀市18436955780: verilog HDL中wire和reg的区别 -
轩肾解通: wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接).reg表示一定要有触发,输出才会反映输入的状态.reg相当于存储单元,wire相当于物理连线.reg表示一定要有触发,没有输入的时候可以保持原来的值,但不...

都匀市18436955780: quartus ii reg和wire的区别 -
轩肾解通: wire是连线,reg是寄存器 wire与reg的区别?什么时候用wire?什么时候用reg?简单来说硬件描述语言有两种用途:1、仿真,2、综合.对于wire和reg,也要从这两个角度来考虑.**************************************************************************...

都匀市18436955780: verilog中reg和wire类型的区别 -
轩肾解通: wire是线网型,可以相当于一根导线相连,wire型变量可以作为连续赋值中的左值,也可以作为过程赋值语句中的右值;reg是寄存器类型,相当于一个寄存器,可以作为过程赋值语句中的左值和右值.

都匀市18436955780: verilog语句中wire型和reg的区别 -
轩肾解通: reg是寄存器,在硬件里面是映射到一个寄存器实体的,具体操作去了解一下寄存器的操作方法,比如D触发器.wire只是一个数据标识,并不开辟物理内存.assign不可以给reg赋值.

都匀市18436955780: 求大神!!在verilog语言中线网类型与寄存器类型的区别!! -
轩肾解通: 楼上回答部分合理.由wire声明的信号的确是只代表连接线,不会保持值.所以赋值的时候叫连续赋值,用assign完成.但是由reg声明的信号却有两种情况,一种是真正的寄存器,另一种只是声明成reg实际也是不能保持值的.简单地说,在always块里面:1.如果敏感列表是时钟,则reg所声明的是真正的寄存器; 2.如果敏感列表是信号,则reg所声明的只是线网型信号.

都匀市18436955780: verilog里面always 与reg分别代表什么意思,有什么功用?为什么只对输出用reg,对输入不用? -
轩肾解通: 首先搞清楚,verilog不是用来编程的软件语言,不要老想着与C/C++对比. 其二,verilog是用来描述硬件的,也就是说你要做什么硬件,先要在脑筋里想好,做到胸有成竹以后,再用verilog描述出来.有了以上概念,再来可以告诉你答案,你比...

都匀市18436955780: verilog变量reg和wire问题 -
轩肾解通: c3是reg型,你这个主函数是个testbench,子函数a,b,cin在testbench里面对应的测试信号是reg型,输出sum,cout是wire型,你的答案是错的,REG C1,C2,C3 ; WIRE C4,C5;

都匀市18436955780: reg[1:8] DATA,Reg DATA[1:8]这句寄存器数据类型定义语句的含义 -
轩肾解通: 由wire声明的信号的确是只代表连接线,不会保持值.所以赋值的时候叫连续赋值,用assign完成. 但是由reg声明的信号却有两种情况,一种是真正的寄存器,另一种只是声明成reg实际也是不能保持值的. 简单地说,在always块里面:1.如果敏感列表是时钟,则reg所声明的是真正的寄存器; 2.如果敏感列表是信号,则reg所声明的只是线网型信号.

都匀市18436955780: verilog答疑:从模块内部来讲,输出端口可以是线网或reg数据类型 -
轩肾解通: reg类型的变量是需要触发来实现的,用于过程块(always)中,模块内部的输出还是在模块内部,因此reg可以作模块内部的输出.wire就相当于一根线,模块输出到外部当然需要线来连接

都匀市18436955780: 在Verilog中对于一个变量,是选成wire型还是选成reg型,根据什么标准来选择? -
轩肾解通: 过程语句中使用reg型变量,连续赋值语句中使用wire型变量.希望可以帮到你!

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 星空见康网