verilog中assign 里面wire 和assign有什么区别

后使用快捷导航没有帐号?
查看: 5275|回复: 0
verilog中reg和wire类型的区别和用法
在线时间490 小时
威望9087 分
芯币12352 枚
TA的帖子TA的资源
五彩晶圆(高级), 积分 9087, 距离下一级还需 913 积分
五彩晶圆(高级), 积分 9087, 距离下一级还需 913 积分
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对应于连续赋值,如assignreg对应于过程赋值,如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型都可以。但一般的,整个设计的外部输出(即最顶层模块的输出),要求是寄存器输出,较稳定、扇出能力也较好。
Powered by
逛了这许久,何不进去瞧瞧?verilog assign可以给reg赋值吗 和assign给wire赋值有什么区别_百度知道
verilog assign可以给reg赋值吗 和assign给wire赋值有什么区别
reg是寄存器,在硬件里面是映射到一个寄存器实体的,具体操作去了解一下寄存器的操作方法,比如D触发器。wire只是一个数据标识,并不开辟物理内存。assign不可以给reg赋值。
其他类似问题
为您推荐:
assign不能给reg类型赋值的。
我也不知道
assign的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁求VERILOG wire和reg的区别??_电子元器件_百科问答
求VERILOG wire和reg的区别??
提问者:唐利庭
我的程序里从来没有指定过wire类型的变量,对组合逻辑输出变量,直接就assign了,是不是如果不指定为reg类型,那么就默认为wire类型?比如:module lddata(clk,rst,cs,din,dout,tmpdata);input clk, rst,output dout,always@(posedge clk or negedge rst)if(!rst)tmpdata &=0;elsetmpdata&=assign dout = tmpdata|endmodule我的程序都是如以上结构的,没有指定过wire 类型变量。是不是上面的clk,rst,cs还有dout 都是默认为wire的。但我又看到有的程序也专门指定出wire类型,有什么讲究吗?相关回复yunfeng ( 12:46:43) 是的,不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。请高手继续补充! braveboys ( 16:18:14) 其实是不同的抽象级别,wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,也就是说它相当于c语言中的变量(int,float等),vhdl中的variable。记住这句就可以了,reg不和实际的电路如寄存器对应,高层次的描述时用。always其实算是算法级描述的语句,所以其中的变量必须声明为reg,还有initial,自己多看一些例子,会更能加深理解 xblee ( 18:40:04) QUOTE:原帖由 braveboys 于
16:18 发表其实是不同的抽象级别,wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,这怎么理解啊?我觉得就是吧!也就是说它相当于c语言中的变量(int,float等),vhdl中的vari ... 这怎么理解啊?我觉得就是吧! braveboys ( 20:37:31) 一个简单的组合逻辑的例子,用了reg类型module mux(a,b,c,sel);input a,b,always @(sel or a or b)if(sel ==1'b0) c=a;else c=b; 但是这个综合出来就是一个简单的二选一选择器,组合逻辑电路看它描述的方式,是不是就是把电路的行为(功能)描述出来了,这种就是算法级描述 met31 ( 22:39:53) 有道理,, peter_zhang ( 01:07:37) 如果没有指定则默认wire型 binart ( 10:00:28) wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。 braveboys ( 10:06:34) QUOTE:原帖由 binart 于
10:00 发表wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,输出才会反映输入的状态。 注意概念性问题,reg不直接实际的硬件电路对应,除非你想reg只是说在没有输入的时候可以保持原来的值,这是它的语意:) binart ( 10:10:36) 我时常将reg想象成象74LS373这样的实际锁存器。 xblee ( 11:00:13) QUOTE:原帖由 braveboys 于
20:37 发表一个简单的组合逻辑的例子,用了reg类型module mux(a,b,c,sel);input a,b,always @(sel or a or b)if(sel ==1'b0) c=a;else c=b; 但是这个综合出来就是 ... 受教了!多谢! eda2k4 ( 11:21:46) QUOTE:原帖由 braveboys 于
10:06 发表注意概念性问题,reg不直接实际的硬件电路对应,除非你想reg只是说在没有输入的时候可以保持原来的值,这是它的语意:) 啊?!?!?!?!?天了!回去重新学习。 eagle~鬼心 ( 13:24:39) 不懂!!!! hyzhangwang ( 13:53:11) verilog不懂~但还是要盛赞braveboys网友的热情! jenny512 ( 22:30:26) ------------------------------------------------------------------------------------------------------------------------------------------------其实是不同的抽象级别,wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,也就是说它相当于c语言中的变量(int,float等),vhdl中的variable。记住这句就可以了,reg不和实际的电路如寄存器对应,高层次的描述时用。------------------------------------------------------------------------------------------------------------------------------------------------虽然没有学习过verilog,但是对于braveboys网友对于VHDL中variable和signal的讲解有不同意见:在VHDL中无论是variable还是signal都应该可以对应到具体电路。在给variable或者signal赋值的时候,只可能产生两种结果:a)产生线;b)产生寄存器(latch或者是ff);但是signal可以在用在concurrent 和sequential两种场合,因此它可以在不同的process间传递,而在process中,只能定义variable.如果一定要找二者在c语言中的对应,我想可能局部变量和全局变量更合适。如果process在这一次触发和下一次触发之间需要暂存数据,那么无论是signal还是variable都会产生一个寄存器,如果反之,那么就会生成线。小妹是新手刚学,欢迎各位前辈拍转^_^| braveboys ( 22:40:40) QUOTE:虽然没有学习过verilog,但是对于braveboys网友对于VHDL中variable和signal的讲解有不同意见:在VHDL中无论是variable还是signal都应该可以对应到具体电路。在给variable或者signal赋值的时候,只可能产生两种结果:a)产生线;b)产生寄存器(latch或者是ff);但是signal可以在用在concurrent 和sequential两种场合,因此它可以在不同的process间传递,而在process中,只能定义variable.如果一定要找二者在c语言中的对应,我想可能局部变量和全局变量更合适。如果process在这一次触发和下一次触发之间需要暂存数据,那么无论是signal还是variable都会产生一个寄存器,如果反之,那么就会生成线。 呵呵,有人讨论真是太好了,看下边的例子in,out为外部信号process(clk)variable a,b,c,d,e;beginif (clk'event and clk='1') thena:=b:=a;c:=b;d:=c;e:=d;out&=e;end process随便写的,意思能明白就可以,这个综合出来的就是一个d触发器,那变量a,b,c,d,e;对应的连线是什么?如果你说这些都和in或out对应,那好,咱们的意见就一致了,要不,好像就有些说不通了吧:)好长时间没用vhdl,程序有问题大家也指正一下,呵呵 bluewind ( 10:59:52) 你的例子不能说明variable就不能生成实际电路,variable还是signal应该对应到具体什么电路,应该具体情况具体分析吧~ braveboys ( 11:08:03) 我没说不能生成实际电路,只是说不直接对应,因为关键问题就是描述问题的层次的原因你说呢 ll28 ( 23:03:54) 看大家讨论的热闹,查了查verilog-2001的标准,标准中对wire和reg的讲述如下:wire:A wire net can be used for nets that are driven by a single gate or continuous assignment.reg:Assignments to a reg are made by procedural assignments (see 6.2 and 9.2). Since the reg holds a valuebetween assignments, it can be used to model hardware registers. Edge-sensitive (i.e., flip-flops) and levelsensitive (i.e., RS and transparent latches) storage elements can be modeled. A reg needs not represent ahardware storage element since it can also be used to represent combinatorial logic.我想VHDL也类似,回头有空查查VHDL的标准中是怎样将variable和signal的。 wire就是实际上的连线,reg其实是实际上寄存器,我的理解 你应该去查查verilog的标准了,对它理解有误设计很容易出问题,ll28帮你做 了,你应该看看啊
回答者:苏柏位
Mail: Copyright by ;All rights reserved.}

我要回帖

更多关于 verilogassign 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信