请Verilog高手帮助!wire赋值问题

wire类型的是只能用 assign 和 定义时赋值 两种赋值方式赋值吗?
我发现,如果这样,写一个module:
module test(input a,output reg b); //注意b是reg型的
之后实例化:
reg in_a;
wire out_b;
test T1(a,b);
是可以的,但b的赋值没有用到 assign。
请高手回答这是什么赋值方式?
我明白了,就是可以理解为是一种物理连接,而不是一种赋值,我明白了。

谢谢两位高手的回答,请问那个软件可以综合?需要下载厂家的库吗?

谢谢~~~!!!

在实例化中,所有的端口都要求用wire型,跟module中的定义没关系。比如你这里的test模块,虽然模块中b定义的是reg型,但是实例化的时候,仍然要使用wire型,这是规定,不能改变。
其实,一个module,就类似于一个小电路模块,在module中定义的,是内部的电路,你定义成reg或者wire都可以,视情况而定;而在你使用这个module的时候,也就是实例化调用module的时候,那么其实是外部的线与这个module相连接的,这是,必须使用wire型。虽然你写的是test T1(a,b),但是注意这里的a,b并不是module内部定义的a,b,而是外部信号a,b与module内的a,b相接。
这种写法是端口对应的,不是良好的风格,一般写成名字对应的:
test T1(.a(a), .b(b)); 这样你就能看清楚怎么回事了吧。。

补充:综合软件建议还是使用厂家自带的吧,虽然慢点,但是综合效果却是最好的。如果你要用第三方的综合工具,那就用Synplify pro吧,这个比较好。
温馨提示:内容为网友见解,仅供参考
第1个回答  2010-01-31
你的这个问题问的很好哦!看似简单,却不易回答。
首先:wire 类型的数据,确实只能用assign语句赋值。
例如:wire abc; assign abc = 1'b1;

其次:在说你这个模型,module test(input a,output reg b);
a是输入,b是寄存输出。来理解下这个b,它首先是一个输出端口,然后,在这个端口前端有个和它同名的寄存器。综合下就知道了

最后:来说这个例化,说明你要调用这个模块,那么这个模块对你来说应该是个黑盒子,你所看到的只有a口进,b口出这两个端口,你要把b口的信号线印出来,那么你怎么办?不只有用线(wire)把它引出么?

不知道将清楚了没有。先自己理解下。
相似回答