Commit Graph
231 Commits
Author SHA1 Message Date
Wade Fife bea852caeb fpga: Remove build-usrp dirs when cleaning builds
Original-commit: 26553e3069d05102035e00861e8a7529efe50e00
2024-09-09 10:12:30 -05:00
Wade Fife 4b93935967 fpga: x400: Make DTS output match bitstream name
Original-commit: 2afc66f1325632a4bc0635217feefe666225f4e8
2024-09-09 10:12:30 -05:00
Wade Fife f13f084b15 fpga: Put dependencies first in Makefile SRCS list
Original-commit: 0de3eb63bba518d94058c985d759958caac388d5
2024-09-06 17:58:33 -05:00
Max Köhler 71c7b9044d fpga: x400: add register in 100G Eth TX path for timing
Original-commit: 7e457a190cf37b48090aebcc715a07851cbda9d2
2024-08-30 13:23:29 -05:00
Max Köhler 82545838b2 fpga: x440: fix conditional timing constraints
Original-commit: f407c1cc11f14fb3cef6975c62b6ba5c380aa9ce
2024-08-27 17:22:35 -05:00
Grant Meyerhoff 31ecc191a3 fpga: x440: correct crossbar replay port comments
Not a functional change. The comments for the replay block in the
crossbar_routes reflect a single replay block, but the FPGA image
actually has two replay blocks with half the number of ports as the
single block design.


Original-commit: 32efa102ce592ff16204b67b9aeb244e9589166e
2024-08-27 16:01:25 -05:00
Max Köhler ea4f2ff009 fpga: x440: refactor rf_core_full to use parameters on ports
Original-commit: 40bd20d240b2ee60ec58ad5a00a9ec9eebd1e9af
2024-08-21 08:06:41 -05:00
Martin Braun 0df7b0071c fpga: Fix warnings from building N3xx AA images
These bitfiles use four-port DRAM FIFOs and only connect two of those
ports. We skip the warnings as that is the intended build behaviour.


Original-commit: 52860eeb670da53c08dddb40dd950832b087acbe
2024-06-27 13:21:03 +02:00
Martin Braun fba65c68f7 image builder: Allow missing connections
The image builder will currently emit a warning if a NoC-block has
unconnected ports. This requires specifying `-W` to continue building,
which is the intended behaviour.

However, there are cases where there are legitimate reasons to not
connect a block, e.g., in the X310, where the radio block has 2x2 ports,
but we only connect 2 RX ports, and 1 TX port.

This adds a way to declare a "null" connection, which makes it explicit
in the image core YAML that a connection was deliberately omitted. Such
connections are created by connecting to a port called "_none_", e.g.:

```
connections:
  - { srcblk: _device_,  srcport: _none_, dstblk: radio0, dstport: in_1 }
```

The block name is irrelevant, but the schema requires providing a block
name.

This commit also amends the x3xx_radio_base.yml to avoid warnings when
building X3x0 bitfiles.


Original-commit: 6758966a5ac127a396e8b3b39f96aa484098e50f
2024-06-26 15:08:39 +02:00
Martin Braun d696c160db fpga: rfnoc: Harmonize x410_X4_400_rfnoc_image_core.yml
This file was repeating entries from x410_radio_base.yml, which none of
the other x410 image core YAML files do.


Original-commit: 1ba6fdaf9c3a17cbb46f976f9d4dd8349cf5adb7
2024-06-25 17:19:51 +02:00
Martin BraunandWade Fife 523212fa04 image builder: Add --build-ip-dir option
Co-authored-by: Wade Fife <wade.fife@ni.com>


Original-commit: 94b4de39d61ac4165ab18001b7d1a27c34698795
2024-06-11 10:20:08 +02:00
Martin Braun 6ef3795e42 fpga: Align build process for all targets
- All RFNoC capable targets now require rfnoc_image_builder to be built
- `make help` is updated for all targets to provide more useful and
  up-to-date information
- The FPGA manual is also updated
- All checked-in build artifacts are now removed from git
- axi_ram_fifo.yml is updated to provide include path information
  (required for building N3xx BIST images, which use this)


Original-commit: 28b994406d4c9547b1e2add62781b6a8162fdb74
2024-06-11 10:20:08 +02:00
Martin Braun ba5e431c5c fpga/mpm: x4xx: Add device DNA read capability
- Bumps FPGA compat from 8.2 to 8.3
- Adds three global motherboard registers to read the 96-bit device DNA
- MPM is updated to read these registers and update the device_info if
  compat version 8.3 is available


