Verilog代码里面assign后面的变量不用提前声明一下吗?该怎么处理
Verilog代码里面assign后面的变量不用提前声明一下吗?
来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:
module prac (
clk,
reset_n,
dataa,
datab,
outa,
outb
);
input clk;
input reset_n;
input dataa;
input datab;
output outa;
output outb;
reg reg1;
reg reg2;
reg reg3;
reg reg4;
assign outa = reg1;
assign outb = reg2;
assign rst_n = reg4;
always @ (posedge clk or negedge reset_n)
begin
if (!reset_n)
begin
reg3 <= 1'b0;
reg4 <= 1'b0;
end
else
begin
reg3 <= 1'b1;
reg4 <= reg3;
end
end
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else
begin
reg1 <= dataa;
reg2 <= datab;
end
end
endmodule
其中的 assign rst_n = reg4;这一句
rst_n没有声明,这也行?
看来Verilog跟C语言区别还是有的嘛。。。
------解决方案--------------------
没有仔细看代码,不过ASSIGN 后面的变量不声明也没关系,顶多产生一个告警,不影响使用,个人认为
------解决方案--------------------
对复位信号的要求是异步assert,同步deassert,所以要用上述电路把全异步的reset-n作一个转换。
另外,verilog中默认为wire型变量
来看一个Synchronized Asynchronous Reset例子,Verilog代码如下:
module prac (
clk,
reset_n,
dataa,
datab,
outa,
outb
);
input clk;
input reset_n;
input dataa;
input datab;
output outa;
output outb;
reg reg1;
reg reg2;
reg reg3;
reg reg4;
assign outa = reg1;
assign outb = reg2;
assign rst_n = reg4;
always @ (posedge clk or negedge reset_n)
begin
if (!reset_n)
begin
reg3 <= 1'b0;
reg4 <= 1'b0;
end
else
begin
reg3 <= 1'b1;
reg4 <= reg3;
end
end
always @ (posedge clk or negedge rst_n)
begin
if (!rst_n)
begin
reg1 <= 1'b0;
reg2 <= 1'b0;
end
else
begin
reg1 <= dataa;
reg2 <= datab;
end
end
endmodule
其中的 assign rst_n = reg4;这一句
rst_n没有声明,这也行?
看来Verilog跟C语言区别还是有的嘛。。。
------解决方案--------------------
没有仔细看代码,不过ASSIGN 后面的变量不声明也没关系,顶多产生一个告警,不影响使用,个人认为
------解决方案--------------------
对复位信号的要求是异步assert,同步deassert,所以要用上述电路把全异步的reset-n作一个转换。
另外,verilog中默认为wire型变量