Compiler errors ModelSim寄存器存在非法错误

Compiler errors ModelSim寄存器存在非法错误,compiler-errors,verilog,modelsim,Compiler Errors,Verilog,Modelsim,所以我得到了错误 **错误:C:/Modeltech_pe_edu_10.3c/examples/HW6/alu.v(53):连续赋值的左侧寄存器非法 对于assign语句[assign result=32'd0;]你知道为什么吗?我已经尝试过在代码中移动这组语句,唯一有效的方法是完全删除代码的一部分 问题是,我需要它来运行我的测试台。关于这个错误意味着什么以及如何解决它,你有什么想法吗 // ///////////////////////////////////////////////

所以我得到了错误

**错误:C:/Modeltech_pe_edu_10.3c/examples/HW6/alu.v(53):连续赋值的左侧寄存器非法 对于assign语句[assign result=32'd0;]你知道为什么吗?我已经尝试过在代码中移动这组语句,唯一有效的方法是完全删除代码的一部分

问题是,我需要它来运行我的测试台。关于这个错误意味着什么以及如何解决它,你有什么想法吗

//
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    module alu
    (
        //--------------------------
        // Input Ports
        //--------------------------
            input   [31:0]  operand0, 
        input   [31:0]  operand1, 
        input   [3:0]   control,
        //--------------------------
        // Output Ports
        //--------------------------
            output reg  [31:0]  result,
        output          zero,
        output      overflow



    );
        //--------------------------
        // Bidirectional Ports
        //--------------------------
        // < Enter Bidirectional Ports in Alphabetical Order >
        // None

        ///////////////////////////////////////////////////////////////////
        // Begin Design
        ///////////////////////////////////////////////////////////////////


            assign  result  = 32'd0;
        assign zero     = 1'b1;
        assign overflow = 1'b0;




    always @(*)


    begin
    case(control)




    4'b0000: result = operand0 && operand1;

    4'b0001: result = operand0 || operand1;

    4'b0010: result = operand0 ^ operand1;

    4'b0011: result = !(operand0 || operand1);

    4'b0100: result = operand0 + operand1;

    4'b0110: result = operand0 - operand1;

    4'b1000: result = operand0 < operand1;

    4'b1001: result = operand0 << operand1;

    4'b1010: result = operand0 >> operand1;

    4'b1011: result = operand0 >>> operand1;
    endcase

    end



    endmodule
//
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
模块alu
(
//--------------------------
//输入端口
//--------------------------
输入[31:0]操作数0,
输入[31:0]操作数1,
输入[3:0]控件,
//--------------------------
//输出端口
//--------------------------
输出reg[31:0]结果,
输出零,
输出溢出
);
//--------------------------
//双向端口
//--------------------------
//<按字母顺序输入双向端口>
//没有
///////////////////////////////////////////////////////////////////
//开始设计
///////////////////////////////////////////////////////////////////
分配结果=32'd0;
指定零=1'b1;
分配溢出=1'b0;
始终@(*)
开始
病例(对照)
4'b0000:结果=操作数0和操作数1;
4'b0001:结果=操作数0 | |操作数1;
4'b0010:结果=操作数0^操作数1;
4'b0011:结果=!(操作数0 | |操作数1);
4'b0100:结果=操作数0+操作数1;
4'b0110:结果=操作数0-操作数1;
4'b1000:结果=操作数0<操作数1;
4'b1001:结果=操作数0>>操作数1;
尾声
结束
端模

首先:不能在
assign
语句中分配类型
reg
;这是Verilog的一条规则。“寄存器在连续赋值的左侧是非法的”表示寄存器不能通过
assign
语句进行赋值。与
=
左侧相同的左侧

第二:即使类型
reg
可以在
assign
语句中分配,也会在
result
上有多个驱动程序,因为它是在always块中分配的
assign
语句是连续的驱动程序,这意味着无论其他块对同一信号做什么,它都将始终对该信号应用一个值。如果存在任何冲突(例如一个应用1,另一个应用0),则结果将是
'bx

解决方案:删除以下行:
assignresult=32'd0
结果
是组合逻辑,不需要初始值