Original-commit: ad5f97f8284057b85ca98f47365c2a321edf7ece
2024-06-11 10:20:07 +02:00
Jonathon PendlumandMartin Braun d006250dc1 fpga: x400: Add PPS interface to X410/X440 BSP
This creates an IO port `pps` for X410, and two IO ports (`pps0`, `pps1`)
for X440 which allows modules inside the RFNoC image core to access the
FPGA. Note that accessing the PPS signal is generally not required for
RFNoC blocks which require access to timing.

Co-authored-by: Martin Braun <martin.braun@ettus.com>


Original-commit: c3525362643b56910692ad8ddc5d0e8cedd1869c
2024-06-11 10:20:07 +02:00
Martin Braun 6b3d10ad31 x300: Add support for reading device DNA
Original-commit: 14f487f1655516b0f10b40b94a16c8bf2dac33cc
2024-06-11 10:20:07 +02:00
Javier Valenzuela 6d89320721 fpga: x400: Add netlist make flow
Original-commit: 789fa8f65727afabdeb4eea30a941015c6cd2ad5
2024-06-11 10:20:07 +02:00
Wade Fife 872de917bf fpga: x4xx: Replace Ethernet transport adapter
Original-commit: 34cee97e6206151e80d33e0e5367dcac62038a67
2024-06-11 10:20:07 +02:00
8669c68048 utils: image builder: Major update
Most important effect of this change: rfnoc_image_builder is now
required to build bitfiles, 'make' alone won't suffice any longer!

This is a huge changeset to the image builder that combines multiple new
features:

- There no longer is a separate edge file for the static router. The
  static routes are generated as a Verilog parameter directly into the
  rfnoc_core_kernel (which is also modified).
- image_builder.py is split up into several smaller files. Code is moved
  into yaml_utils.py, and the new files grc.py, builder_config.py
- Generic module support is added. Aside from noc blocks and stream
  endpoints, we can now instantiate arbitrary modules (they also require
  a YAML description file).
- To enable such modules, resets are now also tracked the same way that
  clock domains are.
- The ImageBuilderConfig config object now more closes matches the
  original YAML file. The attributes 'clk_domain_con' and 'block_con' are
  removed. Instead, the attributes 'connections' and 'clk_domains' are
  sanitized and amended with extra annotations. The templates are
  updated to reflect this change.
- IO ports can now carry parameters, e.g., to have variable wire widths
  based on the configuration.
- Many Pylint warnings were resolved.
- Add inheritance support for image core YAML files.
  This allows image core files to (recursively) inherit from other image
  core files. To do so, simply put an 'inherit' entry at the top of the
  file:
```yaml
inherit: 'x410_radio_base.yml'
```
- The inheritance feature is used as part of the image core files.
- Image core and DTS files are now generated as a build artefact into
  the build directory. This requires the usage of rfnoc_image_builder to
  build images. As a consequence, it is no longer required to check in
  image core Verilog files.
- As another consequence, rfnoc_image_builder is required to build
  bitfiles!
- Image flavours are no longer defined through Makefiles, but purely
  from the image core YAML files.
- Remove all image core YAML files that do not generate a shipping
  image. Because of the inheritance feature and the requirement to use
  the image builder, it is trivial to add new YAML files.
- Add support for transport adapters through the YAML files. Before,
  transport adapters were inferred from the make target (e.g.,
  X410_X4_200 would have four 10GbE links based on the 'X4' substring).
  Now, transport adapters are defined via the image core YAML.
- This feature is currently only used (or can be used) by the X4xx
  series. Older devices may or may not be ported to allow custom
  transport adapters in the future.
- Add parameters to the BSP YAMLs and the devices itself. This allows
  setting global parameters in the image core files. For example, the
  X4x0 devices use this to decide if they instantiate DRAM channels.
- DTS includes and constraint files can now be requested by
  blocks/transport adapter through their YAML files. They do no longer
  need to be listed in the Makefile.
- Support for secure image cores. These are image cores that allow
  incorporating RFNoC blocks that require license keys and thus can't
  live in an open-source environment. This solution adds the option for
  secure image cores without touching the open source feature set.
- Add --reuse option to allow manual editing of generated artefacts
- Allow IO signatures from any module: until now IO signatures had to be
  defined in a single file (io_signatures). This file will persist. In
  addition each module can add its own IO signature as with the same
  format the core IO signatures placed under the top level key
  `io_signatures`.  IO signatures are still maintained in a global
  dictionary. The consequence is that they can be shared among
  independent modules as well as they have to have a globally unique
  name. The image builder will warn about detected name clashes for the
  signatures.
- As a consequence, some less commonly used IO signatures were moved to
  their corresponding module YAML files.

Co-authored-by: Wade Fife <wade.fife@ni.com>
Co-authored-by: Lars Amsel <lars.amsel@ni.com>


Original-commit: a98ce2621e2a2dc25535fc700b49bfcb00b8eb59
2024-06-11 10:20:07 +02:00
Max Köhler fa95da3f7f fpga: x400: Place SPI into IOB on X440
Placing the SPI registers into the IOB makes timing closure more
reliable.


