Dear Sir, I have written LU Decomposition code for 8X8 matrix in MATLAB and converted into VHDL using HDL coder but when I am synthesizing it it is demanding more FPGA pins that my FPGA has, even my FPGA is having more than 600 pins.

4 次查看(过去 30 天)
When I did LU Decomposition in MATLAB, my L and U matrices have -ve as well as floating point numbers. I have converted the MATLAB code into VHDL using HDL Coder while choosing the option "convert to fix point at build time" . When I am synthesizing it is asking more FPGA pins and not getting synthesized. Please suggest how can I make my code synthesized? I am attaching code:
LIBRARY IEEE; USE IEEE.std_logic_1164.ALL; USE IEEE.numeric_std.ALL; USE work.LUDecomposition_fixpt_pkg.ALL;
ENTITY LUDecomposition_fixpt IS PORT( a11 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a12 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a13 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a14 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a15 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a16 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a17 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a18 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a21 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a22 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a23 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a24 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a25 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a26 : IN std_logic_vector(7 DOWNTO 0); -- ufix8 a27 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a28 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a31 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a32 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a33 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a34 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a35 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a36 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a37 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a38 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a41 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a42 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a43 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a44 : IN std_logic_vector(6 DOWNTO 0); -- ufix7 a45 : IN std_logic_vector(6 DOWNTO 0); -- ufix7 a46 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a47 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a48 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a51 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a52 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a53 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a54 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a55 : IN std_logic_vector(7 DOWNTO 0); -- ufix8 a56 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a57 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a58 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a61 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a62 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a63 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a64 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a65 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a66 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a67 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a68 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a71 : IN std_logic_vector(3 DOWNTO 0); -- ufix4 a72 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a73 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a74 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a75 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a76 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a77 : IN std_logic_vector(4 DOWNTO 0); -- ufix5 a78 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a81 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a82 : IN std_logic_vector(2 DOWNTO 0); -- ufix3 a83 : IN std_logic_vector(6 DOWNTO 0); -- ufix7 a84 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a85 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a86 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a87 : IN std_logic_vector(5 DOWNTO 0); -- ufix6 a88 : IN std_logic_vector(6 DOWNTO 0); -- ufix7 LU1 : OUT std_logic_vector(17 DOWNTO 0); -- ufix18_En10 LM : OUT vector_of_signed24(0 TO 63); -- ufix4 UM : OUT vector_of_signed24(0 TO 63); clock : in std_logic ); END LUDecomposition_fixpt;
ARCHITECTURE rtl OF LUDecomposition_fixpt IS
-- Constants
CONSTANT nc : vector_of_signed24(0 TO 63) := (to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000000#, 24),
to_signed(16#000400#, 24)); -- sfix24 [64]
CONSTANT C_divbyzero_p : signed(47 DOWNTO 0) := signed'(X"7FFFFFFFFFFF"); -- sfix48
CONSTANT C_divbyzero_n : signed(47 DOWNTO 0) := signed'(X"800000000000"); -- sfix48
CONSTANT c_divbyzero_p_0 : signed(42 DOWNTO 0) := signed'("0111111111111111111111111111111111111111111"); -- sfix43
CONSTANT c_divbyzero_n_0 : signed(42 DOWNTO 0) := signed'("1000000000000000000000000000000000000000000"); -- sfix43
-- Signals
SIGNAL a11_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a12_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a13_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a14_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a15_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a16_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a17_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a18_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a21_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a22_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a23_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a24_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a25_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a26_unsigned : unsigned(7 DOWNTO 0); -- ufix8
SIGNAL a27_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a28_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a31_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a32_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a33_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a34_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a35_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a36_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a37_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a38_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a41_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a42_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a43_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a44_unsigned : unsigned(6 DOWNTO 0); -- ufix7
SIGNAL a45_unsigned : unsigned(6 DOWNTO 0); -- ufix7
SIGNAL a46_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a47_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a48_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a51_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a52_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a53_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a54_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a55_unsigned : unsigned(7 DOWNTO 0); -- ufix8
SIGNAL a56_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a57_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a58_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a61_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a62_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a63_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a64_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a65_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a66_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a67_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a68_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a71_unsigned : unsigned(3 DOWNTO 0); -- ufix4
SIGNAL a72_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a73_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a74_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a75_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a76_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a77_unsigned : unsigned(4 DOWNTO 0); -- ufix5
SIGNAL a78_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a81_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a82_unsigned : unsigned(2 DOWNTO 0); -- ufix3
SIGNAL a83_unsigned : unsigned(6 DOWNTO 0); -- ufix7
SIGNAL a84_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a85_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a86_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a87_unsigned : unsigned(5 DOWNTO 0); -- ufix6
SIGNAL a88_unsigned : unsigned(6 DOWNTO 0); -- ufix7
SIGNAL LU1_tmp : unsigned(17 DOWNTO 0); -- ufix18_En10
BEGIN a11_unsigned <= unsigned(a11);
a12_unsigned <= unsigned(a12);
a13_unsigned <= unsigned(a13);
a14_unsigned <= unsigned(a14);
a15_unsigned <= unsigned(a15);
a16_unsigned <= unsigned(a16);
a17_unsigned <= unsigned(a17);
a18_unsigned <= unsigned(a18);
a21_unsigned <= unsigned(a21);
a22_unsigned <= unsigned(a22);
a23_unsigned <= unsigned(a23);
a24_unsigned <= unsigned(a24);
a25_unsigned <= unsigned(a25);
a26_unsigned <= unsigned(a26);
a27_unsigned <= unsigned(a27);
a28_unsigned <= unsigned(a28);
a31_unsigned <= unsigned(a31);
a32_unsigned <= unsigned(a32);
a33_unsigned <= unsigned(a33);
a34_unsigned <= unsigned(a34);
a35_unsigned <= unsigned(a35);
a36_unsigned <= unsigned(a36);
a37_unsigned <= unsigned(a37);
a38_unsigned <= unsigned(a38);
a41_unsigned <= unsigned(a41);
a42_unsigned <= unsigned(a42);
a43_unsigned <= unsigned(a43);
a44_unsigned <= unsigned(a44);
a45_unsigned <= unsigned(a45);
a46_unsigned <= unsigned(a46);
a47_unsigned <= unsigned(a47);
a48_unsigned <= unsigned(a48);
a51_unsigned <= unsigned(a51);
a52_unsigned <= unsigned(a52);
a53_unsigned <= unsigned(a53);
a54_unsigned <= unsigned(a54);
a55_unsigned <= unsigned(a55);
a56_unsigned <= unsigned(a56);
a57_unsigned <= unsigned(a57);
a58_unsigned <= unsigned(a58);
a61_unsigned <= unsigned(a61);
a62_unsigned <= unsigned(a62);
a63_unsigned <= unsigned(a63);
a64_unsigned <= unsigned(a64);
a65_unsigned <= unsigned(a65);
a66_unsigned <= unsigned(a66);
a67_unsigned <= unsigned(a67);
a68_unsigned <= unsigned(a68);
a71_unsigned <= unsigned(a71);
a72_unsigned <= unsigned(a72);
a73_unsigned <= unsigned(a73);
a74_unsigned <= unsigned(a74);
a75_unsigned <= unsigned(a75);
a76_unsigned <= unsigned(a76);
a77_unsigned <= unsigned(a77);
a78_unsigned <= unsigned(a78);
a81_unsigned <= unsigned(a81);
a82_unsigned <= unsigned(a82);
a83_unsigned <= unsigned(a83);
a84_unsigned <= unsigned(a84);
a85_unsigned <= unsigned(a85);
a86_unsigned <= unsigned(a86);
a87_unsigned <= unsigned(a87);
a88_unsigned <= unsigned(a88);
LUDecomposition_fixpt_1_output : PROCESS (a11_unsigned, a12_unsigned, a13_unsigned, a14_unsigned, a15_unsigned,
a16_unsigned, a17_unsigned, a18_unsigned, a21_unsigned, a22_unsigned,
a23_unsigned, a24_unsigned, a25_unsigned, a26_unsigned, a27_unsigned,
a28_unsigned, a31_unsigned, a32_unsigned, a33_unsigned, a34_unsigned,
a35_unsigned, a36_unsigned, a37_unsigned, a38_unsigned, a41_unsigned,
a42_unsigned, a43_unsigned, a44_unsigned, a45_unsigned, a46_unsigned,
a47_unsigned, a48_unsigned, a51_unsigned, a52_unsigned, a53_unsigned,
a54_unsigned, a55_unsigned, a56_unsigned, a57_unsigned, a58_unsigned,
a61_unsigned, a62_unsigned, a63_unsigned, a64_unsigned, a65_unsigned,
a66_unsigned, a67_unsigned, a68_unsigned, a71_unsigned, a72_unsigned,
a73_unsigned, a74_unsigned, a75_unsigned, a76_unsigned, a77_unsigned,
a78_unsigned, a81_unsigned, a82_unsigned, a83_unsigned, a84_unsigned,
a85_unsigned, a86_unsigned, a87_unsigned, a88_unsigned,clock)
VARIABLE A : vector_of_unsigned8(0 TO 63);
VARIABLE L : vector_of_signed24(0 TO 63);
VARIABLE U : vector_of_signed24(0 TO 63);
VARIABLE l_0 : vector_of_signed24(0 TO 63);
VARIABLE l_1 : vector_of_signed24(0 TO 63);
VARIABLE c : vector_of_signed51(0 TO 63);
VARIABLE LU : vector_of_unsigned18(0 TO 63);
VARIABLE LU11 : unsigned(17 DOWNTO 0);
VARIABLE j : unsigned(3 DOWNTO 0);
VARIABLE j_1 : unsigned(3 DOWNTO 0);
VARIABLE j_3 : signed(5 DOWNTO 0);
VARIABLE t_0 : unsigned(3 DOWNTO 0);
VARIABLE tmp : unsigned(4 DOWNTO 0);
VARIABLE tmp_0 : unsigned(4 DOWNTO 0);
VARIABLE add_temp : unsigned(4 DOWNTO 0);
VARIABLE tmp_1 : unsigned(3 DOWNTO 0);
VARIABLE tmp_2 : unsigned(4 DOWNTO 0);
VARIABLE tmp_3 : unsigned(4 DOWNTO 0);
VARIABLE tmp_4 : unsigned(4 DOWNTO 0);
VARIABLE u_0 : vector_of_signed24(0 TO 63);
VARIABLE j_5 : signed(5 DOWNTO 0);
VARIABLE t_1 : unsigned(3 DOWNTO 0);
VARIABLE tmp_5 : unsigned(4 DOWNTO 0);
VARIABLE tmp_6 : unsigned(4 DOWNTO 0);
VARIABLE add_temp_0 : unsigned(4 DOWNTO 0);
VARIABLE tmp_7 : unsigned(3 DOWNTO 0);
VARIABLE tmp_8 : unsigned(4 DOWNTO 0);
VARIABLE tmp_9 : unsigned(4 DOWNTO 0);
VARIABLE tmp_10 : unsigned(4 DOWNTO 0);
VARIABLE k_3 : signed(5 DOWNTO 0);
VARIABLE ii : unsigned(3 DOWNTO 0);
VARIABLE l_3 : vector_of_signed24(0 TO 6);
VARIABLE div_temp : vector_of_signed43(0 TO 6);
VARIABLE l_4 : vector_of_signed24(0 TO 8);
VARIABLE div_temp_0 : vector_of_signed48(0 TO 8);
VARIABLE l_5 : vector_of_signed24(0 TO 8);
VARIABLE div_temp_1 : vector_of_signed48(0 TO 8);
VARIABLE add_temp_1 : vector_of_signed32(0 TO 6);
VARIABLE sub_cast : vector_of_signed32(0 TO 6);
VARIABLE sub_cast_0 : vector_of_signed32(0 TO 6);
VARIABLE add_temp_2 : vector_of_signed32(0 TO 6);
VARIABLE sub_cast_1 : vector_of_signed32(0 TO 6);
VARIABLE sub_cast_2 : vector_of_signed32(0 TO 6);
VARIABLE sub_cast_3 : vector_of_signed32(0 TO 6);
VARIABLE slice_cast : vector_of_signed9(0 TO 6);
VARIABLE slice_cast_0 : vector_of_signed43(0 TO 6);
VARIABLE slice_cast_1 : vector_of_signed43(0 TO 6);
VARIABLE sub_cast_4 : vector_of_signed32(0 TO 6);
VARIABLE cast : vector_of_signed9(0 TO 6);
VARIABLE cast_0 : vector_of_signed43(0 TO 6);
VARIABLE add_temp_3 : vector_of_signed32(0 TO 5);
VARIABLE sub_cast_5 : vector_of_signed32(0 TO 6);
VARIABLE cast_1 : vector_of_signed46(0 TO 6);
VARIABLE add_temp_4 : vector_of_signed32(0 TO 5);
VARIABLE sub_cast_6 : vector_of_unsigned4(0 TO 5);
VARIABLE sub_cast_7 : vector_of_unsigned4(0 TO 5);
VARIABLE sub_cast_8 : vector_of_unsigned4(0 TO 5);
VARIABLE add_cast : vector_of_unsigned4(0 TO 5);
VARIABLE add_temp_5 : vector_of_signed32(0 TO 6);
VARIABLE sub_cast_9 : vector_of_unsigned4(0 TO 5);
VARIABLE sub_cast_10 : vector_of_signed49(0 TO 6);
VARIABLE mul_temp : vector_of_signed48(0 TO 6);
VARIABLE sub_cast_11 : vector_of_signed49(0 TO 6);
VARIABLE sub_temp : vector_of_signed49(0 TO 6);
VARIABLE add_cast_0 : vector_of_unsigned4(0 TO 5);
VARIABLE cast_2 : vector_of_signed32(0 TO 8);
VARIABLE add_cast_1 : vector_of_signed32(0 TO 8);
VARIABLE add_cast_2 : vector_of_signed32(0 TO 8);
VARIABLE cast_3 : vector_of_signed32(0 TO 8);
VARIABLE cast_4 : vector_of_signed32(0 TO 8);
VARIABLE add_cast_3 : vector_of_signed32(0 TO 8);
VARIABLE add_cast_4 : vector_of_signed32(0 TO 8);
VARIABLE sub_cast_12 : vector_of_signed32(0 TO 8);
VARIABLE sub_cast_13 : vector_of_signed32(0 TO 8);
VARIABLE cast_5 : vector_of_signed32(0 TO 8);
VARIABLE add_temp_6 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_5 : vector_of_signed64(0 TO 7);
VARIABLE add_cast_6 : vector_of_signed64(0 TO 7);
VARIABLE add_cast_7 : vector_of_signed52(0 TO 7);
VARIABLE add_cast_8 : vector_of_signed64(0 TO 7);
VARIABLE add_cast_9 : vector_of_signed64(0 TO 7);
VARIABLE mul_temp_0 : vector_of_signed48(0 TO 7);
VARIABLE add_cast_10 : vector_of_signed52(0 TO 7);
VARIABLE add_temp_7 : vector_of_signed52(0 TO 7);
VARIABLE sub_cast_14 : vector_of_signed32(0 TO 8);
VARIABLE sub_cast_15 : vector_of_signed32(0 TO 8);
VARIABLE cast_6 : vector_of_signed32(0 TO 30);
VARIABLE add_temp_8 : vector_of_signed32(0 TO 7);
VARIABLE add_temp_9 : vector_of_signed32(0 TO 30);
VARIABLE add_temp_10 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_11 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_12 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_16 : vector_of_signed49(0 TO 30);
VARIABLE add_cast_13 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_17 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_14 : vector_of_signed32(0 TO 30);
VARIABLE mul_temp_1 : vector_of_signed48(0 TO 30);
VARIABLE sub_cast_18 : vector_of_signed49(0 TO 30);
VARIABLE sub_temp_0 : vector_of_signed49(0 TO 30);
VARIABLE cast_7 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_19 : vector_of_signed32(0 TO 8);
VARIABLE slice_cast_2 : vector_of_signed48(0 TO 8);
VARIABLE slice_cast_3 : vector_of_signed48(0 TO 8);
VARIABLE sub_cast_20 : vector_of_signed32(0 TO 8);
VARIABLE cast_8 : vector_of_signed48(0 TO 8);
VARIABLE cast_9 : vector_of_signed32(0 TO 30);
VARIABLE add_temp_11 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_15 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_16 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_21 : vector_of_signed49(0 TO 30);
VARIABLE add_cast_17 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_22 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_18 : vector_of_signed32(0 TO 30);
VARIABLE mul_temp_2 : vector_of_signed48(0 TO 30);
VARIABLE sub_cast_23 : vector_of_signed49(0 TO 30);
VARIABLE sub_temp_1 : vector_of_signed49(0 TO 30);
VARIABLE sub_cast_24 : vector_of_signed32(0 TO 8);
VARIABLE cast_10 : vector_of_signed62(0 TO 8);
VARIABLE sub_cast_25 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_26 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_27 : vector_of_signed49(0 TO 30);
VARIABLE sub_cast_28 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_19 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_29 : vector_of_signed32(0 TO 30);
VARIABLE mul_temp_3 : vector_of_signed48(0 TO 30);
VARIABLE sub_cast_30 : vector_of_signed49(0 TO 30);
VARIABLE sub_temp_2 : vector_of_signed49(0 TO 30);
VARIABLE add_temp_12 : vector_of_signed32(0 TO 7);
VARIABLE add_cast_20 : vector_of_unsigned4(0 TO 7);
VARIABLE sub_cast_31 : vector_of_unsigned7(0 TO 7);
VARIABLE sub_cast_32 : vector_of_signed32(0 TO 7);
VARIABLE sub_cast_33 : vector_of_signed32(0 TO 8);
VARIABLE slice_cast_4 : vector_of_signed48(0 TO 8);
VARIABLE slice_cast_5 : vector_of_signed48(0 TO 8);
VARIABLE sub_cast_34 : vector_of_signed32(0 TO 8);
VARIABLE cast_11 : vector_of_signed48(0 TO 8);
VARIABLE cast_12 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_35 : vector_of_signed32(0 TO 8);
VARIABLE cast_13 : vector_of_signed62(0 TO 8);
VARIABLE sub_cast_36 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_37 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_38 : vector_of_signed49(0 TO 30);
VARIABLE sub_cast_39 : vector_of_signed32(0 TO 30);
VARIABLE add_cast_21 : vector_of_signed32(0 TO 30);
VARIABLE sub_cast_40 : vector_of_signed32(0 TO 30);
VARIABLE mul_temp_4 : vector_of_signed48(0 TO 30);
VARIABLE sub_cast_41 : vector_of_signed49(0 TO 30);
VARIABLE sub_temp_3 : vector_of_signed49(0 TO 30);
BEGIN
--HDL code generation from MATLAB function: LUDecomposition_fixpt
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- %
-- Generated by MATLAB 8.5 and Fixed-Point Designer 5.0 %
-- %
--%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- persistent ud1;
-- if isempty(ud1)
-- ud1 = zeros(9,1);
-- end
--
-- persistent cnt;
--
-- if isempty(cnt)
-- cnt = 0;
-- end
--
-- cnt = cnt + 1;
--
-- if cnt<=uint8(9)
-- ud1(cnt)=A;
-- end
--
-- %%%%%%%%%Start LU Decomposition without pivoting %%%%%%%%%%%%%
-- if (cnt==9)
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- a11=ud1(1);a12=ud1(2);a13=ud1(3);
-- a21=ud1(4);a22=ud1(5);a23=ud1(6);
-- a31=ud1(7);a32=ud1(8);a33=ud1(9);
-- %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-- A=[a11 a12 a13; a21 a22 a23; a31 a32 a33];
A(0) := resize(a11_unsigned, 8);
A(8) := resize(a12_unsigned, 8);
A(16) := resize(a13_unsigned, 8);
A(24) := resize(a14_unsigned, 8);
A(32) := resize(a15_unsigned, 8);
A(40) := resize(a16_unsigned, 8);
A(48) := resize(a17_unsigned, 8);
A(56) := resize(a18_unsigned, 8);
A(1) := resize(a21_unsigned, 8);
A(9) := resize(a22_unsigned, 8);
A(17) := resize(a23_unsigned, 8);
A(25) := resize(a24_unsigned, 8);
A(33) := resize(a25_unsigned, 8);
A(41) := a26_unsigned;
A(49) := resize(a27_unsigned, 8);
A(57) := resize(a28_unsigned, 8);
A(2) := resize(a31_unsigned, 8);
A(10) := resize(a32_unsigned, 8);
A(18) := resize(a33_unsigned, 8);
A(26) := resize(a34_unsigned, 8);
A(34) := resize(a35_unsigned, 8);
A(42) := resize(a36_unsigned, 8);
A(50) := resize(a37_unsigned, 8);
A(58) := resize(a38_unsigned, 8);
A(3) := resize(a41_unsigned, 8);
A(11) := resize(a42_unsigned, 8);
A(19) := resize(a43_unsigned, 8);
A(27) := resize(a44_unsigned, 8);
A(35) := resize(a45_unsigned, 8);
A(43) := resize(a46_unsigned, 8);
A(51) := resize(a47_unsigned, 8);
A(59) := resize(a48_unsigned, 8);
A(4) := resize(a51_unsigned, 8);
A(12) := resize(a52_unsigned, 8);
A(20) := resize(a53_unsigned, 8);
A(28) := resize(a54_unsigned, 8);
A(36) := a55_unsigned;
A(44) := resize(a56_unsigned, 8);
A(52) := resize(a57_unsigned, 8);
A(60) := resize(a58_unsigned, 8);
A(5) := resize(a61_unsigned, 8);
A(13) := resize(a62_unsigned, 8);
A(21) := resize(a63_unsigned, 8);
A(29) := resize(a64_unsigned, 8);
A(37) := resize(a65_unsigned, 8);
A(45) := resize(a66_unsigned, 8);
A(53) := resize(a67_unsigned, 8);
A(61) := resize(a68_unsigned, 8);
A(6) := resize(a71_unsigned, 8);
A(14) := resize(a72_unsigned, 8);
A(22) := resize(a73_unsigned, 8);
A(30) := resize(a74_unsigned, 8);
A(38) := resize(a75_unsigned, 8);
A(46) := resize(a76_unsigned, 8);
A(54) := resize(a77_unsigned, 8);
A(62) := resize(a78_unsigned, 8);
A(7) := resize(a81_unsigned, 8);
A(15) := resize(a82_unsigned, 8);
A(23) := resize(a83_unsigned, 8);
A(31) := resize(a84_unsigned, 8);
A(39) := resize(a85_unsigned, 8);
A(47) := resize(a86_unsigned, 8);
A(55) := resize(a87_unsigned, 8);
A(63) := resize(a88_unsigned, 8);
-- n=3;
L := (OTHERS => to_signed(16#000000#, 24));
L(0) := signed(resize(A(0) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
l_0 := L;
if(clock='1' and clock'event) then
FOR j_0 IN 0 TO 6 LOOP
add_temp_1(j_0) := to_signed(j_0 + 2, 32);
j := unsigned(add_temp_1(j_0)(3 DOWNTO 0));
sub_cast(j_0) := signed(resize(j, 32));
sub_cast_0(j_0) := signed(resize(j, 32));
l_0(to_integer(sub_cast(j_0) - 1)) := signed(resize(A(to_integer(sub_cast_0(j_0) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
END LOOP;
U := nc;
FOR j_2 IN 0 TO 6 LOOP
add_temp_2(j_2) := to_signed(j_2 + 2, 32);
j_1 := unsigned(add_temp_2(j_2)(3 DOWNTO 0));
sub_cast_1(j_2) := signed(resize(j_1, 32));
sub_cast_2(j_2) := signed(resize(j_1, 32));
L(to_integer(sub_cast_1(j_2) - 1)) := signed(resize(A(to_integer(sub_cast_2(j_2) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
l_3(j_2) := L(0);
sub_cast_3(j_2) := signed(resize(j_1, 32));
slice_cast(j_2) := signed(resize(A(to_integer(resize(8 * (sub_cast_3(j_2) - 1), 31))), 9));
slice_cast_0(j_2) := slice_cast(j_2) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF slice_cast_0(j_2)(42) = l_3(j_2)(23) THEN
slice_cast_1(j_2) := c_divbyzero_p_0;
ELSE
slice_cast_1(j_2) := c_divbyzero_n_0;
END IF;
sub_cast_4(j_2) := signed(resize(j_1, 32));
cast(j_2) := signed(resize(A(to_integer(resize(8 * (sub_cast_4(j_2) - 1), 31))), 9));
cast_0(j_2) := cast(j_2) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF l_3(j_2) = 0 THEN
div_temp(j_2) := slice_cast_1(j_2);
ELSE
div_temp(j_2) := cast_0(j_2) / l_3(j_2);
END IF;
sub_cast_5(j_2) := signed(resize(j_1, 32));
cast_1(j_2) := resize(div_temp(j_2), 46);
U(to_integer(resize(8 * (sub_cast_5(j_2) - 1), 31))) := cast_1(j_2)(37 DOWNTO 14);
END LOOP;
u_0 := U;
l_1 := l_0;
FOR j_4 IN 0 TO 5 LOOP
add_temp_3(j_4) := to_signed(j_4 + 2, 32);
j_3 := add_temp_3(j_4)(5 DOWNTO 0);
t_0 := unsigned(j_3(3 DOWNTO 0));
sub_cast_6(j_4) := unsigned(j_3(3 DOWNTO 0));
tmp := resize(sub_cast_6(j_4), 5) - to_unsigned(16#01#, 5);
sub_cast_7(j_4) := unsigned(j_3(3 DOWNTO 0));
tmp_0 := resize(sub_cast_7(j_4), 5) - to_unsigned(16#01#, 5);
add_cast(j_4) := unsigned(j_3(3 DOWNTO 0));
add_temp := resize(add_cast(j_4), 5) + to_unsigned(16#01#, 5);
FOR i IN 0 TO 8 LOOP
tmp_1 := unsigned(to_signed(i, 32)(3 DOWNTO 0));
cast_2(i) := signed(resize(t_0, 32));
IF to_signed(i, 32) >= cast_2(i) THEN
add_cast_1(i) := signed(resize(tmp_1, 32));
add_cast_2(i) := signed(resize(tmp_1, 32));
l_1(to_integer((add_cast_1(i) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1)) := signed(resize(A(to_integer((add_cast_2(i) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
FOR k IN 0 TO 30 LOOP
add_temp_6(k) := to_signed(k + 1, 32);
tmp_2 := unsigned(add_temp_6(k)(4 DOWNTO 0));
cast_6(k) := signed(resize(tmp_0, 32));
IF to_signed(k + 1, 32) <= cast_6(k) THEN
add_cast_11(k) := signed(resize(tmp_1, 32));
add_cast_12(k) := signed(resize(tmp_1, 32));
sub_cast_16(k) := resize(l_1(to_integer((add_cast_12(k) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 49);
add_cast_13(k) := signed(resize(tmp_1, 32));
sub_cast_17(k) := signed(resize(tmp_2, 32));
add_cast_14(k) := signed(resize(tmp_2, 32));
mul_temp_1(k) := l_1(to_integer((add_cast_13(k) + resize(8 * (sub_cast_17(k) - 1), 32)) - 1)) * u_0(to_integer((add_cast_14(k) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1));
sub_cast_18(k) := resize(mul_temp_1(k), 49);
sub_temp_0(k) := sub_cast_16(k) - sub_cast_18(k);
l_1(to_integer((add_cast_11(k) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1)) := sub_temp_0(k)(33 DOWNTO 10);
END IF;
END LOOP;
END IF;
END LOOP;
FOR i_0 IN 0 TO 30 LOOP
add_temp_10(i_0) := to_signed(i_0 + 1, 32);
tmp_4 := unsigned(add_temp_10(i_0)(4 DOWNTO 0));
cast_9(i_0) := signed(resize(tmp, 32));
IF to_signed(i_0 + 1, 32) <= cast_9(i_0) THEN
sub_cast_25(i_0) := signed(resize(tmp_3, 32));
sub_cast_26(i_0) := signed(resize(tmp_3, 32));
sub_cast_27(i_0) := resize(u_0(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_26(i_0) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 49);
sub_cast_28(i_0) := signed(resize(tmp_4, 32));
add_cast_19(i_0) := signed(resize(tmp_4, 32));
sub_cast_29(i_0) := signed(resize(tmp_3, 32));
mul_temp_3(i_0) := l_1(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_28(i_0) - 1), 32)) - 1)) * u_0(to_integer((add_cast_19(i_0) + resize(8 * (sub_cast_29(i_0) - 1), 32)) - 1));
sub_cast_30(i_0) := resize(mul_temp_3(i_0), 49);
sub_temp_2(i_0) := sub_cast_27(i_0) - sub_cast_30(i_0);
u_0(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_25(i_0) - 1), 32)) - 1)) := sub_temp_2(i_0)(33 DOWNTO 10);
END IF;
END LOOP;
l_4(k_0) := l_1(to_integer((resize(j_3, 32) + resize(8 * (resize(j_3, 32) - 1), 32)) - 1));
sub_cast_19(k_0) := signed(resize(tmp_3, 32));
slice_cast_2(k_0) := u_0(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_19(k_0) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF slice_cast_2(k_0)(47) = l_4(k_0)(23) THEN
slice_cast_3(k_0) := C_divbyzero_p;
ELSE
slice_cast_3(k_0) := C_divbyzero_n;
END IF;
sub_cast_20(k_0) := signed(resize(tmp_3, 32));
cast_8(k_0) := u_0(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_20(k_0) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF l_4(k_0) = 0 THEN
div_temp_0(k_0) := slice_cast_3(k_0);
ELSE
div_temp_0(k_0) := cast_8(k_0) / l_4(k_0);
END IF;
sub_cast_24(k_0) := signed(resize(tmp_3, 32));
cast_10(k_0) := resize(div_temp_0(k_0), 62);
u_0(to_integer((resize(j_3, 32) + resize(8 * (sub_cast_24(k_0) - 1), 32)) - 1)) := cast_10(k_0)(37 DOWNTO 14);
END IF;
END LOOP;
END LOOP;
FOR j_6 IN 0 TO 5 LOOP
add_temp_4(j_6) := to_signed(j_6 + 2, 32);
j_5 := add_temp_4(j_6)(5 DOWNTO 0);
t_1 := unsigned(j_5(3 DOWNTO 0));
sub_cast_8(j_6) := unsigned(j_5(3 DOWNTO 0));
tmp_5 := resize(sub_cast_8(j_6), 5) - to_unsigned(16#01#, 5);
sub_cast_9(j_6) := unsigned(j_5(3 DOWNTO 0));
tmp_6 := resize(sub_cast_9(j_6), 5) - to_unsigned(16#01#, 5);
add_cast_0(j_6) := unsigned(j_5(3 DOWNTO 0));
add_temp_0 := resize(add_cast_0(j_6), 5) + to_unsigned(16#01#, 5);
FOR i_1 IN 0 TO 8 LOOP
tmp_7 := unsigned(to_signed(i_1, 32)(3 DOWNTO 0));
cast_3(i_1) := signed(resize(t_1, 32));
IF to_signed(i_1, 32) >= cast_3(i_1) THEN
add_cast_3(i_1) := signed(resize(tmp_7, 32));
add_cast_4(i_1) := signed(resize(tmp_7, 32));
l_0(to_integer((add_cast_3(i_1) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1)) := signed(resize(A(to_integer((add_cast_4(i_1) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
FOR k_1 IN 0 TO 30 LOOP
add_temp_9(k_1) := to_signed(k_1 + 1, 32);
tmp_8 := unsigned(add_temp_9(k_1)(4 DOWNTO 0));
cast_7(k_1) := signed(resize(tmp_6, 32));
IF to_signed(k_1 + 1, 32) <= cast_7(k_1) THEN
add_cast_15(k_1) := signed(resize(tmp_7, 32));
add_cast_16(k_1) := signed(resize(tmp_7, 32));
sub_cast_21(k_1) := resize(l_0(to_integer((add_cast_16(k_1) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 49);
add_cast_17(k_1) := signed(resize(tmp_7, 32));
sub_cast_22(k_1) := signed(resize(tmp_8, 32));
add_cast_18(k_1) := signed(resize(tmp_8, 32));
mul_temp_2(k_1) := l_0(to_integer((add_cast_17(k_1) + resize(8 * (sub_cast_22(k_1) - 1), 32)) - 1)) * U(to_integer((add_cast_18(k_1) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1));
sub_cast_23(k_1) := resize(mul_temp_2(k_1), 49);
sub_temp_1(k_1) := sub_cast_21(k_1) - sub_cast_23(k_1);
l_0(to_integer((add_cast_15(k_1) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1)) := sub_temp_1(k_1)(33 DOWNTO 10);
END IF;
END LOOP;
END IF;
END LOOP;
FOR k_2 IN 0 TO 8 LOOP
tmp_9 := unsigned(to_signed(k_2, 32)(4 DOWNTO 0));
cast_5(k_2) := signed(resize(add_temp_0, 32));
IF to_signed(k_2, 32) >= cast_5(k_2) THEN
sub_cast_14(k_2) := signed(resize(tmp_9, 32));
sub_cast_15(k_2) := signed(resize(tmp_9, 32));
U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_14(k_2) - 1), 32)) - 1)) := signed(resize(A(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_15(k_2) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
FOR i_2 IN 0 TO 30 LOOP
add_temp_11(i_2) := to_signed(i_2 + 1, 32);
tmp_10 := unsigned(add_temp_11(i_2)(4 DOWNTO 0));
cast_12(i_2) := signed(resize(tmp_5, 32));
IF to_signed(i_2 + 1, 32) <= cast_12(i_2) THEN
sub_cast_36(i_2) := signed(resize(tmp_9, 32));
sub_cast_37(i_2) := signed(resize(tmp_9, 32));
sub_cast_38(i_2) := resize(U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_37(i_2) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 49);
sub_cast_39(i_2) := signed(resize(tmp_10, 32));
add_cast_21(i_2) := signed(resize(tmp_10, 32));
sub_cast_40(i_2) := signed(resize(tmp_9, 32));
mul_temp_4(i_2) := l_0(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_39(i_2) - 1), 32)) - 1)) * U(to_integer((add_cast_21(i_2) + resize(8 * (sub_cast_40(i_2) - 1), 32)) - 1));
sub_cast_41(i_2) := resize(mul_temp_4(i_2), 49);
sub_temp_3(i_2) := sub_cast_38(i_2) - sub_cast_41(i_2);
U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_36(i_2) - 1), 32)) - 1)) := sub_temp_3(i_2)(33 DOWNTO 10);
END IF;
END LOOP;
l_5(k_2) := l_0(to_integer((resize(j_5, 32) + resize(8 * (resize(j_5, 32) - 1), 32)) - 1));
sub_cast_33(k_2) := signed(resize(tmp_9, 32));
slice_cast_4(k_2) := U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_33(k_2) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF slice_cast_4(k_2)(47) = l_5(k_2)(23) THEN
slice_cast_5(k_2) := C_divbyzero_p;
ELSE
slice_cast_5(k_2) := C_divbyzero_n;
END IF;
sub_cast_34(k_2) := signed(resize(tmp_9, 32));
cast_11(k_2) := U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_34(k_2) - 1), 32)) - 1)) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0';
IF l_5(k_2) = 0 THEN
div_temp_1(k_2) := slice_cast_5(k_2);
ELSE
div_temp_1(k_2) := cast_11(k_2) / l_5(k_2);
END IF;
sub_cast_35(k_2) := signed(resize(tmp_9, 32));
cast_13(k_2) := resize(div_temp_1(k_2), 62);
U(to_integer((resize(j_5, 32) + resize(8 * (sub_cast_35(k_2) - 1), 32)) - 1)) := cast_13(k_2)(37 DOWNTO 14);
END IF;
END LOOP;
END LOOP;
l_1(63) := signed(resize(A(63) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 24));
FOR k_4 IN 0 TO 6 LOOP
add_temp_5(k_4) := to_signed(k_4 + 1, 32);
k_3 := add_temp_5(k_4)(5 DOWNTO 0);
sub_cast_10(k_4) := resize(l_1(63) & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0' & '0', 49);
mul_temp(k_4) := l_1(to_integer(7 + resize(8 * (resize(k_3, 32) - 1), 32))) * U(to_integer(resize(k_3, 32) + 55));
sub_cast_11(k_4) := resize(mul_temp(k_4), 49);
sub_temp(k_4) := sub_cast_10(k_4) - sub_cast_11(k_4);
l_1(63) := sub_temp(k_4)(33 DOWNTO 10);
END LOOP;
c := (OTHERS => to_signed(0, 51));
FOR l_2 IN 0 TO 7 LOOP
FOR m IN 0 TO 7 LOOP
FOR k_5 IN 0 TO 7 LOOP
add_cast_5(k_5) := resize(to_signed(m, 32) & '0' & '0' & '0', 64);
add_cast_6(k_5) := resize(to_signed(m, 32) & '0' & '0' & '0', 64);
add_cast_7(k_5) := resize(c(to_integer(to_signed(l_2, 32) + resize(add_cast_6(k_5), 32))), 52);
add_cast_8(k_5) := resize(to_signed(k_5, 32) & '0' & '0' & '0', 64);
add_cast_9(k_5) := resize(to_signed(m, 32) & '0' & '0' & '0', 64);
mul_temp_0(k_5) := l_1(to_integer(to_signed(l_2, 32) + resize(add_cast_8(k_5), 32))) * U(to_integer(to_signed(k_5, 32) + resize(add_cast_9(k_5), 32)));
add_cast_10(k_5) := resize(mul_temp_0(k_5), 52);
add_temp_7(k_5) := add_cast_7(k_5) + add_cast_10(k_5);
c(to_integer(to_signed(l_2, 32) + resize(add_cast_5(k_5), 32))) := add_temp_7(k_5)(50 DOWNTO 0);
END LOOP;
END LOOP;
END LOOP;
FOR t_2 IN 0 TO 63 LOOP
LU(t_2) := unsigned(c(t_2)(27 DOWNTO 10));
END LOOP;
LU11 := to_unsigned(16#00000#, 18);
FOR ii_0 IN 0 TO 7 LOOP
add_temp_8(ii_0) := to_signed(ii_0 + 1, 32);
ii := unsigned(add_temp_8(ii_0)(3 DOWNTO 0));
FOR jj IN 0 TO 7 LOOP
add_temp_12(jj) := to_signed(jj + 1, 32);
add_cast_20(jj) := unsigned(add_temp_12(jj)(3 DOWNTO 0));
sub_cast_31(jj) := resize(resize(to_unsigned(16#8#, 4) * (resize(ii, 5) - to_unsigned(16#01#, 5)), 10) + resize(add_cast_20(jj), 10), 7);
sub_cast_32(jj) := signed(resize(sub_cast_31(jj), 32));
LU11 := LU(to_integer(sub_cast_32(jj) - 1));
END LOOP;
END LOOP;
LM<=l_0;
UM<=u_0;
LU1_tmp <= LU11;
end if;
END PROCESS LUDecomposition_fixpt_1_output;
LU1 <= std_logic_vector(LU1_tmp);
END rtl;

采纳的回答

Tim McBrayer
Tim McBrayer 2015-9-21
It appears that your MATLAB code has 64 separate inputs, and that fixpt conversion is selecting anywhere from 3 to 7 bits per input. if I guess a median value of 5 bits per pin, this accounts for 320 pins. You will need to stream these inputs in one at a time, most likely, either using them in a streaming fashion or storing them in a RAM, as your algorithm requires.
In addition, you are generating two output vectors that are 24 * 64 bits, which is 1536 pins for each of these two outputs. Once again, you need to serialize the outputs and stream the data out rather than requesting such large arrays. Worst case you can use a RAM to buffer the outputs and start streaming them out once enough data has been calculated.
I don't know the internals of your algorithm, but you do. You may need no buffering, line/column buffers, or full IO matrix buffering; it depends on your algorithm and implementation. In any case you should be able to drop the input pin requirement to that needed for a single input element. The two outputs should likewise be able to be reduced to a pair of 64-bit streaming outputs. If pins are really restricted you should be able to multiplex the output, and reduce the 128 bits to 64.

更多回答(0 个)

类别

Help CenterFile Exchange 中查找有关 Matrices and Arrays 的更多信息

标签

尚未输入任何标签。

产品

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by