nextpnr/himbaechel/uarch/xilinx/mmcm_tables.cc

145 lines
8.7 KiB
C++

/*
* nextpnr -- Next Generation Place and Route
*
* Copyright (C) 2019-2023 gatecat <gatecat@ds0.me>
* Copyright (C) 2023 Hans Baier <hansfbaier@gmail.com>
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*
*/
#include "nextpnr.h"
#include "xilinx.h"
NEXTPNR_NAMESPACE_BEGIN
namespace Xc7MMCM {
extern const uint16_t filter_lookup_low[] = {
0b0010111100, // 1
0b0010111100, // 2
0b0010111100, // 3
0b0010111100, // 4
0b0010011100, // ....
0b0010101100, 0b0010110100, 0b0010001100, 0b0010010100, 0b0010010100, 0b0010100100, 0b0010111000, 0b0010111000,
0b0010111000, 0b0010111000, 0b0010000100, 0b0010000100, 0b0010000100, 0b0010011000, 0b0010011000, 0b0010011000,
0b0010011000, 0b0010011000, 0b0010011000, 0b0010011000, 0b0010101000, 0b0010101000, 0b0010101000, 0b0010101000,
0b0010101000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000,
0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000, 0b0010110000,
0b0010110000, 0b0010110000, 0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000,
0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000, 0b0010001000,
0b0010001000, // ....
0b0010001000, // 61
0b0010001000, // 62
0b0010001000, // 63
0b0010001000 // 64
};
extern const uint16_t filter_lookup_low_ss[] = {
0b0010111111, // 1
0b0010111111, // 2
0b0010111111, // 3
0b0010111111, // 4
0b0010011111, // ....
0b0010101111, 0b0010110111, 0b0010001111, 0b0010010111, 0b0010010111, 0b0010100111, 0b0010111011, 0b0010111011,
0b0010111011, 0b0010111011, 0b0010000111, 0b0010000111, 0b0010000111, 0b0010011011, 0b0010011011, 0b0010011011,
0b0010011011, 0b0010011011, 0b0010011011, 0b0010011011, 0b0010101011, 0b0010101011, 0b0010101011, 0b0010101011,
0b0010101011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011,
0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011, 0b0010110011,
0b0010110011, 0b0010110011, 0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011,
0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011, 0b0010001011,
0b0010001011, // ....
0b0010001011, // 61
0b0010001011, // 62
0b0010001011, // 63
0b0010001011 // 64
};
extern const uint16_t filter_lookup_high[] = {
0b0010111100, // 1
0b0100111100, // 2
0b0101101100, // 3
0b0111011100, // 4
0b1101011100, // ....
0b1110101100, 0b1110110100, 0b1111001100, 0b1110010100, 0b1111010100, 0b1111100100, 0b1101000100, 0b1111100100,
0b1111100100, 0b1111100100, 0b1111100100, 0b1111010100, 0b1111010100, 0b1100000100, 0b1100000100, 0b1100000100,
0b0101110000, 0b0101110000, 0b0101110000, 0b0101110000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000,
0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000,
0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0010100000, 0b0010100000, 0b0010100000, 0b0010100000,
0b0010100000, 0b0111000100, 0b0111000100, 0b0100110000, 0b0100110000, 0b0100110000, 0b0100110000, 0b0110000100,
0b0110000100, 0b0101011000, 0b0101011000, 0b0101011000, 0b0010010000, 0b0010010000,
0b0010010000, // ....
0b0010010000, // 61
0b0100101000, // 62
0b0011110000, // 63
0b0011110000 // 64
};
extern const uint16_t filter_lookup_optimized[] = {
0b0010111100, // 1
0b0100111100, // 2
0b0101101100, // 3
0b0111011100, // 4
0b1101011100, // ....
0b1110101100, 0b1110110100, 0b1111001100, 0b1110010100, 0b1111010100, 0b1111100100, 0b1101000100, 0b1111100100,
0b1111100100, 0b1111100100, 0b1111100100, 0b1111010100, 0b1111010100, 0b1100000100, 0b1100000100, 0b1100000100,
0b0101110000, 0b0101110000, 0b0101110000, 0b0101110000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000,
0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000,
0b0011010000, 0b0011010000, 0b0011010000, 0b0011010000, 0b0010100000, 0b0010100000, 0b0010100000, 0b0010100000,
0b0010100000, 0b0111000100, 0b0111000100, 0b0100110000, 0b0100110000, 0b0100110000, 0b0100110000, 0b0110000100,
0b0110000100, 0b0101011000, 0b0101011000, 0b0101011000, 0b0010010000, 0b0010010000,
0b0010010000, // ....
0b0010010000, // 61
0b0100101000, // 62
0b0011110000, // 63
0b0011110000 // 64
};
extern const int64_t lk_table[] = {
// LockRefDly(5) LockFBDly(5) LockCnt(10) LockSatHigh(10) UnlockCnt(10)
0b0011000110111110100011111010010000000001UL, 0b0011000110111110100011111010010000000001UL,
0b0100001000111110100011111010010000000001UL, 0b0101101011111110100011111010010000000001UL,
0b0111001110111110100011111010010000000001UL, 0b1000110001111110100011111010010000000001UL,
0b1001110011111110100011111010010000000001UL, 0b1011010110111110100011111010010000000001UL,
0b1100111001111110100011111010010000000001UL, 0b1110011100111110100011111010010000000001UL,
0b1111111111111000010011111010010000000001UL, 0b1111111111110011100111111010010000000001UL,
0b1111111111101110111011111010010000000001UL, 0b1111111111101011110011111010010000000001UL,
0b1111111111101000101011111010010000000001UL, 0b1111111111100111000111111010010000000001UL,
0b1111111111100011111111111010010000000001UL, 0b1111111111100010011011111010010000000001UL,
0b1111111111100000110111111010010000000001UL, 0b1111111111011111010011111010010000000001UL,
0b1111111111011101101111111010010000000001UL, 0b1111111111011100001011111010010000000001UL,
0b1111111111011010100111111010010000000001UL, 0b1111111111011001000011111010010000000001UL,
0b1111111111011001000011111010010000000001UL, 0b1111111111010111011111111010010000000001UL,
0b1111111111010101111011111010010000000001UL, 0b1111111111010101111011111010010000000001UL,
0b1111111111010100010111111010010000000001UL, 0b1111111111010100010111111010010000000001UL,
0b1111111111010010110011111010010000000001UL, 0b1111111111010010110011111010010000000001UL,
0b1111111111010010110011111010010000000001UL, 0b1111111111010001001111111010010000000001UL,
0b1111111111010001001111111010010000000001UL, 0b1111111111010001001111111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL, 0b1111111111001111101011111010010000000001UL,
0b1111111111001111101011111010010000000001UL};
} // namespace Xc7MMCM
NEXTPNR_NAMESPACE_END