Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1976375
  • 博文数量: 356
  • 博客积分: 8284
  • 博客等级: 中将
  • 技术积分: 4580
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-15 20:25
个人简介

天行健,君子以自强不息

文章分类

全部博文(356)

文章存档

2018年(1)

2016年(4)

2015年(13)

2014年(14)

2013年(2)

2012年(25)

2011年(43)

2010年(65)

2009年(189)

分类:

2009-10-16 16:15:29

对组合逻辑输出变量,可以直接用assign。即如果不指定为reg类型,那么就默认为1位wire类型,故无需指定1位wire类型的变量。

当然专门指定出wire类型,可能是多位或为使程序易读。wire只能被assign连续赋值,reg只能在initial和always中赋值。

比如:

module lddata(clk,rst,cs,din,dout,tmpdata);

input clk, rst,cs;

input din;

output dout,tmpdata;

reg tmpdata;

clk or negedge rst)

if(!rst)

tmpdata <=0;

else

tmpdata<= din;

assign dout = tmpdata|cs;

endmodule

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

比如:一个简单的组合逻辑的例子,用了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;

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

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

wire表示直通,即输入有变化,输出马上无条件地反映(如与、非门的简单连接)。reg表示一定要有触发,没有输入的时候可以保持原来的值,但不直接实际的硬件电路对应(并非不能生成实际电路)。

 

线网型数据包括wire,wand,wor等几种类型,需要在被一个或一个以上驱动源驱动时,才能各自决定其不同线网型数据的最终值。

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

阅读(2015) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~