verilogwhileerror

verilogwhileerror,verilog,Verilog,我有一个Verilog的学校项目,我在这方面非常新手。节目的一部分是这样的 integer x; assign x=1; **LINE 49** while(x<=9) begin assign lastBitsofP=P[1:0]; if(lastBitsofP == 2'b00 || lastBitsofP ==2'b11) begin

我有一个Verilog的学校项目,我在这方面非常新手。节目的一部分是这样的

    integer x;
    assign x=1;
    **LINE 49** while(x<=9)
            begin
                assign lastBitsofP=P[1:0];
                if(lastBitsofP == 2'b00 || lastBitsofP ==2'b11)
                    begin
                    rightShift r1(shiftedValue,P);
                    end
                x=x+1;
            end
整数x;
指定x=1;

**第49行**while(x您需要停止编码并思考正在发生的事情。您正在对硬件和连接进行建模。当您写入assign x=时,这意味着“我有一根导线,我希望您使用此值驱动该导线”。如果您有一个像r1这样的模块,您需要连接它,则必须始终连接它,您无法连接“哦,等等,如果发生这种情况,请为我创建一个乘法单位”

您需要在开始时实例化连接。如果您有时只需要右移值,那么您可以使用类似于
assign out=select?shiftedValue:unshiftedValue;
的语句,然后您只需要编写select的逻辑

你可能需要一个触发器作为你的输出

reg [31:0] result;
always @(posedge clk)
begin
    result <= out;
end
reg[31:0]结果;
始终@(posedge clk)
开始

结果您需要停止编码并思考正在发生的事情。您正在对硬件和连接进行建模。当您写入assign x=时,这意味着“我有一根导线,我希望您使用此值驱动该导线”。如果您有一个像r1这样的模块,您需要连接它,则必须始终连接它,您不能连接”哦,等等,如果发生这种情况,请为我创建一个乘法单位”

您需要在开始时实例化连接。如果您有时只需要右移值,那么您可以使用类似于
assign out=select?shiftedValue:unshiftedValue;
的语句,然后您只需要编写select的逻辑

你可能需要一个触发器作为你的输出

reg [31:0] result;
always @(posedge clk)
begin
    result <= out;
end
reg[31:0]结果;
始终@(posedge clk)
开始

结果verilog中的assign语句意味着将该值连续分配给该导线。因此,当您写入assign x=1时,意味着x始终等于1。确定。我更改了该值。现在,当我尝试实例化rightShift r1(shiftedValue,P)时,出现了一个错误…它说意外的toke r1..你有什么想法吗?verilog中的assign语句意味着不断地将这个值分配给这条线路。所以当你写assign x=1时,这意味着x总是等于1。好的。我改变了。现在我在尝试实例化rightShift r1(shiftedValue,P)时出错上面写着意外的toke r1你有什么想法吗?