Verilog SV错误:通过端口连接驱动,是多重驱动
我试图使用always_ff过程为下面的模型编写SV代码,但它不起作用 我的系统verilog代码如下:Verilog SV错误:通过端口连接驱动,是多重驱动,verilog,system-verilog,Verilog,System Verilog,我试图使用always_ff过程为下面的模型编写SV代码,但它不起作用 我的系统verilog代码如下: module circuit ( input clk, output logic reg_1, reg_2, reg_3, reg_4 ,reg_5, reg_6, reg_7, reg_8 ); logic reg4_in, reg3_in, reg2_in; assign reg4_in = reg_5 ^ reg_1; assign reg3_in = reg
module circuit
(
input clk,
output logic reg_1, reg_2, reg_3, reg_4 ,reg_5, reg_6, reg_7, reg_8
);
logic reg4_in, reg3_in, reg2_in;
assign reg4_in = reg_5 ^ reg_1;
assign reg3_in = reg_4 ^ reg_1;
assign reg2_in = reg_3 ^ reg_1;
always_ff @(posedge clk)
begin
{reg_1,reg_2,reg_3,reg_4,reg_5,reg_6,reg_7,reg_8} <= {reg_2,reg2_in,reg3_in,reg4_in,reg_6,reg_7,reg_8,reg_1};
end
endmodule
当我尝试运行模拟时,我收到以下错误(重复了几次):
EDA链接以便于阅读:您的测试台正在尝试对
reg\u 1…reg\u 8
进行程序分配,但它们已经由电路的输出驱动。您需要添加一个重置输入。此外,您应该声明数组,而不是单独命名的信号。它使工作更容易
module circuit
(
input clk, rst,
output logic [1:8] reg_out; //
);
logic [2:4] reg_in;
assign reg_in[4] = reg_out[5] ^ reg_out[1];
assign reg_in[3] = reg_out[4] ^ reg_out[1];
assign reg_in[2] = reg_out[3] ^ reg_out[1];
always_ff @(posedge clk or negedge rst)
begin
if (rst)
reg_out = 8'b10000000
else
reg_out <= {reg_out[2],reg_in,reg_out[6:8],reg_outt[1]};
end
endmodule
模块电路
(
输入时钟,rst,
输出逻辑[1:8]寄存器输出;//
);
逻辑[2:4]reg_in;
分配注册表输入[4]=注册表输出[5]^注册表输出[1];
分配注册表输入[3]=注册表输出[4]^注册表输出[1];
分配reg_in[2]=reg_out[3]^reg_out[1];
始终\u ff@(posedge clk或negedge rst)
开始
如果(rst)
注册输出=8'b10000000
其他的
登记
> > # ** Error (suppressible): (vsim-3839) Variable '/test/reg_8', driven via a port connection, is multiply driven. See testbench.sv(9).
> > # Time: 0 ns Iteration: 0 Instance: /test File: testbench.sv Line: 21
> > # ** Error (suppressible): (vsim-3839) Variable '/test/reg_7', driven via a port connection, is multiply driven. See testbench.sv(9).
> > # Time: 0 ns Iteration: 0 Instance: /test File: testbench.sv Line: 20
module circuit
(
input clk, rst,
output logic [1:8] reg_out; //
);
logic [2:4] reg_in;
assign reg_in[4] = reg_out[5] ^ reg_out[1];
assign reg_in[3] = reg_out[4] ^ reg_out[1];
assign reg_in[2] = reg_out[3] ^ reg_out[1];
always_ff @(posedge clk or negedge rst)
begin
if (rst)
reg_out = 8'b10000000
else
reg_out <= {reg_out[2],reg_in,reg_out[6:8],reg_outt[1]};
end
endmodule