有几种情况变量需要定义成wire。
第一。assign 语句
例如:
reg a,b;
wire and_result;
...
assign and_result =a&&b;
你可以试试把wire定义成reg。综合器会报错。
第二。元件例化时候的输出必须用wire
例如:
wire dout;
ram u_ram
(
...
.out(dout)
...
);
据你上面所说,wire就是连线的意思,一般在assign语句,或是模块例化,就是上面两种情况下使用。
如果只写output[7:0] out,就是wire型,默认是wire型。
至于你所说“如果再特别补充一句reg out的话,就是reg型了?”
答案是不一定的,主要是看你是否想寄存一级,若用于组合逻辑的always块中,一般综合成wire型,如果是时序电路,则是reg型的寄存器。
一般reg,用于always块中,而wire用于上述两种情况,记住就ok了
有几种情况变量需要定义成wire:
第一:assign 语句
例如:
reg a,b;
wire and_result;
...
assign and_result =a&&b;
你可以试试把wire定义成reg。综合器会报错。
第二:元件例化时候的输出必须用wire
例如:
wire dout;
ram u_ram
(
....out(dout)
...
);
wire按照国外教材上面的定义:
wire为无逻辑连线。只做连线,wire本身是不带逻辑性的,所以输入什么输出就是什么。所以你尝试着用always语句对wire变量赋值。综合器就会报错。
那么你可能会问。assign c
=a&&b不是就是对wire的赋值吗?其实并非如此。综合器综合时将a&&b综合成ab经过一个与门。而c只是连接到与门输出的线。正真综合出与门的是&&。而不是c。
wire就是导线啊. verilog中有显性定义和隐性定义的区别. 好比protel里画电路, 有些导线上你标了D0, D1, ... 有些导线你没标, 自动赋了N03781096, 不声明不等于它不需要或不存在, 事实上大量存在. 在verilog里面, 你可以用wire 声明特定的导线名称, 多用于testbench互联(即无寄存的直连). 我以前用它(alias)做倒序转化后赋值给一组reg, 可以精简代码.
输出变量如果没有特别声明,默认是wire型;
要在always模块里赋值,必须是寄存器变量。要用assign赋值,必须是wire型。output自动就是wire型。不知道说清楚了么