Verilog 合成不支持在多条单条边下指定

Verilog 合成不支持在多条单条边下指定,verilog,synthesis,Verilog,Synthesis,我编写了以下代码: module Key_Schedule( subkey_tupple1, subkey_tupple2, generate_key_final_step, rst,clk ); reg [0:31] a1,b1,a2,b2; input [0:31] subkey_tupple1; input [0:31] subkey_tupple2; //input [31:0] subkey_A_swap; //

我编写了以下代码:

module Key_Schedule(
    subkey_tupple1,
    subkey_tupple2,
    generate_key_final_step,
    rst,clk
);

    reg [0:31] a1,b1,a2,b2;
    input [0:31] subkey_tupple1;
    input [0:31] subkey_tupple2;
    //input [31:0] subkey_A_swap;
    //input [31:0] subkey_B_swap;
    input clk,rst;
    output reg [0:63] generate_key_final_step;
    reg [0:63] temp;
    reg [0:63] round_sub_key_left;

    always @(posedge clk or negedge rst)
    begin
        if (!rst)
        begin
            temp<={64{1'b0}};
            round_sub_key_left<={64{1'b0}};
        end
        else
            temp<={subkey_tupple1[0:31],subkey_tupple2[0:31]};

//The error is below... line 49
        round_sub_key_left<={temp[8:15],temp[16:23],temp[24:31],temp[0:7],temp[40:47],temp[48:55],temp[56:63],temp[32:39]};
        a1={temp[8:15],temp[16:23],temp[24:31],temp[0:7]};
        b1={temp[40:47],temp[48:55],temp[56:63],temp[32:39]};
        a2=b1;
        b2=a1^b1;
        generate_key_final_step={a2,b2};
    end
endmodule
模块密钥计划(
子键_tuple1,
子键_tuple2,
生成密钥最终步骤,
rst,clk
);
reg[0:31]a1、b1、a2、b2;
输入[0:31]子键\u元组1;
输入[0:31]子键\u元组2;
//输入[31:0]子键交换;
//输入[31:0]子键交换;
输入时钟,rst;
输出寄存器[0:63]生成密钥最终步骤;
注册[0:63]温度;
reg[0:63]左下圆键;
始终@(posedge clk或negedge rst)
开始
如果(!rst)
开始

第47行的temp
else
只影响一行,这是不对的。 在
reset
条件下
round\u sub\u key\u left
有两个冲突的驱动程序。
将代码放在
else
后面的
begin-end
括号中

第47行的else
只影响一行,这是不对的。 在
reset
条件下
round\u sub\u key\u left
有两个冲突的驱动程序。
将代码放在
else
后面的
begin-end
括号中

第47行的else只影响一行,这是不对的。 在
reset
条件下
round\u sub\u key\u left
有两个冲突的驱动程序。
将代码放在
else
后面的
begin-end
括号中

第47行的else只影响一行,这是不对的。 在
reset
条件下
round\u sub\u key\u left
有两个冲突的驱动程序。
将代码放在
else
后面的
begin-end
括号中

else
条件周围缺少
begin
-
end
。因此,对
temp
的赋值是
else
条件下的唯一赋值。当处于活动复位状态时,左键仍然从
temp
派生而来。在异步重置过程中,左键未分配给常数,这可能是一个错误


此外,在toolic提到:将组合逻辑和同步逻辑放在同一个always块(即混合阻塞和非阻塞分配)中通常是一种不好的做法。最佳实践是将组合逻辑放入带有阻塞分配(
=
)的
始终@*
块中。同步逻辑(即触发器)应采用
always@(posedge clk/*+异步设置/set*/)
,且仅使用非阻塞分配(
else
条件周围缺少
begin
-
end
。因此对
temp
的赋值是
else
条件中唯一的赋值。在活动重置
round\u sub\u left
时,仍然是从
temp
派生的。这一错误可能与以下事实有关:ng异步重置
未将舍入子键\u left
分配给常数


此外,在toolic提到:将组合逻辑和同步逻辑放在同一个always块(即混合阻塞和非阻塞分配)中通常是不好的做法。最佳做法是将组合逻辑放在带有阻塞分配(
=
)的
always*
块中。同步逻辑(即触发器)应使用
始终@(posedge clk/*+异步集/set*/)
并仅使用非阻塞分配(
else
条件周围缺少
begin
-
end
。因此对
temp
的赋值是
else
条件中唯一的赋值。在活动重置
round\u sub\u left
时,仍然是从
temp
派生的。这一错误可能与以下事实有关:ng异步重置
未将舍入子键\u left
分配给常数


此外,在toolic提到:将组合逻辑和同步逻辑放在同一个always块(即混合阻塞和非阻塞分配)中通常是不好的做法。最佳做法是将组合逻辑放在带有阻塞分配(
=
)的
always*
块中。同步逻辑(即触发器)应使用
始终@(posedge clk/*+异步集/set*/)
并仅使用非阻塞分配(
else
条件周围缺少
begin
-
end
。因此对
temp
的赋值是
else
条件中唯一的赋值。在活动重置
round\u sub\u left
时,仍然是从
temp
派生的。这一错误可能与以下事实有关:ng异步重置
未将舍入子键\u left
分配给常数

此外,在toolic提到:将组合逻辑和同步逻辑放在同一个always块(即混合阻塞和非阻塞分配)中通常是不好的做法。最佳做法是将组合逻辑放在带有阻塞分配(
=
)的
always*
块中。同步逻辑(即触发器)应该使用
始终@(posedge clk/*+异步集/set*/)
并且只使用非阻塞分配(

always @(posedge clk or negedge rst) begin
  if (!rst) begin
    temp<={64{1'b0}};
    round_sub_key_left<={64{1'b0}};
  end
  else begin
    temp <= {subkey_tupple1[0:31],subkey_tupple2[0:31]};
    round_sub_key_left <= temp[8:31],temp[0:7],temp[40:63],temp[32:39]};
  end
end
always @* begin : output_comb_logic
    a1={temp[8:15],temp[16:23],temp[24:31],temp[0:7]};
    b1={temp[40:47],temp[48:55],temp[56:63],temp[32:39]};
    a2=b1;
    b2=a1^b1;
    generate_key_final_step={a2,b2};
end