未解决 net/uwire 不能有多个驱动程序

Unresolved net/uwire cannot have multiple drivers

我在使用以下代码时遇到一些问题:

    module register_window(port_A, port_B, PD, CWP, A, B, C, loadRF, clk);

output reg[4:0] port_A;
output reg[4:0] port_B;
input [31:0] PD; 
input [1:0] CWP;    
input [4:0] A;    
input [4:0] B;
input [4:0] C;
input loadRF; 
input clk;

    reg ld; //enable 

    wire  [3:0] t;
    decoder_2x4 decoder2by4(CWP, t, loadRF);

    wire [31:0] bitDecoder1;
    decoder_5x32 decoder0(C, bitDecoder1, t[0]);

    wire [31:0] bitDecoder2;
    decoder_5x32 decoder1(C, bitDecoder2, t[1]);

    wire[31:0] globalReg0;
      assign ld = (bitDecoder1[0] == 32'b0 ||bitDecoder2[0] == 32'b0||bitDecoder3[0] == 32'b0||bitDecoder4[0] == 32'b0);
     registers g0(globalReg0, PD, ld, clk);      

    // G1
    wire[31:0] globalReg1;
      assign ld = (bitDecoder1[1]== 32'b0||bitDecoder2[1]== 32'b0||bitDecoder3[1]== 32'b0||bitDecoder4[1]== 32'b0);
     registers g1(globalReg1, PD, ld, clk);

     wire[31:0] globalReg2;
     assign ld = (bitDecoder1[2]== 32'b0||bitDecoder2[2]== 32'b0||bitDecoder3[2]== 32'b0||bitDecoder4[2]== 32'b0);
    registers g2(globalReg2, PD, ld, clk);

基本上我的代码试图做的是将 wire t 设置为二进制解码器的输出以及其他 5x32 解码器的输入(此处省略了一些)。然后,根据解码器的值,它为 ld 分配一个值,该值基本上只是一个启用信号(如果任何解码器位为 1,则启用为 1,否则为 0)。然后这些值进入寄存器,并通过电线(globalReg1globalReg2 等)输出。如果重要的话,他们都使用相同的时钟。

我得到的编译错误是

testbench.sv:37: error: Unresolved net/uwire ld cannot have multiple drivers.

在分配的每一行中; assign ld = (bitDecoder1[1]== 32'b0||bitDecoder2[1]== 32'b0||bitDecoder3[1]== 32'b0||bitDecoder4[1]== 32'b0);

我也尝试将上面的行放在 always @(*) beginend 语句之间(因为我认为你总是必须在代码的逻辑部分之间这样做)但是那只会给我一个错误:

testbench.sv:33: error: ld Unable to assign to unresolved wires.

如果有人能给我指出正确的方向,我将永远感激不已。谢谢!

首先:assign的目标必须是wire,而不是reg。

其次,我找不到 bitDecoder1 或 bitDecoder2 的任何定义。
顾名思义,它们是位,但您是将它们与 32 位进行比较。这让我有些困惑,但这对你的问题来说并不重要。

... ld which is basically just an enable signal (if any of the decoder bits are 1, the enable is 1 otherwise, 0).

我无法将其与您的代码相匹配。那里有三个寄存器(g0、g1、g2,每个都需要一个负载使能。因此你需要一个 ld0、ld1、ld2。
Verilog 不像 C,您可以多次重复使用一个变量。 请记住,它是一种大型并行语言:任何文件中各处的所有赋值都是同时执行的。

如果 12 个比较匹配中的 any 匹配,则您希望加载 g0、g1、g2 的 all。在这种情况下,您仍然需要一个 ld0 ld1 和 ld2,但您需要将它们与 OR 函数组合:

assign ld = l0 | ld1 | ld2;