wire和reg的区别

来源:本站
导读:目前正在解读《wire和reg的区别》的相关信息,《wire和reg的区别》是由用户自行发布的知识型内容!下面请观看由(电工技术网 - www.9ddd.net)用户发布《wire和reg的区别》的详细说明。
简介:文章介绍了wire和reg的区别。

1:不指定就默认为1位wire类型。专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。(“不指定就默认为1位wire类型”这个我深有感触啊 曾经让我花了好长时间查这个错 )

2.其实是不同的抽象级别,wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,也就是说它相当于c语言中的变量(int,float等),vhdl中的variable。记住这句就可以了,reg不和实际的电路如寄存器对应,高层次的描述时用。

always其实算是算法级描述的语句,所以其中的变量必须声明为reg,还有initial,自己多看一些例子,会更能加深理解

3.一个简单的组合逻辑的例子,用了reg类型

module mux(a,b,c,sel);

input a,b,sel;

output c;reg c;

always @(sel or a or b)

if(sel ==1'b0) c="a";

elsec=b;

endmodule;

但是这个综合出来就是一个简单的二选一选择器,组合逻辑电路

看它描述的方式,是不是就是把电路的行为(功能)描述出来了,这种就是算法级描述

4.always里只有reg能被赋值

5.wire :表示硬件单元之间的连线, 像在实际电路中一样, 网线由其连接器件的输出端连续驱动, 就是物理线路.

reg :它表示保持原来的数值, 直到被改写, 它并不与实际电路中由边沿触发的触发器构成的硬件完全对应.

6.wire 实际上就是网线,负责连线,在连续赋值语句中可以用到;而且基本上只能在联续赋值语句中用到。连续赋值语句如assign=a&b;

reg 为寄存器类型,但不要被被他名字所迷惑,reg可以被综合成触发器,锁存器,或者紧紧是连线。reg不可以在连续赋值语句中使用。只能在always中应用。

触发器always @ (posedge clk) q<=din;

锁存器always@ (g,d) if(g) q<=d;

连线always @(a,b,sel) if(sel) q="a"; else q="b";

7.wire 如同vhdl中的signal类型,是和实际的物理连接对应的,而reg属于算法描述层次用的类型,和实际电路没有直接的对应关系,也就是说它相当于c语言中的变量(int,float等),vhdl中的variable。记住这句就可以了,reg不和实际的电路如寄存器对应,高层次的描述时用

提醒:《wire和reg的区别》最后刷新时间 2024-03-14 01:08:53,本站为公益型个人网站,仅供个人学习和记录信息,不进行任何商业性质的盈利。如果内容、图片资源失效或内容涉及侵权,请反馈至,我们会及时处理。本站只保证内容的可读性,无法保证真实性,《wire和reg的区别》该内容的真实性请自行鉴别。