From ebbfb6375d8be60962922936fc7b7cd9b72a4796 Mon Sep 17 00:00:00 2001 From: Miodrag Milanovic Date: Sat, 14 Dec 2019 09:18:24 +0100 Subject: [PATCH] more new wires added --- ecp5/arch.cc | 11 ++++- ecp5/constids.inc | 7 ++++ ecp5/gfx.cc | 95 ++++++++++++++++++++++++++++++++++++++++++ ecp5/gfx.h | 79 ++++++++++++++++++++++++++++++++++- ecp5/trellis_import.py | 24 +++++++++++ 5 files changed, 214 insertions(+), 2 deletions(-) diff --git a/ecp5/arch.cc b/ecp5/arch.cc index 97aee1cc..f198861a 100644 --- a/ecp5/arch.cc +++ b/ecp5/arch.cc @@ -723,7 +723,16 @@ std::vector Arch::getDecalGraphics(DecalId decal) const el.y1 = y + slice_y1; el.y2 = y + slice_y2; ret.push_back(el); - } else if (bel_type == id_DCUA || bel_type == id_EXTREFB || bel_type == id_PCSCLKDIV || bel_type == id_DTR || + } else if (bel_type == id_DCUA) { + GraphicElement el; + el.type = GraphicElement::TYPE_BOX; + el.style = decal.active ? GraphicElement::STYLE_ACTIVE : GraphicElement::STYLE_INACTIVE; + el.x1 = x + slice_x1; + el.x2 = x + 0.97; + el.y1 = y + slice_y2; + el.y2 = y + 0.25; + ret.push_back(el); + } else if (bel_type == id_EXTREFB || bel_type == id_PCSCLKDIV || bel_type == id_DTR || bel_type == id_USRMCLK) { GraphicElement el; el.type = GraphicElement::TYPE_BOX; diff --git a/ecp5/constids.inc b/ecp5/constids.inc index 37577125..6d017c0c 100644 --- a/ecp5/constids.inc +++ b/ecp5/constids.inc @@ -1308,6 +1308,13 @@ X(WIRE_TYPE_DDRDLL) X(WIRE_TYPE_CCLK) X(WIRE_TYPE_EXTREF) X(WIRE_TYPE_DCU) +X(WIRE_TYPE_PLL) +X(WIRE_TYPE_SED) +X(WIRE_TYPE_OSC) +X(WIRE_TYPE_JTAG) +X(WIRE_TYPE_GSR) +X(WIRE_TYPE_DTR) +X(WIRE_TYPE_PCSCLKDIV) X(WIRE_TYPE_H00) X(WIRE_TYPE_H01) diff --git a/ecp5/gfx.cc b/ecp5/gfx.cc index d68ac5fa..9f69cada 100644 --- a/ecp5/gfx.cc +++ b/ecp5/gfx.cc @@ -211,6 +211,101 @@ void gfxTileWire(std::vector &g, int x, int y, int w, int h, IdS el.y2 = el.y1; g.push_back(el); } + if (wire_type == id_WIRE_TYPE_PLL) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_CLKI_PLL + 1); + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_GSR) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_JCLK_GSR + 1); + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_JTAG) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_JJCE1_JTAG + 1) + 1 * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_OSC) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_SEDSTDBY_OSC + 1) + 2 * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_SED) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_SEDSTDBY_SED + 1) + 3 * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_DTR) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_JSTARTPULSE_DTR + 1); + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_EXTREF) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_REFCLKP_EXTREF + 1) + 1 * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + + if (wire_type == id_WIRE_TYPE_DCU) { + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (tilewire - TILE_WIRE_CH0_RX_REFCLK_DCU + 1) + 0 * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + + if (wire_type == id_WIRE_TYPE_PCSCLKDIV) { + int num = (tilewire - TILE_WIRE_CLKI_PCSCLKDIV1) % 7; + int group = 1-(tilewire - TILE_WIRE_CLKI_PCSCLKDIV1) / 7; + GraphicElement el; + el.type = GraphicElement::TYPE_LINE; + el.style = style; + el.x1 = x + slice_x1 - 0.005f; + el.x2 = x + slice_x1; + el.y1 = y + slice_y2 - 0.0017f * (num + 1) + group * slice_pitch; + el.y2 = el.y1; + g.push_back(el); + } + if (wire_type == id_WIRE_TYPE_V01) { if (tilewire >= TILE_WIRE_V01N0001 && tilewire <= TILE_WIRE_V01S0100) { GraphicElement el; diff --git a/ecp5/gfx.h b/ecp5/gfx.h index a35cc34d..d3df3ebe 100644 --- a/ecp5/gfx.h +++ b/ecp5/gfx.h @@ -2057,8 +2057,85 @@ enum GfxTileWireId TILE_WIRE_G_CLKO_LDCC12, TILE_WIRE_G_CLKI_LDCC13, TILE_WIRE_G_JCE_LDCC13, - TILE_WIRE_G_CLKO_LDCC13 + TILE_WIRE_G_CLKO_LDCC13, + TILE_WIRE_CLKI_PLL, + TILE_WIRE_JRST_PLL, + TILE_WIRE_JLOCK_PLL, + TILE_WIRE_CLKFB_PLL, + TILE_WIRE_CLKINTFB_PLL, + TILE_WIRE_JREFCLK_PLL, + TILE_WIRE_JSTDBY_PLL, + TILE_WIRE_JPHASEDIR_PLL, + TILE_WIRE_JPHASELOADREG_PLL, + TILE_WIRE_JPHASESEL0_PLL, + TILE_WIRE_JPHASESEL1_PLL, + TILE_WIRE_JPHASESTEP_PLL, + TILE_WIRE_JPLLWAKESYNC_PLL, + TILE_WIRE_JENCLKOP_PLL, + TILE_WIRE_JENCLKOS2_PLL, + TILE_WIRE_JENCLKOS3_PLL, + TILE_WIRE_JENCLKOS_PLL, + TILE_WIRE_JINTLOCK_PLL, + TILE_WIRE_JCLKOP_PLL, + TILE_WIRE_JCLKOS_PLL, + TILE_WIRE_JCLKOS2_PLL, + TILE_WIRE_JCLKOS3_PLL, + + TILE_WIRE_SEDSTDBY_SED, + TILE_WIRE_JSEDENABLE_SED, + TILE_WIRE_JSEDSTART_SED, + TILE_WIRE_JSEDFRCERR_SED, + TILE_WIRE_JSEDDONE_SED, + TILE_WIRE_JSEDINPROG_SED, + TILE_WIRE_JSEDERR_SED, + + TILE_WIRE_SEDSTDBY_OSC, + + TILE_WIRE_JJCE1_JTAG, + TILE_WIRE_JJCE2_JTAG, + TILE_WIRE_JTCK_JTAG, + TILE_WIRE_JTMS_JTAG, + TILE_WIRE_JTDI_JTAG, + TILE_WIRE_JJTDO2_JTAG, + TILE_WIRE_JJTDO1_JTAG, + TILE_WIRE_JTDO_JTAG, + TILE_WIRE_JJTDI_JTAG, + TILE_WIRE_JJTCK_JTAG, + TILE_WIRE_JJRTI2_JTAG, + TILE_WIRE_JJRTI1_JTAG, + TILE_WIRE_JJSHIFT_JTAG, + TILE_WIRE_JJUPDATE_JTAG, + TILE_WIRE_JJRSTN_JTAG, + + TILE_WIRE_JCLK_GSR, + TILE_WIRE_JGSR_GSR, + + TILE_WIRE_JSTARTPULSE_DTR, + TILE_WIRE_JDTROUT0_DTR, + TILE_WIRE_JDTROUT1_DTR, + TILE_WIRE_JDTROUT2_DTR, + TILE_WIRE_JDTROUT3_DTR, + TILE_WIRE_JDTROUT4_DTR, + TILE_WIRE_JDTROUT5_DTR, + TILE_WIRE_JDTROUT6_DTR, + TILE_WIRE_JDTROUT7_DTR, + + TILE_WIRE_CLKI_PCSCLKDIV1, + TILE_WIRE_JRST_PCSCLKDIV1, + TILE_WIRE_CDIVX_PCSCLKDIV1, + TILE_WIRE_JSEL0_PCSCLKDIV1, + TILE_WIRE_JSEL1_PCSCLKDIV1, + TILE_WIRE_JSEL2_PCSCLKDIV1, + TILE_WIRE_CDIV1_PCSCLKDIV1, + + TILE_WIRE_CLKI_PCSCLKDIV0, + TILE_WIRE_JRST_PCSCLKDIV0, + TILE_WIRE_CDIVX_PCSCLKDIV0, + TILE_WIRE_JSEL0_PCSCLKDIV0, + TILE_WIRE_JSEL1_PCSCLKDIV0, + TILE_WIRE_JSEL2_PCSCLKDIV0, + TILE_WIRE_CDIV1_PCSCLKDIV0 }; void gfxTileWire(std::vector &g, int x, int y, int w, int h, IdString wire_type, GfxTileWireId tilewire, diff --git a/ecp5/trellis_import.py b/ecp5/trellis_import.py index fe342263..259e5da0 100755 --- a/ecp5/trellis_import.py +++ b/ecp5/trellis_import.py @@ -83,6 +83,30 @@ def wire_type(name): if name[0].endswith("_ALU54"): return "WIRE_TYPE_ALU54" + if name[0].endswith("_PLL"): + return "WIRE_TYPE_PLL" + + if name[0].endswith("_SED"): + return "WIRE_TYPE_SED" + + if name[0].endswith("_OSC"): + return "WIRE_TYPE_OSC" + + if name[0].endswith("_JTAG"): + return "WIRE_TYPE_JTAG" + + if name[0].endswith("_GSR"): + return "WIRE_TYPE_GSR" + + if name[0].endswith("_DTR"): + return "WIRE_TYPE_DTR" + + if name[0].endswith("_PCSCLKDIV0"): + return "WIRE_TYPE_PCSCLKDIV" + + if name[0].endswith("_PCSCLKDIV1"): + return "WIRE_TYPE_PCSCLKDIV" + if name[0].startswith("H00"): return "WIRE_TYPE_H00"