Guest
HI,
I tried to get a area and speed estimation for a ROM inside my design.
This code should be FPGA independed so I can't use a LUT.
I needed 9000 words with 20 bit. So I expected to have a function with
14 bit input and 20 bit output. Each output bit should depend on 14
input, so I expected to get someting like a 14 to 1 function consisting
of about 5 gates with 4 inputs plus some buffering per bit resulting in
~100-200 complex gates.
To get the estimation I used a constant declaration of a array of stl
vectors and a simple array index by integer (range 0 to 8999) address.
CONSTANT LUT: rom_t := (
"01000000001000110110",
....
);
Value<=LUT(address);
Im very supprised, that this code leads to a very large netlist. If
someone had an idea why this code gets so large? Is my first estimation
wrong or are synthesis tools (tried Synplify, Synopsys still running
after 18 h) so bad on reducing pure logic? Or is my quick and dirty
code that bad?
bye Thomas
I tried to get a area and speed estimation for a ROM inside my design.
This code should be FPGA independed so I can't use a LUT.
I needed 9000 words with 20 bit. So I expected to have a function with
14 bit input and 20 bit output. Each output bit should depend on 14
input, so I expected to get someting like a 14 to 1 function consisting
of about 5 gates with 4 inputs plus some buffering per bit resulting in
~100-200 complex gates.
To get the estimation I used a constant declaration of a array of stl
vectors and a simple array index by integer (range 0 to 8999) address.
CONSTANT LUT: rom_t := (
"01000000001000110110",
....
);
Value<=LUT(address);
Im very supprised, that this code leads to a very large netlist. If
someone had an idea why this code gets so large? Is my first estimation
wrong or are synthesis tools (tried Synplify, Synopsys still running
after 18 h) so bad on reducing pure logic? Or is my quick and dirty
code that bad?
bye Thomas