Verilog 错误 "continuous assignment output must be a net"
Verilog error "continuous assignment output must be a net"
我正在做一项作业,我必须在其中合成我的 Verilog 代码。我编写了代码并进行了编译和模拟,一切正常。当我去综合时,设计编译器在我的一个模块中给我一个错误。该模块代表一个带有数据缓冲区的简单 8 位移位寄存器。当我合成时,它给我一个错误:
continuous assignment output buffer must be a net
我不知道这条消息在说什么。
module shiftReg(output shift_out,
output reg [7:0] data_buff,
input shift_write, clk, shift_in,
input [7:0] data);
reg [7:0] buffer;
assign shift_out = buffer[7];
assign buffer[0] = shift_in; //This is where it states an error.
always@(posedge clk) begin
if(shift_write == 1) begin
buffer <= {buffer[6:0],shift_in};
end
end
always@(shift_write) begin
if(shift_write == 0) begin
data_buff <= buffer;
buffer <= data;
end
end
endmodule
该消息告诉您,您通过连续赋值(使用 assign
关键字)分配给的信号必须是网络类型变量,例如 wire
。但是,您将 buffer
声明为 reg
类型变量。这是非法的,您的模拟器至少应该在您进行综合之前就此警告您。我用的模拟器给了我编译错误。
您可以简单地删除这一行:
assign buffer[0] = shift_in; //This is where it states an error.
在第一个 always
块中,您已经在行中隐式地将 buffer[0]
分配给 shift_in
:
buffer <= {buffer[6:0],shift_in};
修复后,问题仍然存在。由于多种原因,第二个 always
块是奇数。语法是合法的,但它不符合良好的综合编码实践。也许您打算将 2 个 always
块组合成 1:
module shiftReg (
output shift_out,
output reg [7:0] data_buff,
input shift_write, clk, shift_in,
input [7:0] data
);
reg [7:0] buffer;
assign shift_out = buffer[7];
always @(posedge clk) begin
if (shift_write) begin
buffer <= {buffer[6:0], shift_in};
end else begin
data_buff <= buffer;
buffer <= data;
end
end
endmodule
我正在做一项作业,我必须在其中合成我的 Verilog 代码。我编写了代码并进行了编译和模拟,一切正常。当我去综合时,设计编译器在我的一个模块中给我一个错误。该模块代表一个带有数据缓冲区的简单 8 位移位寄存器。当我合成时,它给我一个错误:
continuous assignment output buffer must be a net
我不知道这条消息在说什么。
module shiftReg(output shift_out,
output reg [7:0] data_buff,
input shift_write, clk, shift_in,
input [7:0] data);
reg [7:0] buffer;
assign shift_out = buffer[7];
assign buffer[0] = shift_in; //This is where it states an error.
always@(posedge clk) begin
if(shift_write == 1) begin
buffer <= {buffer[6:0],shift_in};
end
end
always@(shift_write) begin
if(shift_write == 0) begin
data_buff <= buffer;
buffer <= data;
end
end
endmodule
该消息告诉您,您通过连续赋值(使用 assign
关键字)分配给的信号必须是网络类型变量,例如 wire
。但是,您将 buffer
声明为 reg
类型变量。这是非法的,您的模拟器至少应该在您进行综合之前就此警告您。我用的模拟器给了我编译错误。
您可以简单地删除这一行:
assign buffer[0] = shift_in; //This is where it states an error.
在第一个 always
块中,您已经在行中隐式地将 buffer[0]
分配给 shift_in
:
buffer <= {buffer[6:0],shift_in};
修复后,问题仍然存在。由于多种原因,第二个 always
块是奇数。语法是合法的,但它不符合良好的综合编码实践。也许您打算将 2 个 always
块组合成 1:
module shiftReg (
output shift_out,
output reg [7:0] data_buff,
input shift_write, clk, shift_in,
input [7:0] data
);
reg [7:0] buffer;
assign shift_out = buffer[7];
always @(posedge clk) begin
if (shift_write) begin
buffer <= {buffer[6:0], shift_in};
end else begin
data_buff <= buffer;
buffer <= data;
end
end
endmodule