Q
quan228228
Guest
Trong 8.051 của tôi, có một khối DW02_mac Synopsys.Mô phỏng là đúng.Nhưng
Khi tôi chạy fpga, mac thấy rằng không thể làm việc.
Các funciotn máy Mac là một * b c;
ví dụ,
a = 16'h0001, b = 16'hffff, c = 32'h0000_0000;
kết quả là fpga 32'h0000_00001;
kết quả mô phỏng là 32'hffff_ffff;
Là các lỗi liên quan với tổng hợp fpga hoặc mã?Hoặc là có tương ứng lib cho DW02_mac?
Xin hãy giúp tôi.Cảm ơn rất nhiều.
Sau đây là DW02_mac.v;
module DW02_mac
(A, B, C, TC, MAC);
Tham số A_width = 8;
Tham số B_width = 8;
/ / Cổng kê khai danh sách theo thứ tự
input [A_width-1: 0] A;
input [B_width-1: 0] B;
input [A_width B_width-1: 0] C;
đầu vào TC;
sản lượng [A_width B_width-1: 0] MAC; reg [A_width B_width-1: 0] MAC;
chức năng [A_width B_width-1: 0] signed_mult;
input [A_width-1: 0] A;
input [B_width-1: 0] B;
reg [A_width-1: 0] a1;
reg [B_width-1: 0] b1;
reg [A_width B_width-1: 0] c1;
bắt đầu
/ / Synopsys synthesis_off
if ((A [A_width-1] === 1'bx | | B [B_width-1] === 1'bx)) bắt đầu
signed_mult = (A_width B_width (1'bx));
end else
/ / Synopsys synthesis_on
bắt đầu
if (A [A_width-1] === 1'b1)
a1 =-A;
khác
a1 = A;
nếu (B [B_width-1] === 1'b1)
b1 =-B;
khác
b1 = B;
c1 = a1 * b1;
if (A [A_width-1] == B! [B_width-1])
signed_mult =-c1;
khác
signed_mult = c1;
cuối
cuối
endfunction
luôn luôn bắt đầu
nếu (TC === 1'b1) bắt đầu / / ký phép nhân
MAC <= signed_mult (A, B) C;
end else begin
MAC <= A * B C;
end / / if
@ (TC hoặc A hoặc B hoặc C);
end / / quá trình
endmoduleThêm vào sau khi 1 giờ 44 phút:
i tự hỏi, nếu các chức năng là sythesisable.David
Khi tôi chạy fpga, mac thấy rằng không thể làm việc.
Các funciotn máy Mac là một * b c;
ví dụ,
a = 16'h0001, b = 16'hffff, c = 32'h0000_0000;
kết quả là fpga 32'h0000_00001;
kết quả mô phỏng là 32'hffff_ffff;
Là các lỗi liên quan với tổng hợp fpga hoặc mã?Hoặc là có tương ứng lib cho DW02_mac?
Xin hãy giúp tôi.Cảm ơn rất nhiều.
Sau đây là DW02_mac.v;
module DW02_mac
(A, B, C, TC, MAC);
Tham số A_width = 8;
Tham số B_width = 8;
/ / Cổng kê khai danh sách theo thứ tự
input [A_width-1: 0] A;
input [B_width-1: 0] B;
input [A_width B_width-1: 0] C;
đầu vào TC;
sản lượng [A_width B_width-1: 0] MAC; reg [A_width B_width-1: 0] MAC;
chức năng [A_width B_width-1: 0] signed_mult;
input [A_width-1: 0] A;
input [B_width-1: 0] B;
reg [A_width-1: 0] a1;
reg [B_width-1: 0] b1;
reg [A_width B_width-1: 0] c1;
bắt đầu
/ / Synopsys synthesis_off
if ((A [A_width-1] === 1'bx | | B [B_width-1] === 1'bx)) bắt đầu
signed_mult = (A_width B_width (1'bx));
end else
/ / Synopsys synthesis_on
bắt đầu
if (A [A_width-1] === 1'b1)
a1 =-A;
khác
a1 = A;
nếu (B [B_width-1] === 1'b1)
b1 =-B;
khác
b1 = B;
c1 = a1 * b1;
if (A [A_width-1] == B! [B_width-1])
signed_mult =-c1;
khác
signed_mult = c1;
cuối
cuối
endfunction
luôn luôn bắt đầu
nếu (TC === 1'b1) bắt đầu / / ký phép nhân
MAC <= signed_mult (A, B) C;
end else begin
MAC <= A * B C;
end / / if
@ (TC hoặc A hoặc B hoặc C);
end / / quá trình
endmoduleThêm vào sau khi 1 giờ 44 phút:
i tự hỏi, nếu các chức năng là sythesisable.David