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行的tempelse
只影响一行,这是不对的。
在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