Commit Graph

4715 Commits

Author SHA1 Message Date
Rowan Goemans
f199c3e576
Update shell.nix (#1347) 2024-08-12 16:29:26 +02:00
Saviour Owolabi
e9e7dce23d
Himbaechel Gowin: HCLK Support (#1340)
* Himbaechel Gowin: Add support for CLKDIV and CLKDIV2

* Himbaechel Gowin: Add support for CLKDIV and CLKDIV2

* Gowin Himbaechel: HCLK Bug fixes and corrections
2024-08-03 15:57:22 +02:00
YRabbit
11d335c7ce Gowin. Fix GW2A-18(c) DCS and DQCE
We filter out PIPs from these chips that bypass DCS.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-08-02 14:12:16 +02:00
YRabbit
10a5a44b81 Gowin. Implement clock management primitives.
DQCE and DCS primitives are added.

DQCE allows the internal logic to enable or disable the clock network in
the quadrant. When clock network is disabled, all logic drivern by this
clock is no longer toggled, thus reducing the total power consumtion of
the device.

DCS allows you to select one of four sources for two clock wires (6 and 7).
Wires 6 and 7 have not been used up to this point.

Since "hardware" primitives operate strictly in their own quadrants,
user-specified primitives are converted into one or more "hardware"
primitives as needed.

Also:
  - minor edits to make the most of helper functions like connectPorts()
  - when creating bases, the corresponding constants are assigned to the
    VCC and GND wires, but for now huge nodes are used because, for an
    unknown reason, the constants mechanism makes large examples
    inoperable. So for now we remain on the nodes.

Compatible with older Apicula databases.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-08-02 14:12:16 +02:00
YRabbit
f17caa2379 Gowin. BUGFIX. Fix placement checks
It was not taken into account that there are only 6 ALUs per cell. As a
result, on complex designs where ALUs and LUT-based memory are involved
and there are many LUTs (like in the RISCV emulator), there were
sometimes false positives about placement conflicts.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-07-29 11:31:59 +01:00
YRabbit
eb099a9244 Gowin. Bugfix.
The statement in the Gowin documentation that in the reading mode
"READ_MODE=0" the output register is not used and the OCE signal is
ignored is not confirmed by practice - if the OCE was left unconnected
or connected to the constant network, then a change in output data was
observed even with CE=0, as well as the absence of such at CE=1.

Synchronizing CE and OCE helps and the memory works properly in complex
systems such as RISC-V emulation and i8080 emulation (with 32K RAM and
16K BSRAM based ROM), but there is no theoretical basis for this fix, so
it is a hack.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-07-09 14:18:35 +02:00
YRabbit
1871afe9b9 Gowin. Taking into account the features of ROM
For pROM(X9) primitives in images generated by Gowin IDE, there is an
interesting recommunication of inputs depending on the data bit depth.
For example, in some cases, a high logical level may be applied to the
Write Enable input, which, let’s say, is not entirely usual for Read
Only memory.

Here we will do similar manipulations.

In addition, several minor bug fixes are included:

 - Fixed bit numbering for non-X9 series primitives.
 - Fixed decoder generation for BLKSEL - do not assume unused inputs are
   connected to GND.
 - Use default values for BSRAM parameters - don't assume their
   mandatory presence.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-07-09 14:18:35 +02:00
Miodrag Milanovic
cecd6b3f4d Document context related calls in HimbaechelAPI 2024-07-08 16:45:24 +02:00
Miodrag Milanovic
6b5b21e165 Enable user to override setupArchContext in Himbaechel arch 2024-07-08 16:45:24 +02:00
YRabbit
7dd4a8c1d5 Gowin. Implement power saving primitive
As the board on the GW1N-1 chip becomes a rarity, its replacement is the
Tangnano1k board with the GW1NZ-1 chip. This chip has a unique mechanism
for turning off power to important things such as OSC, PLL, etc.

Here we introduce a primitive that allows energy saving to be controlled
dynamically.

We also bring the names of some functions to uniformity.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-07-08 16:44:49 +02:00
TG
ba293437e0 ice40: Fix Python bindings for pip iterators 2024-07-03 15:09:27 +02:00
YRabbit
0639681b73 Gowin. Fix BSRAM block selection.
In the images generated by Gowin IDE, the signals for dynamic BSRAM
block selection (BLKSEL[2:0]) are not always connected directly to the
ports - some chips add LUT2, LUT3 or LUT4 to turn these signals into
Clock Enable.  Apparently there are chips with an error in the operation
of these ports.

Here we make such a decoder instead of using ports directly.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-07-03 15:09:13 +02:00
YRabbit
2e8280a949 Gowin. Fix pipeline mode in BSRAM.
It seems that the internal registers on the BSRAM output pins in
READ_MODE=1'b1 (pipeline) mode do not function properly because in the
images generated by Gowin IDE an external register is added to each pin,
and the BSRAM itself switches to READ_MODE=1'b0 (bypass) mode .

This is observed on Tangnano9k and Tangnano20k boards.

Here we repeat this fix.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-06-25 11:14:02 +02:00
YRabbit
8f87918230 Gowin. Add fix for Single Port BSRAM
Add description of BSRAM harness

In some cases, Gowin IDE adds a number of LUTs and DFFs to the BSRAM. Here we are trying to add similar elements.

More details with pictures: https://github.com/YosysHQ/apicula/blob/master/doc/bsram-fix.md

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-06-25 11:14:02 +02:00
gatecat
a29a17f8f2 clangformat
Signed-off-by: gatecat <gatecat@ds0.me>
2024-06-18 13:54:12 +02:00
gatecat
c89037db49 static: Speedup with parallel wirelength gradient computation
Signed-off-by: gatecat <gatecat@ds0.me>
2024-06-18 13:53:42 +02:00
gatecat
945cf48c6c static: Various convergence improvements for ECP5
Signed-off-by: gatecat <gatecat@ds0.me>
2024-06-18 11:05:59 +02:00
gatecat
61cc5259d9 prefine: Add shared lock around bel availability checks
Signed-off-by: gatecat <gatecat@ds0.me>
2024-06-12 16:11:18 +02:00
gatecat
b7f91e57a0 Update cached Yosys in CI
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-17 06:31:43 +02:00
gatecat
59a29e5f42 nexus: Use a toposort when preplacing clock primitives
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-17 06:31:43 +02:00
gatecat
423f1b7159 static: Make bin stamping more consistent
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-08 09:53:28 +02:00
gmanricks
09703c7f35 update import to boost 2024-05-06 11:22:56 +02:00
gmanricks
eb0554319f use boost for windows path 2024-05-06 11:22:56 +02:00
gmanricks
f99346ba61 fix for windows path 2024-05-06 11:22:56 +02:00
Miodrag Milanovic
0dc4bcb203 Format utlilisation for larger FPGA as well 2024-05-06 11:22:33 +02:00
gatecat
3f2451f8d7 static: Guard density CSV dumps behind a flag
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-03 09:50:40 +02:00
gatecat
89e3b7d23d static: Fix float overflow issue
Co-authored-by: Lofty <dan.ravensloft@gmail.com>
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-03 09:39:24 +02:00
gatecat
7a00e76cb1 static: Exclude dark nodes from steplength
Signed-off-by: gatecat <gatecat@ds0.me>
2024-05-03 09:36:09 +02:00
Patrick Dähne
f085950383 Fixed header files for boost 1.85.0 2024-04-30 12:13:11 +02:00
Miodrag Milanovic
edcafcf085 Ignore compile artifacts in rust directory 2024-04-19 11:55:49 +02:00
YRabbit
4d5c48ad83 Gowin. Fix DSP MULT36X36
When multiplying 36 bits by 36 bits using four 18x18 multipliers, the
sign bits of the higher 18-bit parts of the multipliers were correctly
switched, but what was incorrect was leaving the sign bits of the lower
parts of the multipliers uninitialized. They now connect to VSS.

Addresses https://github.com/YosysHQ/apicula/issues/242

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-04-19 11:55:39 +02:00
YRabbit
d3b53d8e1a Gowin. PLL Pads. Fix the condition.
Do not search for pads if the signal source for the PLL is something
other than the IO pin - these are guaranteed to already be placed and
have a bound Bel.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-04-09 10:15:42 +02:00
YRabbit
6b7723e4c1 Gowin. Add PLL pads.
If the CLKIN input of the PLL is connected to a special pin, then it
makes sense to try to place the PLL so that it uses a direct implicit
non-switched connection to this pin.

The transfer of information about pins for various purposes has been
implemented (clock input signal, feedback, etc), but so far only CLKIN
is used.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-04-09 10:15:42 +02:00
Miodrag Milanovic
9bb46b98b4 update ci build script 2024-04-05 12:25:52 +02:00
Miodrag Milanovic
1f25f2067a Make example more like other arch 2024-04-05 12:25:52 +02:00
Miodrag Milanovic
ac725465a9 gui: fix warning on closing application 2024-04-05 12:25:52 +02:00
Miodrag Milanovic
75af8ccfd2 gui: user more reliable locking 2024-04-05 12:25:52 +02:00
Miodrag Milanovic
465cbfaf19 Add share to .gitignore 2024-04-05 12:25:52 +02:00
Jason Thorpe
7f9f75c0d3 Tweak the FreeBSD version of proc_self_dirname() to work on NetBSD and use it.
Resolves issue #1298.
2024-03-27 22:02:16 +00:00
Andrew Bell
b4da57598e One more warning. 2024-03-22 09:50:11 +00:00
Andrew Bell
693058abb7 Eliminate gcc13 warnings. 2024-03-22 09:50:11 +00:00
YRabbit
5ecb669a41 gowin: BUGFIX fix typo
Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-03-22 09:49:01 +00:00
YRabbit
210e0fa33b gowin: Add support for DSP primitives.
For the following primitives:
  - PADD9
  - PADD18
  - MULT9X9
  - MULT18X18
  - MULT36X36
  - MULTALU18X18
  - MULTALU36X18
  - MULTADDALU18X18
  - ALU54D
packing and processing of fixed wires between macro and between DSP
blocks is implemented.
Clusters of DSP and macro blocks are processed using custom placement of
cluster elements.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-03-22 09:47:10 +00:00
YRabbit
ff96fc5af1 gowin: Himbaechel. Fix IDES16/OSER16
Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-03-13 14:22:43 +01:00
YRabbit
4e8436a1fc gowin: Himbaechel. Allow to combine IOLOGIC.
Corrects the situation when it is impossible to use IOBUF with two
IOLOGIC elements at the same time - input and output.

Addresses https://github.com/YosysHQ/nextpnr/issues/1275

This is done by dividing one IOLOGIC Bel into two - input IOLOGIC and
output IOLOGIC plus checking for compatibility of the cells located
there.

At the moment, this check is simple and allows only the combination of
DDR and DDRC primitives.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-03-13 14:22:43 +01:00
YRabbit
4981ebb698 gowin: Himbaechel. Improve the global router
A small improvement - do not waste time analyzing already processed
networks in the previous step (and possibly steps).

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-03-13 14:22:11 +01:00
gatecat
05ed9308d6 ecp5: Improve router performance on slower speed grades
Signed-off-by: gatecat <gatecat@ds0.me>
2024-02-21 08:14:51 +01:00
gatecat
aa26ba7ea1 static: Improve singleton handling
Signed-off-by: gatecat <gatecat@ds0.me>
2024-02-20 10:25:35 +01:00
gatecat
255633c9f3 static: First pass at timing-driven placement
Signed-off-by: gatecat <gatecat@ds0.me>
2024-02-12 09:09:13 +01:00
YRabbit
cc273c1257 gowin: Himbaechel. Handle SDP OCE
Semi-dual port BSRAM (in Gowin terminology) has the same feature as
Single Port - the CE and OCE signals must be synchronized.

Such a sin has not yet been noticed for Dual Port.

Signed-off-by: YRabbit <rabbit@yrabbit.cyou>
2024-02-09 08:04:08 +01:00