Commit Graph
140 Commits
Author SHA1 Message Date
Friedrich Wenisch dbb52a6909 fpga: x410: Fix NCO reset mechanism
Original-commit: 1dd1447e9e93b3614c341fd808d090701d521970
2025-04-17 15:37:13 +02:00
Max Köhler d742b4018f fpga: x4xx: add reset option for gearboxes
Original-commit: 22b4a35da29fd70a6a6030e555139b4bb7cc56f1
2025-04-02 08:02:11 +02:00
Max Köhler 14e864bdb1 fpga: x440: bring back TX control remap in RFDC BD
Original-commit: e4cbbe71452b269d8272ff7b1c7658523acfff4f
2025-03-25 07:50:14 +01:00
Max Köhler 88d7598bfc fpga: x400: zbx: update projects for new ctrlport modules
Original-commit: 95e227edaaacc3eb68937cebcc2ba385eb0997a2
2025-03-21 09:09:09 -05:00
Max Köhler 01d6ebd45e fpga: x400: cpld: update projects for new ctrlport modules
Original-commit: 6bcb44df7b94970cdbdb724987e27d5f306c40a7
2025-03-21 09:09:09 -05:00
Max Köhler e67d78533c fpga: bump compat number to 10.0
Original-commit: 1cb4898519dfc2661c4537ec06faa23ed4525329
2025-03-20 09:07:06 +01:00
Max Köhler 50f20ef4ab fpga: x4xx: replace ADC/DAC info by RFDC memory
Original-commit: 6c6d52fd655b144aa5ee581edae7911dc734854e
2025-03-20 09:07:06 +01:00
Wade Fife 6fe021fdcd fpga: x400: Change NUM_DRAM_BANKS to 2 on X410 X4_400 image
This was set to 1 in UHD 4.7, but it must be 2 for all channels to
have sufficient bandwidth.


Original-commit: b012c18fd653714e84b1d4a86e27ff90fe13ae04
2025-02-27 10:53:07 -06:00
Max Köhler 7446db939c fpga: x440: fix refactored rf_core_full
Original-commit: f1fab29e4444476378faa8d435c1f76faa5a702c
2025-02-13 07:58:10 -06:00
Friedrich Wenisch 3ed06cc861 fpga: x400: refactor RFDC block diagrams and timing constraints
Original-commit: a7bce74be154de9a68d6bdf2f9a6651b480b6dfa
2025-02-13 07:51:05 -06:00
Max Köhler c12766fd4d fpga: x400: bump FPGA compat version to 9.0
Original-commit: 85ef95fd85f5fdd0eb8b7792443bf3b9ce4728cf
2025-02-12 14:38:08 +01:00
mschill 4ae2f8eb5e fpga: x400: Update SYSREF Delay and capture mechanism
Together with an update to the LMK04832 register config according to
TIs data sheet, all clock outputs are now aligned to SYSREF rising edge.
Therefore, I needed to adjust the SYSREF capture mechanism inside the
RFSoC and the SYSREF LMK Delay.
SYSREF is now captured first at the falling edge of PRC.
To be on the safe side, we are still double synchronizing SYSREF
afterwards on the rising edges of PRC.

As we are now independent of any MCR regarding timing constraints the
SYSREF Delay is also set to '0' for all X4xx devices.


Original-commit: b5cb4fac42ab530174e108455b730ffa1510d70a
2025-02-12 14:38:08 +01:00
Max Köhler b016b90dbc fpga: x400: avoid false PPS rising edge on switching sources
Original-commit: d5876c82a02f7800141b74517d0b5461946de9fc
2025-02-05 16:56:54 -06:00
Max Köhler f4b6def040 fpga: x400: refactor 100GEth LBUS to AXI interface
Original-commit: a218a6a503e5e4baddb939affa57b5c960ffbc84
2025-01-31 09:08:03 -06:00
Joerg Hofrichter 5cbd981c3e fpga: x4xx: assemble x410/x440-version-info.dtsi in BUILD_DIR
Original-commit: 0a635d0d11b52b300474cb2871f54a1a5458647c
2024-11-22 08:00:03 +01:00
Max Köhler 2a89218e95 fpga: x400: add rf core ctrlport
Original-commit: a9add0a6a5baefe7dcc8fbb5a39f01dc935c7a3e
2024-11-12 15:57:36 -06:00
Martin Braun f07af03214 image builder: Use RADIO_NIPC parameter
This simplifies image core files by generating a RADIO_NIPC parameter
for the X410, X440 and E31x BSP files. The IO port widths for X410 are
now dynamically widened based on the NIPC value, which is a function of
the RF_BW parameter, and cannot be modified.

The radio block can now read the NIPC value from the BSP, and populate
its spc parameter dynamically. This avoids having to know the right spc
value when writing YAML image core files and reduces redundancy.

This also removes the RADIO_NIPC parameter entirely from all the image
core files. This parameter was fine, but it was a bit confusing because
it referenced a Verilog parameter, which you just had to know was there
in the generated Verilog. By referencing the BSP parameter instead, the
YAML files (BSP, radio.yml, and image core file) are now self-contained
regarding the RADIO_NIPC/spc information.

As a minor upside, the input wire widths for X410's and N310's
rfnoc_image_core.sv module are now generated with the correct widths,
and not, as before, with the worst-case width (and then we assume Vivado
will do the right thing).


Original-commit: 53b4d7a21018fe7aabf9f774260aefb41297a41b
2024-11-05 15:30:50 +01:00
Wade Fife e659f0cfdd Fix instances of sim preamble
Original-commit: d6ba2dfb5cb524ba2116cb0c3613af9650e57d03
2024-09-17 08:43:22 -05:00
Joerg Hofrichter e01ce08634 fpga: e31x/e320/n3xx/x400: Rework device tree file generation
... to support custom image core name, example:

    rfnoc_image_builder -y n310_rfnoc_image_core.yml -n my_custom_name

The device tree source files were renamed to match the target
name used in the Makefile.

    example:
        old: dts/usrp_n310_fpga_hg.dts
        new: dts/N310_HG.dts

The source file is used to compile the final .dts file in the BUILD_DIR.

    example: build-my_custom_name/N310_HG.dts

The final .dts file is copied to the BUILD_OUTPUT_DIR as part of the
post build steps and renamed to the custom image core name.

    example: build/my_custom_name.dts

This completes the change that was introduced with commit 2afc66f132.


Original-commit: d40db57f2e03c322ac6b0001e0a59d4a14a5a3b9
2024-09-13 08:44:30 -05:00
Max Köhler 264b33a416 fpga: x400: use parameter for RFDC info in RF core full
Original-commit: 97d108b6f9579865f1bbd62e1c9859d290337768
2024-09-09 10:18:59 -05:00
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 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
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
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
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 90e094b614 fpga: x410: Add dev_config.json
Original-commit: fd15a053bc622f3735a9d83e1a6da9b66488a774
2023-12-13 17:28:09 -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