Original-commit: 6c25d54c34f0cc4612d5c9d27e0cbd90ff248795
2024-04-09 17:12:44 -05:00
Wade Fife 822d1bd26d fpga: Add option to specify build output directory
Original-commit: 58fb72a82da8bb638dbdfe44d3be84e8382c10a2
2024-03-15 20:08:15 -05:00
Wade Fife 600df8752c fpga: Add option to build IP only
Original-commit: adcca0acd995a75fb2dede4d6a86641821e49e3d
2024-03-15 20:07:28 -05:00
Wade Fife a82a2d122e fpga: Add Vivado project option to USRP FPGA builds
Original-commit: 2e0db35eaf69947c344f67c9f38132e33f88a141
2024-03-15 20:05:39 -05:00
Wade Fife fc35c2a66a fpga: n3xx: Rename BIST image cores
Rename the BIST image cores to match the default image core names. This
eliminates the need to provide special arguments to build these images.


Original-commit: aae712c2eafe3f78ba8ed553190f7010a2d17c57
2024-03-15 00:32:53 -05:00
Wade Fife 9b6fc5d501 fpga: Add incremental to strategies for e3xx, n3xx, x3xx
Original-commit: 4b63ca00894944e03e7897f96316ab24cd5411d1
2024-03-14 16:35:11 -05:00
Javier Valenzuela 629266db08 fpga: Update x3xx/e3xx RFNoC image core files
Original-commit: d4412b0022f07f94ccbb3b314ac7b81de1a479b8
2024-03-13 21:35:39 -05:00
Max Köhler e9700b2081 fpga: x4xx: add option for incremental Vivado build
So far only the implementation after opt_run is affected by the changes.


Original-commit: 4c56b1b55ff3ae10561bd5efc83e3bb9a6a818d6
2024-03-12 16:03:23 -05:00
Max Köhler 7be838b24c fpga: x400: zbx: Improve Lattice make flow
Original-commit: fa8559bb0f334d80e08798d415117cedf86be923
2024-03-05 20:07:50 -06:00
David Raeman ea7c48ad38 n3xx: Add comments on clock_source=external,time_source=gpsdo
It is, in principle, possible to use an external clock to synchronize
N3x0 devices in frequency, and then use a GPSDO for a coarse time
synchronization. This use case is deliberately not supported, as the
GPSDO PPS signal and the external clock signal are by definition not
matched, which will remove any guarantees on time/phase alignment.

Because there are certain, niche use cases where the lack of phase
alignment is acceptable, but only an external clock is available (no
shared external PPS), usage of GPS for generating a PPS signal may be
fine. This patch does not enable the usage of this combination out of
the box, but adds comments and an update to the manual to explain the
risks of this combination, and how to enable it (by patching MPM).


Original-commit: 76e004db07a3714139e64ff396a81b90c372b2bb
2024-02-21 06:40:57 -06:00
Wade Fife 9a8e484332 fpga: x400: Update PS DRAM speed bin
Change DRAM speed grade from 075E to 075.


Original-commit: 935dde560682a79a3fa166389e27942a10d97c10
2024-01-08 11:52:50 -06:00
Martin Braun 44d1ecb8b2 fpga: x300: Remove irrelevant critical warning
Original-commit: 065c5394b7f6d167d0092d58ac325a903037befe
2024-01-04 10:24:05 -06:00
Martin Braun df0b86f432 fpga: x300: sfpp: Fix warning about duplicate reg
This removes a duplicate code section that causes build warnings. It
also references a wire that gets declared further down and the removed
and remaining code sections were incorrectly indented.


Original-commit: e8084eb4cb4ec6ff6476feb6e77ab3ea45dd969e
2024-01-04 10:24:05 -06:00
Martin Braun 90e094b614 fpga: x410: Add dev_config.json
Original-commit: fd15a053bc622f3735a9d83e1a6da9b66488a774
2023-12-13 17:28:09 -06:00
Martin Braun ce0ddc6dac fpga: Replace references to python -> python3
In several cases, we call `python` explicitly. On many modern operating
systems (e.g., Ubuntu 22.04), this command no longer exists, and if it
does, it's often an alias to python3.

Because the python3 executable has been around for so long, simply
using that directly (instead of, e.g., autodetecting the OS preferences)
is a simple fix that immediately allows building bitfiles, e.g. for the
B2xx series, on more recent OSes.


