From e908a20ed81ddc29c5b7accd9db7694726a024c0 Mon Sep 17 00:00:00 2001 From: Colin <> Date: Fri, 2 May 2025 21:49:45 +0800 Subject: [PATCH] Add constraints. --- constraints/MEMORY_CH0.ucf | 117 +++++++++++++++++++++++++++ constraints/MEMORY_CH1.ucf | 117 +++++++++++++++++++++++++++ constraints/physical_pinout.xlsx | Bin 0 -> 12951 bytes constraints/ypcb003381p1.xdc | 132 +++++++++++++++++++++++++++++++ 4 files changed, 366 insertions(+) create mode 100644 constraints/MEMORY_CH0.ucf create mode 100644 constraints/MEMORY_CH1.ucf create mode 100644 constraints/physical_pinout.xlsx create mode 100644 constraints/ypcb003381p1.xdc diff --git a/constraints/MEMORY_CH0.ucf b/constraints/MEMORY_CH0.ucf new file mode 100644 index 0000000..25d4bbb --- /dev/null +++ b/constraints/MEMORY_CH0.ucf @@ -0,0 +1,117 @@ +NET "ddr3_dq[0]" LOC = "AG17" | ; +NET "ddr3_dq[1]" LOC = "AG16" | ; +NET "ddr3_dq[2]" LOC = "AH17" | ; +NET "ddr3_dq[3]" LOC = "AJ19" | ; +NET "ddr3_dq[4]" LOC = "AH18" | ; +NET "ddr3_dq[5]" LOC = "AH19" | ; +NET "ddr3_dq[6]" LOC = "AJ16" | ; +NET "ddr3_dq[7]" LOC = "AJ17" | ; +NET "ddr3_dq[8]" LOC = "AL20" | ; +NET "ddr3_dq[9]" LOC = "AN17" | ; +NET "ddr3_dq[10]" LOC = "AL19" | ; +NET "ddr3_dq[11]" LOC = "AM16" | ; +NET "ddr3_dq[12]" LOC = "AL18" | ; +NET "ddr3_dq[13]" LOC = "AL16" | ; +NET "ddr3_dq[14]" LOC = "AM20" | ; +NET "ddr3_dq[15]" LOC = "AN18" | ; +NET "ddr3_dq[16]" LOC = "AL23" | ; +NET "ddr3_dq[17]" LOC = "AN20" | ; +NET "ddr3_dq[18]" LOC = "AK23" | ; +NET "ddr3_dq[19]" LOC = "AP19" | ; +NET "ddr3_dq[20]" LOC = "AN22" | ; +NET "ddr3_dq[21]" LOC = "AN19" | ; +NET "ddr3_dq[22]" LOC = "AM22" | ; +NET "ddr3_dq[23]" LOC = "AP20" | ; +NET "ddr3_dq[24]" LOC = "AJ21" | ; +NET "ddr3_dq[25]" LOC = "AH22" | ; +NET "ddr3_dq[26]" LOC = "AK21" | ; +NET "ddr3_dq[27]" LOC = "AG21" | ; +NET "ddr3_dq[28]" LOC = "AG22" | ; +NET "ddr3_dq[29]" LOC = "AG20" | ; +NET "ddr3_dq[30]" LOC = "AH23" | ; +NET "ddr3_dq[31]" LOC = "AG23" | ; +NET "ddr3_dq[32]" LOC = "AJ32" | ; +NET "ddr3_dq[33]" LOC = "AK32" | ; +NET "ddr3_dq[34]" LOC = "AK31" | ; +NET "ddr3_dq[35]" LOC = "AL30" | ; +NET "ddr3_dq[36]" LOC = "AL34" | ; +NET "ddr3_dq[37]" LOC = "AL31" | ; +NET "ddr3_dq[38]" LOC = "AK34" | ; +NET "ddr3_dq[39]" LOC = "AL29" | ; +NET "ddr3_dq[40]" LOC = "AJ34" | ; +NET "ddr3_dq[41]" LOC = "AH32" | ; +NET "ddr3_dq[42]" LOC = "AJ30" | ; +NET "ddr3_dq[43]" LOC = "AH34" | ; +NET "ddr3_dq[44]" LOC = "AF31" | ; +NET "ddr3_dq[45]" LOC = "AG30" | ; +NET "ddr3_dq[46]" LOC = "AG31" | ; +NET "ddr3_dq[47]" LOC = "AF30" | ; +NET "ddr3_dq[48]" LOC = "AE32" | ; +NET "ddr3_dq[49]" LOC = "AC33" | ; +NET "ddr3_dq[50]" LOC = "AF33" | ; +NET "ddr3_dq[51]" LOC = "AC32" | ; +NET "ddr3_dq[52]" LOC = "AD34" | ; +NET "ddr3_dq[53]" LOC = "AC34" | ; +NET "ddr3_dq[54]" LOC = "AE33" | ; +NET "ddr3_dq[55]" LOC = "AE31" | ; +NET "ddr3_dq[56]" LOC = "AE26" | ; +NET "ddr3_dq[57]" LOC = "AF29" | ; +NET "ddr3_dq[58]" LOC = "AE24" | ; +NET "ddr3_dq[59]" LOC = "AF28" | ; +NET "ddr3_dq[60]" LOC = "AF24" | ; +NET "ddr3_dq[61]" LOC = "AG25" | ; +NET "ddr3_dq[62]" LOC = "AF26" | ; +NET "ddr3_dq[63]" LOC = "AF25" | ; +NET "ddr3_dq[64]" LOC = "AN34" | ; +NET "ddr3_dq[65]" LOC = "AP30" | ; +NET "ddr3_dq[66]" LOC = "AM33" | ; +NET "ddr3_dq[67]" LOC = "AN29" | ; +NET "ddr3_dq[68]" LOC = "AP32" | ; +NET "ddr3_dq[69]" LOC = "AP29" | ; +NET "ddr3_dq[70]" LOC = "AM31" | ; +NET "ddr3_dq[71]" LOC = "AP31" | ; +NET "ddr3_dqs_p[0]" LOC = "AK16" | ; +NET "ddr3_dqs_n[0]" LOC = "AK17" | ; +NET "ddr3_dqs_p[1]" LOC = "AM17" | ; +NET "ddr3_dqs_n[1]" LOC = "AM18" | ; +NET "ddr3_dqs_p[2]" LOC = "AP21" | ; +NET "ddr3_dqs_n[2]" LOC = "AP22" | ; +NET "ddr3_dqs_p[3]" LOC = "AH20" | ; +NET "ddr3_dqs_n[3]" LOC = "AJ20" | ; +NET "ddr3_dqs_p[4]" LOC = "AK33" | ; +NET "ddr3_dqs_n[4]" LOC = "AL33" | ; +NET "ddr3_dqs_p[5]" LOC = "AG33" | ; +NET "ddr3_dqs_n[5]" LOC = "AH33" | ; +NET "ddr3_dqs_p[6]" LOC = "AE34" | ; +NET "ddr3_dqs_n[6]" LOC = "AF34" | ; +NET "ddr3_dqs_p[7]" LOC = "AE27" | ; +NET "ddr3_dqs_n[7]" LOC = "AE28" | ; +NET "ddr3_dqs_p[8]" LOC = "AN32" | ; +NET "ddr3_dqs_n[8]" LOC = "AP33" | ; +NET "ddr3_addr[0]" LOC = "AK27" | ; +NET "ddr3_addr[1]" LOC = "AN23" | ; +NET "ddr3_addr[2]" LOC = "AL24" | ; +NET "ddr3_addr[3]" LOC = "AK26" | ; +NET "ddr3_addr[4]" LOC = "AH24" | ; +NET "ddr3_addr[5]" LOC = "AH25" | ; +NET "ddr3_addr[6]" LOC = "AL26" | ; +NET "ddr3_addr[7]" LOC = "AJ24" | ; +NET "ddr3_addr[8]" LOC = "AJ25" | ; +NET "ddr3_addr[9]" LOC = "AM23" | ; +NET "ddr3_addr[10]" LOC = "AL28" | ; +NET "ddr3_addr[11]" LOC = "AL25" | ; +NET "ddr3_addr[12]" LOC = "AM25" | ; +NET "ddr3_addr[13]" LOC = "AK24" | ; +NET "ddr3_addr[14]" LOC = "AM27" | ; +NET "ddr3_ba[0]" LOC = "AM26" | ; +NET "ddr3_ba[1]" LOC = "AP24" | ; +NET "ddr3_ba[2]" LOC = "AN28" | ; +NET "ddr3_cas_n" LOC = "AP26" | ; +NET "ddr3_ck_n[0]" LOC = "AP25" | ; +NET "ddr3_ck_p[0]" LOC = "AN25" | ; +NET "ddr3_cke[0]" LOC = "AP27" | ; +NET "ddr3_cs_n[0]" LOC = "AK28" | ; +NET "ddr3_odt[0]" LOC = "AK29" | ; +NET "ddr3_ras_n" LOC = "AJ29" | ; +NET "ddr3_reset_n" LOC = "AD31" | ; +NET "ddr3_we_n" LOC = "AN27" | ; diff --git a/constraints/MEMORY_CH1.ucf b/constraints/MEMORY_CH1.ucf new file mode 100644 index 0000000..62c7e7d --- /dev/null +++ b/constraints/MEMORY_CH1.ucf @@ -0,0 +1,117 @@ +NET "ddr3_dq[0]" LOC = "A29" | ; +NET "ddr3_dq[1]" LOC = "B33" | ; +NET "ddr3_dq[2]" LOC = "A31" | ; +NET "ddr3_dq[3]" LOC = "C33" | ; +NET "ddr3_dq[4]" LOC = "C32" | ; +NET "ddr3_dq[5]" LOC = "A30" | ; +NET "ddr3_dq[6]" LOC = "B30" | ; +NET "ddr3_dq[7]" LOC = "A33" | ; +NET "ddr3_dq[8]" LOC = "D31" | ; +NET "ddr3_dq[9]" LOC = "F33" | ; +NET "ddr3_dq[10]" LOC = "D30" | ; +NET "ddr3_dq[11]" LOC = "D29" | ; +NET "ddr3_dq[12]" LOC = "E33" | ; +NET "ddr3_dq[13]" LOC = "E34" | ; +NET "ddr3_dq[14]" LOC = "E31" | ; +NET "ddr3_dq[15]" LOC = "F34" | ; +NET "ddr3_dq[16]" LOC = "B23" | ; +NET "ddr3_dq[17]" LOC = "A21" | ; +NET "ddr3_dq[18]" LOC = "C23" | ; +NET "ddr3_dq[19]" LOC = "B20" | ; +NET "ddr3_dq[20]" LOC = "B22" | ; +NET "ddr3_dq[21]" LOC = "A23" | ; +NET "ddr3_dq[22]" LOC = "C20" | ; +NET "ddr3_dq[23]" LOC = "B21" | ; +NET "ddr3_dq[24]" LOC = "G31" | ; +NET "ddr3_dq[25]" LOC = "G32" | ; +NET "ddr3_dq[26]" LOC = "F29" | ; +NET "ddr3_dq[27]" LOC = "F31" | ; +NET "ddr3_dq[28]" LOC = "E29" | ; +NET "ddr3_dq[29]" LOC = "G33" | ; +NET "ddr3_dq[30]" LOC = "H33" | ; +NET "ddr3_dq[31]" LOC = "H32" | ; +NET "ddr3_dq[32]" LOC = "B18" | ; +NET "ddr3_dq[33]" LOC = "C17" | ; +NET "ddr3_dq[34]" LOC = "C19" | ; +NET "ddr3_dq[35]" LOC = "B16" | ; +NET "ddr3_dq[36]" LOC = "A18" | ; +NET "ddr3_dq[37]" LOC = "A16" | ; +NET "ddr3_dq[38]" LOC = "C18" | ; +NET "ddr3_dq[39]" LOC = "B17" | ; +NET "ddr3_dq[40]" LOC = "K27" | ; +NET "ddr3_dq[41]" LOC = "L24" | ; +NET "ddr3_dq[42]" LOC = "K24" | ; +NET "ddr3_dq[43]" LOC = "L28" | ; +NET "ddr3_dq[44]" LOC = "K26" | ; +NET "ddr3_dq[45]" LOC = "M27" | ; +NET "ddr3_dq[46]" LOC = "L25" | ; +NET "ddr3_dq[47]" LOC = "M26" | ; +NET "ddr3_dq[48]" LOC = "F16" | ; +NET "ddr3_dq[49]" LOC = "E18" | ; +NET "ddr3_dq[50]" LOC = "E16" | ; +NET "ddr3_dq[51]" LOC = "H19" | ; +NET "ddr3_dq[52]" LOC = "H17" | ; +NET "ddr3_dq[53]" LOC = "H20" | ; +NET "ddr3_dq[54]" LOC = "E17" | ; +NET "ddr3_dq[55]" LOC = "H18" | ; +NET "ddr3_dq[56]" LOC = "D20" | ; +NET "ddr3_dq[57]" LOC = "F21" | ; +NET "ddr3_dq[58]" LOC = "E23" | ; +NET "ddr3_dq[59]" LOC = "G21" | ; +NET "ddr3_dq[60]" LOC = "G20" | ; +NET "ddr3_dq[61]" LOC = "D21" | ; +NET "ddr3_dq[62]" LOC = "F20" | ; +NET "ddr3_dq[63]" LOC = "F23" | ; +NET "ddr3_dq[64]" LOC = "L34" | ; +NET "ddr3_dq[65]" LOC = "K34" | ; +NET "ddr3_dq[66]" LOC = "K31" | ; +NET "ddr3_dq[67]" LOC = "K33" | ; +NET "ddr3_dq[68]" LOC = "L31" | ; +NET "ddr3_dq[69]" LOC = "J30" | ; +NET "ddr3_dq[70]" LOC = "L33" | ; +NET "ddr3_dq[71]" LOC = "J34" | ; +NET "ddr3_dqs_p[0]" LOC = "B31" | ; +NET "ddr3_dqs_n[0]" LOC = "B32" | ; +NET "ddr3_dqs_p[1]" LOC = "D34" | ; +NET "ddr3_dqs_n[1]" LOC = "C34" | ; +NET "ddr3_dqs_p[2]" LOC = "A19" | ; +NET "ddr3_dqs_n[2]" LOC = "A20" | ; +NET "ddr3_dqs_p[3]" LOC = "H29" | ; +NET "ddr3_dqs_n[3]" LOC = "H30" | ; +NET "ddr3_dqs_p[4]" LOC = "D16" | ; +NET "ddr3_dqs_n[4]" LOC = "D17" | ; +NET "ddr3_dqs_p[5]" LOC = "K28" | ; +NET "ddr3_dqs_n[5]" LOC = "K29" | ; +NET "ddr3_dqs_p[6]" LOC = "G17" | ; +NET "ddr3_dqs_n[6]" LOC = "G18" | ; +NET "ddr3_dqs_p[7]" LOC = "G22" | ; +NET "ddr3_dqs_n[7]" LOC = "G23" | ; +NET "ddr3_dqs_p[8]" LOC = "K32" | ; +NET "ddr3_dqs_n[8]" LOC = "J32" | ; +NET "ddr3_addr[0]" LOC = "E27" | ; +NET "ddr3_addr[1]" LOC = "C27" | ; +NET "ddr3_addr[2]" LOC = "B28" | ; +NET "ddr3_addr[3]" LOC = "D27" | ; +NET "ddr3_addr[4]" LOC = "C24" | ; +NET "ddr3_addr[5]" LOC = "D24" | ; +NET "ddr3_addr[6]" LOC = "C25" | ; +NET "ddr3_addr[7]" LOC = "A24" | ; +NET "ddr3_addr[8]" LOC = "A25" | ; +NET "ddr3_addr[9]" LOC = "J24" | ; +NET "ddr3_addr[10]" LOC = "F26" | ; +NET "ddr3_addr[11]" LOC = "D26" | ; +NET "ddr3_addr[12]" LOC = "H25" | ; +NET "ddr3_addr[13]" LOC = "D25" | ; +NET "ddr3_addr[14]" LOC = "B26" | ; +NET "ddr3_ba[0]" LOC = "F24" | ; +NET "ddr3_ba[1]" LOC = "J25" | ; +NET "ddr3_ba[2]" LOC = "E24" | ; +NET "ddr3_cas_n" LOC = "E26" | ; +NET "ddr3_ck_n[0]" LOC = "A26" | ; +NET "ddr3_ck_p[0]" LOC = "B25" | ; +NET "ddr3_cke[0]" LOC = "A28" | ; +NET "ddr3_cs_n[0]" LOC = "F28" | ; +NET "ddr3_odt[0]" LOC = "B27" | ; +NET "ddr3_ras_n" LOC = "E28" | ; +NET "ddr3_reset_n" LOC = "F18" | ; +NET "ddr3_we_n" LOC = "F25" | ; diff --git a/constraints/physical_pinout.xlsx b/constraints/physical_pinout.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..926ae823e3ab9dbb66a203a239bd5294c195dcf0 GIT binary patch literal 12951 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 Xm1JSSItTzDgMU