原创 wire 和reg 的区别

2009-1-8 22:03 4999 8 8 分类: FPGA/CPLD

今天一直在看语法看程序再看语法再看程序,调试


心里有时还挺激动的,呵呵


学新东西的感觉


下面把遇到的reg类型和wire类型的区别记下来,方便将来看


程序里从来没有指定过wire类型的变量,对组合逻辑输出变量,直接就assign了,
是不是如果不指定为reg类型,那么就默认为wire类型?


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";
  else  c=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不和实际的电路如寄存器对应,高层次的描述时用。


关于一些对话中学到的


永顺 21:38:04
你好
ひ特权 シ 21:38:20

永顺 21:38:20
我遇到个术语
连续赋值
ひ特权 シ 21:38:36
assign
永顺 21:38:44
说WIRE类型的只能在连续赋值语句中赋值


ひ特权 シ 21:38:50
比如assign a = b & c;
ひ特权 シ 21:38:53

ひ特权 シ 21:39:22
如果reg a;就不能用在上面的语句里,只能定义wire a;
永顺 21:39:44
也就是给WIRE类型的值赋值的话
必须是在ASSIGN后面赋值是吗?
ひ特权 シ 21:40:28

永顺 21:41:49
你看我这样理解对不对
我定义了
reg类型的
wire类型的
两类变量
如果我分别赋值的话
reg只能在always后面赋值
wire只能在Assign后边赋值


永顺 21:41:52
是吗?
ひ特权 シ 21:42:09
yes


永顺 21:42:19
还有
我看赋值有
=和《=
永顺 21:42:30
这两种赋值有什么区别吗?
ひ特权 シ 21:42:39
阻塞语句,和非阻塞语句
永顺 21:43:01

这个我得再看看
还不懂呢
呵呵
ひ特权 シ 21:43:13
他们的区别是=是串行的,而<=号是并行的
ひ特权 シ 21:43:28
你看看资料,说的很明白
永顺 21:43:30

永顺 21:45:12
既然wire和reg定义变量都可以
那我都用一种定义不就行了吗?
为什么定义这两中变量呢
看资料说
reg是算法级的更高一级
wire是跟实际电路对应的
就这个区别吗?
ひ特权 シ 21:49:21
硬件就是要 越明白越好,这样能够明确每一个寄存器的每一条连线
永顺 21:50:29

有点明白了
呵呵

PARTNER CONTENT

文章评论0条评论)

登录后参与讨论
EE直播间
更多
我要评论
0
8
关闭 站长推荐上一条 /3 下一条