Verilog码符号Mag加法器的综合问题
我用Verilog描述了一个符号mag加法器,但我在合成时得到了以下错误:Verilog码符号Mag加法器的综合问题,verilog,fpga,Verilog,Fpga,我用Verilog描述了一个符号mag加法器,但我在合成时得到了以下错误: `timescale 1ns / 1ps module Signadder( input wire [3:0] a, input wire [3:0] b, output reg [3:0] sum ); reg [2:0] mag_a, mag_b,mag_sum, max, min; reg sign_a, sign_b, sign_sum; alw
`timescale 1ns / 1ps
module Signadder(
input wire [3:0] a,
input wire [3:0] b,
output reg [3:0] sum
);
reg [2:0] mag_a, mag_b,mag_sum, max, min;
reg sign_a, sign_b, sign_sum;
always @*
begin
mag_a = [2:0]a;
mag_b = [2:0]b;
sign_a = [3]a;
sign_b = [3]b;
if(mag_a>mag_b)
begin
max = mag_a;
min = mag_b;
sign_sum = sign_a;
end
else
begin
max = mag_b;
min = mag_a;
sign_sum = sign_b;
end
if (sign_a == sign_b)
mag_sum = mag_a +mag_b;
else
mag_sum = max - min;
assign sum = {sign_sum,mag_sum};
end
endmodule
我在我的Verilog代码中找不到任何语法错误,对于“a不是任务”,我使用中间寄存器修复它:
Line 35: Syntax error near "[".
Line 36: Syntax error near "[".
Line 33: a is not a task
Line 34: b is not a task
但是,它仍然不起作用。我希望有人知道原因。语法错误是由于以下几行造成的:
reg [3:0] a1;
reg [3:0]b1;
a1 = a;
b1 = b;
信号名称应位于方括号的左侧:
mag_a = [2:0]a;
mag_b = [2:0]b;
sign_a = [3]a;
sign_b = [3]b;
除此之外,对于可合成代码,您没有遵循良好的编码实践 您不应在
始终
块中使用分配
关键字
在始终块中有组合反馈循环。您不应读取和分配同一信号。例如,mag_a
:
mag_a = a[2:0];
mag_b = b[2:0];
sign_a = a[3];
sign_b = b[3];
代码是工作。我真的很感谢你。事实上,我正在学习FPGA设计,并根据Pong P.Chu的书“Verilog示例的FPGA原型设计”编写代码,我认为这本书中的一些代码出了问题。
mag_a = a[2:0];
max = mag_a;