verilog中wire一般什么时候应用?
我想了解一下,wire型一般什么时候应用。我看有的程序这样写。比如:output[2:0]a;rega;有的没有rega这一语句。如果没有的话,那么此时输出的a默认什么类...
我想了解一下,wire型一般什么时候应用。我看有的程序这样写。比如:
output[2:0] a;
reg a;
有的没有reg a这一语句。如果没有的话,那么此时输出的a默认什么类型呢?是wire吗?
还有一种情况也是输入和输出,比如这两种语句
① wire[7:0] out
② output[7:0] out
区别在哪里? 展开
output[2:0] a;
reg a;
有的没有reg a这一语句。如果没有的话,那么此时输出的a默认什么类型呢?是wire吗?
还有一种情况也是输入和输出,比如这两种语句
① wire[7:0] out
② output[7:0] out
区别在哪里? 展开
5个回答
展开全部
有几种情况变量需要定义成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了
第一。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了
2015-08-25 · IT·互联网经理人培训口碑品牌
关注
展开全部
有几种情况变量需要定义成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。
第一: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, 可以精简代码.
追问
是不是这个意思:如果只写output[7:0] out,就是wire型,只不过没有声明。如果再特别补充一句reg out的话,就是reg型了?也就是wire[7:0] out和output[7:0] out是一样的。
追答
对头. 在综合过程中,会综合出很多的无名wire, 对内、对外需引用的wire就得声明一下便于引用. 片段:
reg wr_stb_n;
wire tx_ing;
reg [7:0] rSTATUS_bak;
wire wr_trig_n;
reg state_chged;
assign wr_trig_n = click_n && urgent_in_n && ~state_chged;
always @(posedge clkuart)
wr_stb_n <= wr_trig_n;
txmit tUART(
.reset(~rst_n),
.clock(clkuart),
.data_in(rSTATUS),
.write_strobe(wr_stb_n),
.s_out(rx0_n),
.transmiting(tx_ing)
);
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
输出变量如果没有特别声明,默认是wire型;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
要在always模块里赋值,必须是寄存器变量。要用assign赋值,必须是wire型。output自动就是wire型。不知道说清楚了么
追问
是不是这个意思:如果只写output[7:0] out,就是wire型,只不过没有声明。如果再特别补充一句reg out的话,就是reg型了?也就是wire[7:0] out和output[7:0] out是一样的。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询