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

2024-12-23 09:57:53
推荐回答(2个)
回答1:

在实例化中,所有的端口都要求用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吧,这个比较好。

回答2:

你的这个问题问的很好哦!看似简单,却不易回答。
首先:wire 类型的数据,确实只能用assign语句赋值。
例如:wire abc; assign abc = 1'b1;

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

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

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