Я использую (отлично) Yosys для синтеза (read_verilog & pro c) приведенного ниже кода (серая логика инкремента c для asyn c fifo), чтобы сделать некоторые формальные проверки и обнаружил, что он невероятно медленный.
Для W=2
он синтезируется в 0.2sec
, W=3
в 230sec
. Это еще не закончилось для W=4
, и мне нужно W=5
для моего дизайна.
Yosys - версия 0.9+932
. Атрибут mem2reg используется потому, что я хотел его, так как regs не mem (smtbm c не любит nonconst meminit).
Мне интересно, если он задуман или есть какая-то ошибка / неэффективность в PROC_DLATCH?
module gray5_inc #(parameter K=1,W=3) (
input [W-1:0] in,
output [W-1:0] out);
localparam SZ=1<<W;
function [W-1:0] gray;
input [W-1:0] x;
begin
gray = x^{1'b0,x[W-1:1]};
end
endfunction
integer i;
(* mem2reg *)
reg [W-1:0] rom [SZ-1:0];
initial begin
for(i=0;i<SZ;i=i+1) rom[gray(i)] = gray(i+K);
end
assign out = rom[in];
endmodule