Original-commit: 356cd172bb5ae0d043825bd1f4dffbd6646ec3d2
2023-12-05 15:43:08 -06:00
Javier Valenzuela 23220e0737 fpga: x400: add default declaration for DRAM_BANKS
Original-commit: 2c4f46cb39fde5c01488a14a4068fbd210f5628d
2023-11-14 16:23:16 -06:00
Javier Valenzuela d05b79a8aa fpga: x400: rfdc timing cleanup
Original-commit: cee5825ba4cf384d54e1488a4fb7af088c50e1e3
2023-11-03 08:44:00 -05:00
Wade Fife 03f9ee6f52 fpga: x400: Add clock IDs to X440 200 MHz image
Original-commit: 6a990d9b3297ff2c9f2f91b7ea89494c1098c3f5
2023-11-03 07:22:52 -05:00
Javier Valenzuela 2f83ebb435 fpga: x400: bump minor revision
Original-commit: e7ff54284ce7b8279b434867640d6374dc1f3a2b
2023-10-25 14:14:48 -05:00
Javier Valenzuela ddbff804ed fpga: x400: update signals to run on two domains
Original-commit: 982ea5b2d85c5a120569d80be3c53b54fdd670d3
2023-10-25 14:14:48 -05:00
Wade Fife e67c1f9ed4 fpga: x400: Split DRAM interface on X440_X4_200
Original-commit: 9001c6638086b3383a057f7a994687a8abad5e99
2023-10-25 12:49:38 -05:00
Wade Fife e87c82cc74 fpga: x400: Split DRAM interface into two banks
This updates the RFNoC image cores to separate the two DRAM banks on
X4xx by splitting them into "dram0" and "dram1". Previously, both DRAM
banks shared the same DRAM port, named "dram", which created some
confusion.

The Replay block has also been duplicated in the bitstreams that use
both banks, so we now have one Replay block per bank.


Original-commit: b5cfab8922e5b3f4ff13a8a64e8b0319876f13db
2023-10-24 13:03:41 -05:00
Martin Braun 2c5a2f5974 x4xx: Add support for auto clock ID
- Update X410 and X440 BSP YAML files to properly index clocks
- Update image core files to declare clock indices
- Update get_clocks() in MPM to return the correct values

This does not include changes to the x400_radio_control block registry.
This change by itself will thus not change behaviour.


Original-commit: f215af2ccde6420b685b4ca493c8bd71d28781cb
2023-10-20 07:30:16 -05:00
Wade Fife dbabc04cd9 fpga: x400: Add X440 200 MHz variant
This adds support for the X440_X4_200 variant which supports up to
200 MHz bandwidth (250 Msps), has a DDC and DUC on each channel,
4 x 10 GbE interfaces, and no DRAM.


Original-commit: bdaba58750ce0c2ccc58769936c3c5c4a6b2d2cf
2023-10-18 22:41:55 -05:00
Wade Fife ea0b8f4012 fpga: x400: Add CE clock
Adds a 266.667 MHz compute engine clock and uses it instead of the
radio clock for the DDC and DUC. Using a faster clock than the radio
allows the DDC and DUC to drain after a stall in the data flow.


Original-commit: ab93cb0929b9536b6d6cbfdc4813e6ba169053ae
2023-10-18 22:23:55 -05:00
Wade Fife 2612487d43 fpga: n3xx: Add CE clock
Adds a 266.667 MHz compute engine clock and uses it instead of the
radio clock for the DDC and DUC. Using a faster clock than the radio
allows the DDC and DUC to drain after a stall in the data flow.


Original-commit: ff55d406a02cc934a5c238d22c836bea08ade3d1
2023-10-18 22:23:55 -05:00
Javier Valenzuela ccfb94c062 fpga: x400: propagate pps_sync changes
Original-commit: ad17a3eba408db72803dde06fe0482b316c61e96
2023-10-17 10:18:17 -05:00
Javier Valenzuela 4d38451f2a fpga: x400: pps_sync cleanup
Original-commit: 4527a8f70d35d88f8cd75dd358fff07f29496f4f
2023-10-17 10:18:17 -05:00
Javier Valenzuela 4e26d6946f fpga: x440: remove extra synchronizer
Original-commit: a2f4fc49ac52b84593a8e529efa9c5ccbeacb325
2023-10-17 10:18:17 -05:00
Wade Fife c5a4ea2f0e fpga: x400: Update PL DRAM speed bin
Change DRAM speed grade from 075E to 075.


Original-commit: aaa92a16738a6bc2a7c76a4aadb2f0af573d4a38
2023-09-14 13:00:03 -05:00
Javier Valenzuela 72c3a524c7 fpga: x440: cpld: led control cleanup
Original-commit: 1024b69d0c6b32176adf5f6f2269149ef0c34837
2023-09-14 12:58:47 -05:00
Mark Eid b4c2aa0a40 fpga: x400: Fix SPI trigger clock crossing
Original-commit: 5da42f3542ed555623c73c7ce487b9960849f209
2023-07-31 17:35:44 -05:00