Commit Graph

257 Commits

Author SHA1 Message Date
Lofty 1576703937 current progress (route zero driver too) 2025-07-29 09:37:45 +01:00
Lofty d1f80ca5bb current progress 2025-07-29 09:37:45 +01:00
Lofty 4cf33090a9 current progress 2025-07-29 09:37:45 +01:00
Lofty 8637e3bc18 heavy refactoring 2025-07-29 09:37:45 +01:00
Lofty 56e1452d31 refactor common routes 2025-07-29 09:37:45 +01:00
Lofty 90f5f719f3 current progress 2025-07-29 09:37:45 +01:00
Lofty 530a08606b current progress 2025-07-29 09:37:45 +01:00
Lofty 0829b46e9b move multiplier router to its own file 2025-07-29 09:37:45 +01:00
Lofty 0533a4c12b fixed missing pip 2025-07-29 09:37:45 +01:00
Hannah Ravensloft 8047369347 better inversion verification 2025-07-29 09:37:45 +01:00
Hannah Ravensloft f2c736ef81 Beginnings of the multiplier router 2025-07-29 09:37:45 +01:00
Miodrag Milanovic af6e9aa6a3 gatemate: Proper KEEPER handling 2025-07-28 12:11:32 +02:00
YRabbit 356278d068
Gowin. Preparing to support the 5A series. (#1520)
* Gowin. Preparing to support the 5A series.

Family recognition is added, as well as minor fixes, but base generation
itself is not allowed for GW5 - this gives the ability to test the next
Apicula release and still not break installations for those who simply
specify `HIMBAECHEL_GOWIN_DEVICES = "all"`.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Recognize GW5A family chips.

Construct chip base name for

 - GW5A-LV25MG121C1/l0 - TangPrimer 25k

 - GW5AT-LV60PG484A - TangMega 60k

 - GW5AST-LV138PG484A - TangMega 138k

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-07-23 08:45:24 +02:00
Miodrag Milanović 2d7d1e2408
gatemate: optimizations and cleanups (#1517)
* Add log output

* Optimize CC_LUT1

* Update tests

* Optimize CC_LUT2 as well

* Use init enumerations

* Merge DFF in MX4

* Move repack code

* Move ramio code to pack_cpe

* Merge LUT1/2 to ADDF inputs

* Note actual CPE ports

* Merge DFF in ADDF

* Update FF params and ports first

* Check if DFFs are compatible before merging

* Optimize DFF/Latch

* Add reporting of optimized cells

* Optimize MX2/4

* Add statistics

* Use special nets for VCC/GND to skip using name

* Add warning for carry chain split

* Merge FFs where possible

* Cleanup

* Keep statistics out for now

* Add logs for packing sections

* review fixes

---------

Co-authored-by: Lofty <dan.ravensloft@gmail.com>
2025-07-17 08:50:24 +02:00
YRabbit 4831e50843
Gowin. Allow clock network routing from GP pins. (#1518)
Adds automatic connection of a general-purpose pin to the global clock
network.

The old behaviour, where such networks have to be explicitly specified,
can be activated with the command line key
"--vopt disable_gp_clock_routing".

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-07-13 09:24:40 +02:00
Miodrag Milanovic 0ebd7afab9 clangformat 2025-07-07 10:15:50 +02:00
Miodrag Milanović 84d8e1abe7
Use improved CPE model (#1503)
* CPE mapping improvements

* Use CP_OUT for adders

* Fixes

* Small fixes

* Cleanups

* Cleanup

* Cleanups

* Fixes

* Fixes

* Optimize

* Cleanup

* clangformat

* Cleanup

* Cleanup

* Bump required version of database

* Cleanup

* Resolve name conflicts

* Fix signal routing

* Make CPE_LATCH separate

* Add more timings models, need updated values

* Fixed warning

* multiplier support from lofty/gatemate-mult

* explicitly zero some params in B passthrough

* comment the relevant CPE inputs in check_multipliers

* Rename some of bels

* remove _lower from name

* refactor multiplier checking

* Revert "remove _lower from name"

This reverts commit daa1041bdf.

* Fixe net name to be unique

* Make sure we at least generate bitstream with all info

* Simplify zero

* Bounded cell type in gui

* typo fix

* Remove A passthrough inversion option

* Clean up CarryGenCell config

* Update a passthru to use new primitives

* Cleanup for adders

* Clean up MsbRoutingCell

* Cleanup

* Refactor A connection code

* Make it more as in PR #1513

* Added cplines to bpassthru and fixed constant driver for A

* Add parts

* Added comp out connections

* clangformat

* clangformat

* Clean up B passthrough connections

* wire up a bunch of intermediate signals

* Bit of cleanup

* handing of C_EN_IN

* C_EN_CIN fixes

* connect f_route to its lines

* fix cite for FRoutingCell

* fixup, oops

* connect multfab to its lines

* Commented line

* Connect CPOUTs

* Handle C_I params

* connect CINY1 for CarryGenCell

* fix carry gen CINX

* Update L2T4 model

* Updates for ADDCIN

* clangformat

* fix some issues with multfab and f_route

* look at C_I when doing inversion

* Only set some C_I signals when used

* Fix one more place

* do not use cplines so we can merge in one cell

* Cover cases that could be optimized out

* clangformat

* Cleanups

* Disable multiplier usage for now

---------

Co-authored-by: Lofty <dan.ravensloft@gmail.com>
2025-07-07 10:14:48 +02:00
José Miguel Sánchez García 1d4b0eeac4
himbaechel: xilinx: misc `CMakeLists.txt` improvements (#1509)
* himbaechel: xilinx: replace `/usr/bin/pypy3` with `${Python3_EXECUTABLE}`

* himbaechel: xilinx: recognize `IMPORT_BBA_FILES` inside `CMakeLists.txt`

* himbaechel: xilinx: align CMake device selection behavior with gatemate
2025-07-02 14:58:09 +02:00
José Miguel Sánchez García cb9f3117ba
himbaechel: gatemate: replace VLA with C++ features (#1513) 2025-07-01 19:39:25 +02:00
myrtle 27635785c8
heap: Allow customising legalisation ordering (#1507)
Signed-off-by: gatecat <gatecat@ds0.me>
2025-07-01 15:32:28 +02:00
YRabbit 39f020b033
Gowin. Unbreak the segment routing. (#1508)
Use loop enumeration of PIPs instead of direct name construction for the
upper and lower ends of the segment wire.

Also do not allow clock wires for segments.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-06-30 10:14:21 +02:00
Lofty e642e21f9b
himbaechel: output normalised wire in getWireByName (#1506) 2025-06-25 18:46:19 +02:00
gatecat 9ade2d1877 himbaechel: Add Python binding for get_tile_wire_range
Signed-off-by: gatecat <gatecat@ds0.me>
2025-06-25 18:37:17 +02:00
gatecat 1cd1e4a8d9 xilinx: Fix packing of weird mux trees
Signed-off-by: gatecat <gatecat@ds0.me>
2025-06-25 12:38:11 +02:00
gatecat f74aee7047 gowin: Remove logspam during build
Signed-off-by: gatecat <gatecat@ds0.me>
2025-06-25 11:49:45 +02:00
YRabbit 66f051d853
Gowin. BUGFIX. Stupid == vs = (#1504)
he good thing is that these cases are very few.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-06-24 13:24:10 +02:00
Miodrag Milanovic 311a1a711d gatemate: do not use special serdes pins for auto placement 2025-06-18 09:56:54 +02:00
Miodrag Milanovic f58dd2d719 clangformat 2025-06-18 09:12:14 +02:00
Miodrag Milanović 7318d6a8ba
gatemate: Multi die support and primitives model improvement (#1501)
* SER_CLK support

* Update constids

* wip

* CLK_FEEDBACK

* Handle SER_CLK and SER_CLK_N

* clangformat

* Cleanup

* Use _ as separator for PLL CFGs

* Remove unused clocking cells

* Do not use same name for IO models

* Fix IDDR merge

* Cleanup

* Properly handle user global signals

* Move signal inversion in bitstream creation

* Start adding multi die support

* Display die location for pins used

* Do not use constant s as locations

* Cleanup SB_DRIVE handling

* Use DDR locations from chip database

* Place only in prefered die for now

* Set D2D

* Fixed typos
2025-06-18 08:32:57 +02:00
Lofty 5275c14ac0
gatemate: include DDR route-throughs in clock router (#1499)
* route_clock: small cleanup

* gatemate: include DDR route-throughs for clock router
2025-06-10 18:00:15 +02:00
YRabbit 000faab213
Gowin. BUGFIX. Fix routing of the FF inputs. (#1498)
A segment router replaces the source-to-sink connection by
general-purpose PIPs with bus-branch segment network connections.

The problem arises when the source is connected to the sinks directly
without switching as in the case of LUT->DFF, such wires should be left
as is, which is what this PR does.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-06-10 07:54:20 +02:00
Miodrag Milanovic fd3b4d36e7 gatemate: fix CLK inversion 2025-06-04 18:53:58 +02:00
Miodrag Milanovic bac5a9145f gatemate: memory clock signal handling 2025-05-29 13:26:35 +02:00
Miodrag Milanovic 9994fdb393 gatemate: make sure to use latest chipdb 2025-05-27 15:37:25 +02:00
Miodrag Milanović 12f597dcd1
gatemate: propagate clock constraints on input ports (#1497) 2025-05-26 11:16:45 +02:00
Miodrag Milanovic e7f52d1b6b gatemate: enable only used banks, including CFG one 2025-05-24 14:56:07 +02:00
Lofty 9cfc7ee263
gatemate: improve estimateDelay (#1494) 2025-05-22 09:15:12 +02:00
Lofty 06d3408ba4
Use clock router even for non-global clocks (#1493) 2025-05-21 16:17:20 +02:00
gatecat 226a2dfdb4 clangformat
Signed-off-by: gatecat <gatecat@ds0.me>
2025-05-20 13:19:52 +02:00
Miodrag Milanovic 77a6df131c gatemate: use BUFG input in case it is routed to PLL 2025-05-20 09:30:27 +02:00
Lofty 520616248e
Reserve all CPE control signals in clock router (#1492) 2025-05-19 14:55:12 +02:00
Lofty 2b33800d77
Reserve EN and SR wires in GateMate clock router (#1491) 2025-05-19 12:36:16 +02:00
Miodrag Milanović b0c29aa634
gatemate: PLL priority for BUFG (#1488) 2025-05-19 09:55:39 +02:00
Miodrag Milanović 6c3956c3b9
gatemate: BRAM cascade mode support (#1487)
* BRAM cascade mode support

* Removed unused connections

* Exclusive connection
2025-05-19 09:55:11 +02:00
Miodrag Milanovic 23a99989d1 gatemate: invert output enable for io buffer 2025-05-19 09:47:17 +02:00
Lofty 27594f904f
Reserve sinks in GateMate clock router (#1486) 2025-05-15 16:53:06 +02:00
Lofty 46fbe7c6d7
GateMate clock router (#1483)
* gatemate: clock router

Co-authored-by: Miodrag Milanovic <mmicko@gmail.com>

* Re-add clock router pip binding

* Refactoring

* Require globals to use a BUFG

* Fix misunderstanding of GPIO/RAM clocking

* Add plane info to chipdb

* Force clock routing along a specific plane

* Remove overly-limiting condition

* Move clock router into its own file

* Clock router based on delay

* Refine clock router conditions

* More detailed clock routing output

* Clean up debug messages

* clangformat

---------

Co-authored-by: Miodrag Milanovic <mmicko@gmail.com>
2025-05-13 16:07:47 +02:00
YRabbit b1c147083d Gowin. Fill in delay values in HCLK.
Fill in the delays for PIP classes related to HCLK and IODELAY.  Also:

 - if clock routing fails, we try to use the next fastest mechanism - segment networks;

 - fixing harmless typos.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-05-13 12:11:36 +01:00
Miodrag Milanović 764b5402e8
gatemate: Initial SERDES support (#1476)
* Initial SERDES support

* use static array for default values

* Split pack into multiple files

* Pre-place BUFG and related cells
2025-05-06 15:56:26 +02:00
Miodrag Milanovic 900249033f gatemate: fix ccf default values and handling 2025-04-24 11:08:04 +02:00
Miodrag Milanović bc25b042e9
gatemate: implemented remaining PLL features (#1474)
* gatemate: implemented remaining PLL features

* gatemate: allow longer carry chains
2025-04-24 09:51:00 +02:00
Miodrag Milanovic c84f20934f gatemate: make build work as for other uarch 2025-04-22 19:28:58 +02:00
Miodrag Milanović d6483adb4d
Gatemate FPGA initial support (#1473)
* Initial code for GateMate

* Initial work on forming bitstream

* Add CCF parsing

* Use CCF to set IO location

* Propagate errors

* Restructure code

* Add support for reading from config

* Start adding infrastructure for reading bitstream

* Fix script

* GPIO initial work

* Add IN1->RAM_O2 propagation

* Fixed typo

* Cleanup

* More parameter checks

* Add LVDS support

* Cleanup

* Keep just used connections for now

* Naive lut tree CPE pack

* Naive pack CC_DFF

* pack DFF fixes

* Handle MUX flags

* Fix DFF pack

* Prevent pass trough issues

* Cleanup

* Use device wrapper class

* Update due to API changes

* Use pin  connection aliases

* Start work on BUFG support

* Fix CC_L2T5 pack

* Add CPE input inverters

* Constrain routes to have correct inversion state

* Add clock inversion pip

* Added MX2 and MX4 support

* Fix script

* BUFG support

* debug print if route found with wrong polarity

* Some CC_DFF improvements

* Create reproducible chip database

* Simplify inversion of special signals

* Few more DFF features

* Add forgotten virtual port renames

* Handle muxes with constant inputs

* Allow inversion for muxes

* cleanup

* DFF input can be constant

* init DFF only when needed

* cleanup

* Add basic PLL support

* Add some timings

* Add USR_RSTN support

* Display few more primitives

* Use pass trough signals to validate architecture data

* Use extra tile information from chip database

* Updates needed for a build system changes

* Implement SB_DRIVE support

* Properly named configuration bits

* autogenerated constids.inc

* small fix

* Initial code for CPE halfs

* Some cleanup

* make sure FFs are compatible

* reverted due to db change

* Merge DFF where applicable

* memory allocation issue

* fix

* better MX2

* ram_i handling

* Cleanup MX4

* Support latches

* compare L_D flag as well

* Move virtual pips

* Naive addf pack

* carry chains grouping

* Keep chip database reproducible

* split addf vectors

* Block CPEs when GPIO is used

* Prepare placement code

* RAM_I/RAM_O rewrite

* fix ram_i/o index

* Display RAM and add new primitives

* PLL wip code

* CC_PLL_ADV packing

* PLL handling cleanup

* Add PLL comments

* Keep only high fan-out BUFG

* Add skeleton for tests

* Utilize move_ram_o

* GPIO wip

* GPIO wip

* PLL fixes

* cleanup

* FF_OBF support

* Handle FF_IBF

* Make SLEW FAST if not defined as in latest p_r

* Make sure FF_OBF only driving GPIO

* Moved pll calc into separate file

* IDDR handling and started ODDR

* Route DDR input for CC_ODDR

* Notify error in case ODDR or IDDR are used but not with I/O pin

* cleanup for CC_USR_RSTN

* Extract proper RAM location  for bitstream

* Code cleanup

* Allow auto place of pads

* Use clock source flag

* Configure GPIO clock signals

* Handle conflicting clk

* Use BUGF in proper order

* Connected CLK, works without but good for debugging

* CC_CFG_CTRL placement

* Group RAM data 40 bytes per row

* Write BRAM content

* RAM wip

* Use relative constraints from chipdb

* fix broken build

* Memory wip

* Handle custom clock for memories

* Support FIFO

* optimize move_ram_io

* Fix SR signal handling acorrding to findings

* set placer beta

* Pre place what we can

* Revert "debug print if route found with wrong polarity"

This reverts commit cf9ded2f18.

* Revert "Constrain routes to have correct inversion state"

This reverts commit 795c284d48.

* Remove virtual pips

* Implement post processing inversion

* ADDF add ability to route additional CO

* Merge two ADDFs in one CPE

* Added TODO

* clangformat

* Cleanup

* Add serdes handling in config file

* Cleanup

* Cleanup

* Cleanup

* Fix in PLL handling

* Fixed ADDF edge case

* No need for this

* Fix latch

* Sanity checks

* Support CC_BRAM_20K merge

* Start creating testing environment

* LVDS fixes

* Add connection helper

* Cleanup

* Fix tabs

* Formatting fix

* Remove optimization tests for now

* remove read_bitstream

* removed .c_str()

* Removed config parsing

* using snake_case

* Use bool_or_default where applicable

* refactored bitstream write code

* Add allow-unconstrained option

* Update DFF related messages

* Add clock constraint propagation

---------

Co-authored-by: Lofty <dan.ravensloft@gmail.com>
2025-04-22 16:41:01 +02:00
YRabbit a5cff55520
Gowin. BUGFIX Use a separate net for segment gates (#1470)
* Gowin. BUGFIX Use a separate net for segment gates

We use a temporary separate small network (typically 2 - 3 sinks) for
routing from the segment network source to the segment gate. This fixes
the rare but unpleasant case of self-intersection when a route to a gate
is routed using PIPs after the gate, this is no longer allowed when
using a separate small network.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Fix style.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-03-31 11:36:48 +02:00
YRabbit 0c01cb9e41
Gowin. Fix non-DCS networks. (#1467)
Prohibits the use of Dynamic Clock Selection PIPs for networks where no
DCS is present.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-03-20 09:07:37 +01:00
YRabbit c84879e4d5
Gowin. Implement the DLLDLY primitive. (#1464)
DLLDLY is the clock delay primitive that adjust the input clock
according to the DLLSTEP signal and outputs the delayed clock.

These primitives are associated with clock pins and are "tapped" between
the output of this IBUF and the clock networks, leaving the possibility
to connect to the original unshifted signal as well, although the latter
is not very practical because it is no longer possible to use fast
wires.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-03-19 08:41:35 +01:00
YRabbit 864c1e471d
Gowin. Add a router for segments. (#1456)
Gowin chips have an interesting mechanism - wires that run vertically
through several rows (at least 10) in each column of the chip. In each
row a particular wire has branches to the left and right, covering on
average 4 neighboring cells in the row. For lack of a better term, I
further call such a wire a segment.

So a segment can provide a direct connection in a local rectangle. There
are no special restrictions on the sinks, so segment networks can be
used for ClockEnable, LocalSetReset, as well as for LUT and DFF inputs.

The sources are not so simple - the sources can be the upper or lower
end of the segment, which in theory can lead to unfortunate consequences
if the signal is applied from both ends.

The matter is complicated by the fact that there are default
connections, i.e. in the absence of any set fuse the segment input is
still connected to something (VCC for example) and to disable the unused
end of the segment you need to set a special combination of fuses.

Taking into account which end of which segment is used is one of the
tasks of this router. In addition, segment ends can physically coincide
with PLL, DSP and BSRAM inputs, which can also lead to unexpected
effects. Some of these things are tracked when generating the base, some
in this router, some when packing in gowin_pack.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-03-18 12:02:49 +01:00
YRabbit d8988e1682
Gowin. Add HCLK wires to PLL. (#1462)
Adds the ability to use high-speed clock lines (together with CLKDIV2
type frequency dividers operating on them) as sieve signals for the
CLKIN and CLKFB inputs of the rPLL and PLLVR primitives (these cover the
full range of supported Gowin chips).

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-03-12 09:32:38 +01:00
Lofty 661f76d51a
Add arch API function for pip inversion (#1457) 2025-02-27 12:21:15 +01:00
YRabbit 81ccada239
Gowin. Add I3C io buffer. (#1445)
* Gowin. Add I3C io buffer.

A buffer is added that can operate as a normal IOBUF in PUSH-PULL mode
or switch to open-drain IOBUF mode.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Turn a variable into a set of flags

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-01-29 14:02:21 +01:00
YRabbit a76c5b5a0f Gowin. Typo fix.
Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-01-29 08:47:41 +01:00
YRabbit b95a3ca567 Gowin. Implement MIPI IO.
Adds output (MIPI_OBUF and MIPI_OBUF_A) and input (MIPI_IBUF) primitives
to allow the use of “real” MIPI (not emulation) ports capable of
operating in both HS and LP modes.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-01-29 08:47:41 +01:00
Catherine cf9c74575b CMake: exclude *-bba and *-chipdb targets from `make all`.
Due to the way CMake-generated Makefiles evaluate dependencies, this
calls the `.bba` generation custom command twice, which then fails as
they both use the same `.bba.new` file as an output and one of them
moves it first.

This broke builds using `make -j` but not builds using
`make -j nextpnr-himbaechel-example`.
2025-01-29 06:58:27 +01:00
Miodrag Milanović e12093201a
CMake: Add include guards when IMPORT_BBA_FILES is used (#1438) 2025-01-23 10:54:37 +01:00
Catherine 90d746f79e CMake: add support for exporting and importing .bba files.
This is useful for certain cross-compilation workloads, and to cache
rarely changing build products.

To use this functionality, build e.g. as follows:

    cmake . -B build-export -DEXPORT_BBA_FILES=../bba-files -DARCH=all
    cmake --build build-export -t nextpnr-all-bba

    cmake . -B build-import -DIMPORT_BBA_FILES=../bba-files -DARCH=all
    cmake --build build-import
2025-01-23 07:49:12 +00:00
Catherine dbba1328bf Allow splitting nextpnr-himbaechel per microarchitecture.
This is added primarily for YoWASP.
2025-01-21 17:13:03 +00:00
Catherine cd7f7c12f1 CMake: refactor architecture-specific build system parts.
Two user-visible changes were made:
* `-DUSE_RUST` is replaced with `-DBUILD_RUST`, by analogy with
  `-DBUILD_PYTHON`
* `-DCOVERAGE` was removed as it doesn't work with either modern GCC
  or Clang
2025-01-21 17:13:03 +00:00
Catherine dcfb7d8c33 CMake: align Himbaechel targets with non-Himbaechel ones.
Primarily, this commit makes both of them use the `BBAsm` functions
to build and compile `.bba` files.

In addition, Himbaechel targets are now aligned with the rest in
how they are configured: instead of having all uarches enabled with
all of the devices disabled (the opposite of the rest of nextpnr),
uarches must be enabled explicitly but they come with all devices
enabled (except for Xilinx, which does not have a list of devices).
2025-01-21 17:13:03 +00:00
Catherine f5776a6d64 CMake: eliminate `family.cmake`/`CMakeLists.txt` split.
While it served a purpose (granting the ability to build `.bba` files
separately from the rest of nextpnr), it made things excessively
convoluted, especially around paths.

This commit removes the ability to pre-generate chip databases. As far
as I know, I was the primary user of that feature. It can be added back
if there is demand for it.

In exchange the per-family `CMakeLists.txt` files are now much easier
to understand.
2025-01-21 17:13:03 +00:00
Catherine d214308f5f CMake: reformat for consistency.
Normalize keywords to:

    if (...)
    elseif (...)
    else()
    endif()

    foreach (...)
    endforeach()

    other(...)

Normalize whitespace to 4 spaces.
2025-01-16 11:36:44 +01:00
Catherine 574f504787 Find all components of Python at the same time.
This is explicitly recommended by the FindPython module documentation
and is required to avoid failed builds on some systems. See:
https://cmake.org/cmake/help/latest/module/FindPython.html
2025-01-13 03:29:43 +00:00
Catherine ab7a372491
himbaechel: allow subsetting uarches. (#1416)
E.g. selecting only Gowin instead of the default shrinks the resulting
binary by ~30%.
2025-01-12 08:13:08 +01:00
YRabbit 92694d7db7
Gowin. BUGFIX. Do not create missing wires. (#1418)
Erroneously created wires for specific IOs on the underside of some
chips.

Fixes https://github.com/YosysHQ/nextpnr/issues/1417

Also cosmetic edits.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-01-12 08:12:06 +01:00
Catherine 5fe680390f
Various fixes for clang/libc++ build (#1415)
* Gowin: add header includes required on libstdc++.

* kernel: fix incorrect printf-style format.

* himbaechel: add missing `override` qualifiers.

* Gowin: remove unnecessary `std::move`.

These calls inhibit RVO, a stronger optimization than moving an object.
2025-01-12 08:11:33 +01:00
YRabbit c565e364bc
Gowin. Add the ability to place registers in IOB (#1403)
* Gowin. Add the ability to place registers in IOB

IO blocks have registers: for input, for output and for OutputEnable
signal - IREG, OREG and TREG respectively.

Each of the registers has one implicit non-switched wire, which one
depends on the type of register (IREG has a Q wire, OREG has a D wire).
Although the registers can be activated independently of each other they
share the CLK, ClockEnable and LocalSetReset wires and this places
restrictions on the possible combinations of register types in a single
IO.

Register placement in IO blocks is enabled by specifying the command
line keys --vopt ireg_in_iob, --vopt oreg_in_iob, or --vopt ioreg_in_iob.

It should be noted that specifying these keys leads to attempts to place
registers in IO blocks, but no errors are generated in case of failure.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Registers in IO

Check for unconnected ports.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. IO regs. Verbose warnings.

If an attempt to place an FF in an IO block fails, issue a warning
detailing the reason for the failure, whether it is a register type
conflict, a network requirement violation, or a control signal conflict.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. BUGFIX. Fix FFs compatibility.

Flipflops with a fixed ClockEnable input cannot coexist with flipflops
with a variable one.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. FFs in IO.  Changing diagnostic messages.

Placement modes are still specified by the command line keys
ireg_in_iob/oreg_in_iob/ioreg_in_iob, but also introduces more granular
control in the form of attributes at I/O ports:

  (* NOIOBFF *) - registers are never placed in this IO,

  (* IOBFF *) - registers must be placed in this IO, in case of failure
  a warning (not an error) with the reason for nonplacement is issued,

  _attribute_absence_ - no diagnostics will be issued: managed to place - good, failed - not bad either.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Registers in IO.

Change the logic for handling command line keys and attributes -
attributes allow routines to be placed in IO regardless of global mode.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Registers in IO. Fix style.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2025-01-01 13:11:57 +01:00
Aritz Erkiaga 0345b6e803
Fix gowin ALU SUB mode ports (#1407) 2025-01-01 13:05:54 +01:00
YRabbit 3d350c21c5
Gowin. BUGFIX. Global clock routing. (#1410)
Adds additional restrictions on the first PIP after the clock source -
only connections to SPINEs are allowed. This allowed to correct the
behaviour of DQCEs since the latter can only disable/enable SPINEs.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-12-31 10:31:03 +01:00
Miodrag Milanović d810aac867
Add GroupId related calls to Himbaechel API (#1399)
* Add GroupId related calls to Himbaechel API

* Example uarch using new API features

* Update drawGroup to propagate only GroupId
2024-12-05 13:59:33 +01:00
Miodrag Milanović 5a807110de
Adding NanoXplore NG-Ultra support (#1397)
* ng-ultra: new architecture

* Implementation as in D2 deliverable

* Support for nxdesignsuite-24.0.0.0-20240429T102300

* Save memory by directly outputing json

* Add support for bidirectional IOs

* cleanup

* Create BFRs properly

* Add IOM insertion

* Cleanup

* Block certain pips depending of DDFR mode

* Add LUT bypass to improve routability

* Add bypass for CSC mode of GCK

* Fix IOM case

* Initial memory support

* Better RF/XRF handling

* fix

* RF placement and legalization

* Disconnect non available ports for NX_RAM

* cleanup

* Add RFB/RAM context support for latest release

* Remove ports that must not be used

* Proper port used only on RFB

* Add structure for clock sinks

* Use cell type where applicable

* Add clock sinks for other cell types

* Validation check fixes

* Commented too restrictive placement

* Added more crossbar wire type

* Hande IO termination input

* Fail early due to NX tools limitation for now

* Validations and fixes for RAM I/Os

* Fix for latest version of tools

* Use ctx->idf where applicable

* warn if RAM ports are not actually used

* Fix IOM packing

* Fix CY packing

* Change how constants are handled on CY

* Post placement optimization for CY

* Address comments for PR

* pack and export  GCK, WFG and PLL

* Cover more global routing cases

* Constraing to location if provided

* Place at LOC

* Pack and export DSP

* wip

* wip

* notes

* wip

* wip

* Validate DSPs

* DSP cascading

* Check mandatory parameters for DSP

* existing gck

* wip

* export all the rest for bitstream

* CDC packing

* add more sinks

* place FIFO

* map rest of FIFO ports

* enable pll by default

* cleanup

* Initial XLUT support

* Fix statistics

* Properly duplicate GCKs

* RRSTO and WRSTO are not used on XFIFO

* Fix for latest version of JSON format

* Implement GCK limitations

* cleanup

* cleanup

* Add more signals and use lowskew name

* cleanup code a bit

* Fix wfb

* detect cascaded GCKs

* Handle DFR

* Route dfr clock properly

* Cleanup

* Cleanup bitstream code

* Review issues addressed

* Move helper routines

* Expose private members for unit tests

* cleanup

* remove scale factor

* make all location helper arrays static

* Addressed review comments

* Support post-routing CSC and SCC

* Support NX_BFF

* Place CSS and SCC only on allowed locations

* Support latest Impulse

* ng_ultra: Expand bounding box further for left-edge IO

Signed-off-by: gatecat <gatecat@ds0.me>

* Export all IO parameters in bitstream

* Handle new CSV order or parameters and additional validation

* Add some more undocumented values for CSV

* Support for old and new CSV formats

* Initial DDFR support

* Display warning message once per file

* Address review issues

* Fix crash on memory access

* Make boundbox fit NG-Ultra internal design

* Update attributes after dff rewrite

* Implement basic NG-Ultra LUT-DFF unit tests

* Always use first seen xbar input

Signed-off-by: gatecat <gatecat@ds0.me>

* Simplified crossbar pip detection

* Change order to prevent issues with some unconnected constants

* Pack LUT and multiple DFF in stripe

* Place DFF chains

* Improve large DFF chains

* Rename to pack_dff_chains

* Better use XLUTs when possible

* pack output DFF together with XLUT

* option to disable XLUT optimiziations

* Make more optimizations optional

* fix to use pre-increment

* GCK for lowskew signals

* Bugfix for nets that are not part of lowskew network

* Fix bitstream export for PLL cell

* Remove separate route lowskew

* Allow WFG mode 2

* Merge inverter into GCK

* Add CSC per TILE when needed

* Improve reusage of existing cell for CSC

* Take preferred CSC

* Cleanup

* When in place CSC size not important

* Cleanup

* Reset and Load restriction

* make csc optimisation optional

* Proper count for IO resources

* Detect when there is no next cell for DSP chain

* Do not incorporate loops in XLUT

* Check if output exists

* Update copyright for delivery

* Make building NG-Ultra chip database optional, follow filename convention

* Ported drawing code to new API

* Update expandBoundingBox for NG-Ultra

* Copyright and license update

* Add README information

* cleanup and constids

* Using ctx->idf where applicable

* remove if_using_basecluster

* refactor extra data usage

* refactor to use create_cell_ptr only

* optimized getCSC

* optimize critical path a bit

* clangformat

* disable clangformat where applicable

---------

Signed-off-by: gatecat <gatecat@ds0.me>
Co-authored-by: Lofty <dan.ravensloft@gmail.com>
Co-authored-by: gatecat <gatecat@ds0.me>
2024-12-04 09:00:05 +01:00
YRabbit 5eaa1b3f1f
Gowin. Add IODELAY. (#1398)
* Gowin. Add IODELAY.

Input/Output delay (IODELAY) is programmable delay uint in IO block.

This delay line is enabled before/after the IO pad and allows the signal
to be delayed statically or dynamically during 0-127 stages each lasting
from 18 to 30 picoseconds depending on the chip family.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Replacing assertions with log_error.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-11-30 09:24:59 +01:00
YRabbit 2b8a235776
Gowin. Add Input Edge Monitor (#1396)
Add sampling part to IO blocks (input only). This edge detector will
allow to dynamically adjust DDR decoding window in the future.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-11-27 09:57:34 +01:00
Miodrag Milanović 0e69425794
Add expandBoundingBox method to API (#1395)
* Add expandBoundingBox method to API

* Update API documentation
2024-11-26 10:13:41 +01:00
Miodrag Milanović 55035465aa
Himbaechel GUI (#1295)
* Extend Himbaechel API with gfx drawing methods

* Add bel drawing in example uarch

* changed API and added tile wire id in db

* extend API so we can distinguish CLK wires

* added bit more wires

* less horrid way of handling gfx ids

* loop wire range

* removed not needed brackets

* bump database version to 5

* Removed not used GfxFlags
2024-11-21 15:13:22 +01:00
YRabbit 9c2d96f86e
Gowin. FFs placement. (#1386)
* Gowin. FFs placement.

* Allow clusters to be created from FFs and LUTs;

* Immediately create pass-through LUTs from free LUTs adjacent to FF - at the same time ensure alternating use of LUT inputs;

* In case of constant networks, such pass-through LUTs are disconnected from networks altogether;

* Allow FF to be placed directly into SSRAM slides - this is useful when using synchronous reading.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Fix aux name creation

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Use I3 for pass-trough LUTs

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-10-22 12:49:44 +02:00
gatecat 7c459805f6 himbaechel: Bump DB version for package extra_data addition
Signed-off-by: gatecat <gatecat@ds0.me>
2024-10-09 15:21:10 +02:00
Pepijn de Vos 028be1462a
apicula: add support for magic sip pins (#1370)
* apicula: add support for magic sip pins

* fix nullptr check

* DDR fix by xiwang

* WIP support for setting the iostd

* add iostd
2024-10-09 15:16:36 +02:00
YRabbit 65cf6d8da7
Gowin. Fix the port check for connectivity. (#1376)
* Gowin. Fix the port check for connectivity.

What happens is that it's not enough to check for a network, we also
need to make sure that the network is functional: has src and sinks.

And the style edits - they get automatically when I make sure to run
clang-format10.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

* Gowin. Fix the port check for connectivity.

What happens is that it's not enough to check for a network, we also
need to make sure that the network is functional: has src and sinks

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>

---------

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-10-02 22:36:36 +02:00
Adrien Prost-Boucle 7f33329fe1 Himbaechel Xilinx : XDC commands : Also search nets with lowercase for better interoperability with other synthesis tools and RTL languages 2024-10-01 15:24:40 +02:00
Adrien Prost-Boucle 3d00b97e0a Himbaechel Xilinx : Support get_nets with braces around net name in XDC commands 2024-10-01 15:24:40 +02:00
Adrien Prost-Boucle a9cc7f453d Himbaechel Xilinx : Support multiple nets per command 2024-10-01 15:24:40 +02:00
Adrien Prost-Boucle ff9ba9e090 Himbaechel Xilinx : More warning messages about unsupported things in XDC file 2024-10-01 15:24:40 +02:00
gatecat 9b51c6e337 clangformat
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-30 14:51:33 +02:00
gatecat 1967db170d xilinx: Support for complex IOLOGIC
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-27 17:37:46 +02:00
gatecat 24fc33c014 xilinx: Basic I/ODDR support
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-27 17:09:15 +02:00
gatecat d3c0f945da xilinx: Fix BRAM placement, clangformat
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-27 16:24:47 +02:00
gatecat 38e5faca85 xilinx: Fix workaround for unsupported xdc construct
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-27 16:07:38 +02:00
gatecat e4dfd4e622 xilinx: Support single-port LUTRAM variants
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-26 18:11:01 +02:00
gatecat 7516b8950a xilinx: Few more stub timings
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-26 17:30:36 +02:00
gatecat 118ecbc6b3 xilinx: Remove unnecessary assert
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-26 15:58:16 +02:00
gatecat c90d872e35 xilinx: Filter out another missing pip type
Signed-off-by: gatecat <gatecat@ds0.me>
2024-09-26 15:56:20 +02:00