Verilog SV错误:通过端口连接驱动,是多重驱动

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

我试图使用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_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