Commit Graph
49 Commits
Author SHA1 Message Date
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 8d0cc11269 ci: Update FPGA CI pipelines to match new image builder
- Removes target names for X3x0 and X4x0 builds (these are now encoded
  in the YAML file)
- Change the image core YAML file names referenced in the pipeline YAMLs
  to match the contents of fpga/usrp3/top/x?00/*.yml
- Remove X410_XG_100 image since it is not a shipping image
- Add image_core_name arguments for all E320, E31x, N3xx targets


Original-commit: 50e07a5b42d4a244c12b5a13b51048573d0069ec
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
Martin Braun 6b3d10ad31 x300: Add support for reading device DNA
Original-commit: 14f487f1655516b0f10b40b94a16c8bf2dac33cc
2024-06-11 10:20:07 +02:00
Martin Braun 69e728dba0 fpga: Add passthru CHDR/DMA transport adapter module
Original-commit: badb2356066555807a2f1e1d08fe968261dfdb04
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
Martin Braun 77d07a9714 fpga/rfnoc: Add license checker block
Original-commit: 5dad6c370f776981987afc2770d8a0ed0fb29575
2024-05-27 17:05:06 +02:00
Martin Braun cc28ffff60 fpga: Add license checker module
Original-commit: 8ed8927b944e7ad8a5da040c7f1951aad3535e11
2024-05-27 17:05:06 +02:00
Martin Braun cf85a6d40c fpga: Add cores for SHA256
Cores originate from https://github.com/secworks/sha256.


Original-commit: c43c72db097cbb5ebe29b7fa81484cbeaf19516b
2024-05-27 17:05:06 +02:00
Martin Braun 8af1711952 fpga: rfnoc: Enable blocks with no inputs/outputs
The following modifications are applied to allow RFNoC blocks with zero
input- or output ports (or none at all):

- The backend interface will no longer synthesize any flushing logic if
  there are no streaming ports
- The Mako templates are modified to allow generating code for blocks
  without streaming ports
- The BFM for RFNoC blocks (RfnocBlockCtrlBfm) is partially factored out
  into a parent class (RfnocBlockCtrlBfmCtrlOnly) which allows the
  simulation of such RFNoC blocks


Original-commit: 878cfcf48f125826e9d48b7c61a4ee7fd19e9a94
2024-05-27 17:05:06 +02:00
Martin Braun 76f67bbb0c fpga: Add module for reading Xilinx device DNA
- This provides a CtrlPort access to reading back the device DNA
- Available for US+ devices (i.e., RFSoC) and 7-series.


Original-commit: 43856f90da01cebc1e4b327f4435966ccd1df602
2024-05-27 17:05:06 +02:00
Martin Braun e2c442ab8c fpga: Update tooling to use image builder instead of make
This modifies repeat_fpga_build.py such that it can take a YAML file as
input, not just a make target. It will then use the image builder to
prepare the build and generate a valid make command, which in turn is
used to build FPGA images repeatedly.


Original-commit: 09f3453f39363870f1c03ef1c917a0dedb7598df
2024-02-25 16:54:12 -06:00
Martin Braun f4e2c89e4c fpga: utils: Add update_image_cores.sh
This utility will regenerate all the image core .v files from the
available YAML files. It won't rebuild bitfiles.


Original-commit: 4861318d3bdccd8d1baa627a8473eb34f76583b1
2024-02-15 10:18:34 -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 27b06f86fb fpga: tools: Spruce up launch_vivado.py
- We add documentation for the dev_config.json file
- Fix Pylint issues


Original-commit: 7789c136fbf996451b8621da4b277a59193913fe
2023-12-13 17:28:09 -06:00
Martin Braun 7a00849c02 fpga: Add more spurious files to gitignore
Original-commit: 0465be974d307991543b2913eab25ca3ad52b6dd
2023-12-13 17:28:09 -06:00
Martin Braun 90e094b614 fpga: x410: Add dev_config.json
Original-commit: fd15a053bc622f3735a9d83e1a6da9b66488a774
2023-12-13 17:28:09 -06:00
Martin Braun c98c7ab88d fpga: Remove dupes from DESIGN_SRCS
In the build Makefiles, this adds a function (uniq) which removes
duplicate entries from lists. We apply this to the DESIGN_SRCS passed
to the Vivado build process. This eliminates some warnings from
duplicate source files caused by redundantly referencing source files in
the Makefiles, possibly because they are listed in more than one source
file variable.


Original-commit: 1944263412d329d53b32a17e9735b79e59e319d7
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
Martin Braun e44fe8625b fpga: lib: Add default wiretypes to synchronizer
The module was failing with missing wire types when instantiated from
another module with a default wiretype of 'none'. To fix this, this
module was also moved to no default wire type.


Original-commit: 9d1e200d5e727b34339fc4ca9b6f94b28449747a
2023-11-14 17:15:53 -06: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
Martin Braun 613444b39b fpga: rfnoc: radio: Add clock index parameters
This allows the BSP files that instantiate radio blocks to pass in clock
indices.


Original-commit: c669d16a0a500de6b10b0817c7ebbd175818f2cb
2023-10-17 10:24:15 -05:00
Martin Braun e016ef0343 fpga: rfnoc: Add clock info to backend ifc
- Adds 6 bits each for an identifier for timebase and control clock
- Update all mako templates accordingly


Original-commit: 58c0276ff1ceaf825d7cbffbab5016ddef9a5cd9
2023-10-17 10:24:15 -05:00
Martin Braun e49258d910 fpga: x4xx: Rename x410 -> x4xx for common DTS files
Original-commit: ce3fb34b4926a35abf2f109610dacb17c29577f9
2023-04-24 17:27:00 -05:00
Martin Braun 292d31fc52 x300: Update firmware for TA control
- Bump firmware compat to 6.1
- Remove crossbar counter logic (the FPGA does *not* support crossbar
  counters anymore, so we remove it from the firmware as well)
- Remove crossbar programming control (this is now provided by RFNoC
  management packets)
- Remove UDP framing control (this is also provided by RFNoC management
  packets)
- Remove Ethernet link/activity LED control (this has been handled by
  the FPGA directly for years now)
- Add functionality to program transport adapter. The TA is programmed
  directly on the settings bus, so for the most part, this is already
  possible from the firmware. The only exception is the 'virtual'
  register to program IP address and MAC at the same time. In the
  firmware, it will perform an ARP lookup of the MAC address, and then
  write the "normal" IPv4 address register in the TA, as well as the MAC
  address registers.
- Updated bootram.coe


Original-commit: 89fb75288e151cd1e43af765618c0665e79801f9
2023-01-10 14:19:00 -08:00
Martin Braun 4d4b06dfac fpga: Cosmetic changes to rx_frontend_gen3_tb
- Add different signal types
- Default to real/constant
- Minor cleanup


Original-commit: 0624d6c6452fa47c47bb33abc1eb8ef935cfcf1f
2022-12-02 11:42:44 -08:00
Martin Braun 4e2da5912b fpga: Fix overflows in quarterrate downconverter
The 1/4-rate downconverter naively negated the input signals (y = -x)
which doesn't work when the signal is at full scale. In particular,
signals that are at full negative scale get converted to zeros (even
though 2's complement would be to return the same number, although that
would also be incorrect).

This fix changes it such that the smallest negative value gets converted
to the largest positive value.

This is not a mathematical correction inversion, but a minor amplitude
distortion. However, since we're already at full scale, and thus
probably clipping, this is preferable to the incorrect resolution of the
regular inversion. Put differently, there is no better value in this
case.


Original-commit: 8bd982745e6247cf3cf3da52925c65126287428a
2022-12-02 11:42:44 -08:00
Martin Braun c38c6f1b3a Remove FSRU-related files
The FSRU (aka EISCAT) was never supported in UHD 4.0. The FPGA
repository never had the relevant files, and the block controller also
never existed. This removes all the corresponding files from MPM, as
well as some references from makefiles.


Original-commit: ba00ff0cf5c0ced093e0be12b3006fe2f657a58a
2022-02-22 14:41:19 -06:00
Martin Braun d706b50681 images: Remove references to N230
USRP N230 is no longer supported starting with UHD 4, and thus, we can
remove it from the image manifest. This will no longer download N230
images when calling uhd_images_downloader from UHD 4.


Original-commit: f1f6d8eac52bfecd840ace95c2d357641ae3b09c
2022-02-15 14:07:53 -06:00
Martin Braun 43128791b4 images: Add utilization report files to B2xx image files
Original-commit: ac286920f0d4f3b7b26ea3cfc7a9e11ae10346d1
2022-02-10 11:35:47 -07:00
Martin Braun cb471fe66a fpga: b2xx: Generate utilization report files
Currently, the build process copies the .twr and .syr files into the
build/ process after running ISE. For a succinct utilization report,
those files are not suitable, though, because they contain too much
information.

However, the build process already produces a custom, short utilization
report using grep and a summary of those reports. This patch modifies
the build such that the same output is copied into
a usrp_$product_fpga.rpt file, similar to our gen-3 devices.


Original-commit: 3a9f3204842d9851fef0e87b6b7d27261624a7fc
2022-02-10 11:35:47 -07:00
Martin Braun f645d3d613 fpga: Remove noc_shell_regs.vh and sim_rfnoc_lib.svh
Both files are a UHD 3 remnant and potentially confusing for UHD
4 codebase readers.


Original-commit: b29af0ea0d340f37628f65e7b739fa1865d212a9
2022-01-25 14:09:15 -07:00
Martin Braun 471173f245 fpga: e320: Connect CTRL_IN pins to FPGA
These pins control hardware-controlled fast-lock for tuning or
cycle-accurate gain control. This commit does nothing to these pins
other than expose them into the design and assign them to zero. This
does not change the current behaviour (the motherboard has pull-downs on
these pins, so they're low by default).


Original-commit: c891f2d8738bc1b73bb92d88623f4760f9e2bd1e
2022-01-10 08:46:56 -06:00
Martin Braun 5b75fcbd9a fpga: e320: Remove copy/paste from N310 code
Original-commit: a9e313676dfbd5703b4763a7c9dc03e62746335b
2022-01-10 08:46:56 -06:00
Martin Braun 979d9ef53a images: Add the utilization report for X410 images (X4_200)
Original-commit: 52c459acbcd020f40c208504c8604c59d18d836d
2021-12-17 09:34:20 -06:00
Martin Braun 537684dc86 fpga: x300: OR ATR signals going into db_control
Before this change, only the channel 0 ATR state was sent to the
db_control module. For TwinRX, this had the disadvantage that when only
Channel 1 was used, the FP- and LED-GPIOs could not track the radio's
ATR state (e.g., no LED would light up in this case).

Note that unlike UHD 3, there is only one db_control module per slot.
There are therefore no options to map GPIOs to track the ATR state of an
individual channel.


Original-commit: f23ab72129041777bcd3357a1f4e37b29e62dd86
2021-12-07 12:11:35 -06:00
Martin Braun 13633dd543 fpga: Fix Xilinx bitfile parser for Python 3
The script was previously only Python 2 compatible.

Python 2 support is now removed, so we don't maintain backwards
compatibility with Python 2.

This also fixes all linter warnings.


Original-commit: 6046e1a812ba2065d6ae13b4c4afdce8abc99d4f
2021-08-24 09:45:36 -05:00
Martin Braun dabe25774f fpga: docs: Improve documentation of rx_frontend_gen3
Also fixes a typo in the calibration manual page.


Original-commit: 3b3d3b6f9efb0fe685d9fabc8bdaca813549d9e3
2021-04-07 11:02:53 -05:00
Martin Braun 781636013c fpga: dsp: Fix formatting of rx_dcoffset and add docs
- Adapt to coding guide
- Add header that explains the module


Original-commit: 09995cc9954877cb56b4f028dc273f2d5fd0be10
2021-03-09 08:33:32 -06:00
Martin Braun ec4fab0340 fpga: Remove Python2 support from build system
- 2to3 was used to convert the Python scripts, except where the tool
  choked and manual intervention was required
- All references to "python" where replaced with "python3"
- buffer() was replaced by memoryview()


Original-commit: ca68195b5d12c5410cfac8d459a0b0902c4c72c7
2021-01-04 13:28:36 -06:00
Martin Braun 324f9d3c9a fpga: e320: Fix default YAML target to E320_1G
It was set to E320_HG, which is not a valid target, causing build errors
unless -t E320_1G was provided to rfnoc_image_builder.


Original-commit: 9ed42affcaa88e026cb4f82807e69b546ed30c8c
2020-08-17 07:56:30 -05:00
Martin Braun 2f517134cd fpga: e31x: Add gitignore file
Original-commit: dc32aa5cd4fb174ee3c616f854f499a53137aa75
2020-07-18 13:33:42 -05:00
Martin Braun b923e1bb2c e31x: Minor cleanup on top-level e31x.v module
- Fixed some incorrect comments
- Fixed some missing wire declarations for internal NIC
- Fix wire declarations for GPIO (they were declared too late)


Original-commit: b18eaa75de2d1dcba2a1be0ee0b862a57e976cca
2020-07-18 13:33:42 -05:00
Martin Braun 17bafa621e fpga: tools: Remove uhd_image_builder
The image builder was replaced by rfnoc_image_builder, and has been
obsolete since then.


Original-commit: 676c3a37867f0e19476e9dc8495127bb3208a1a0
2020-05-18 17:57:38 -05:00
+18 6b67702ad7 Merge FPGA repository back into UHD repository
The FPGA codebase was removed from the UHD repository in 2014 to reduce
the size of the repository. However, over the last half-decade, the
split between the repositories has proven more burdensome than it has
been helpful. By merging the FPGA code back, it will be possible to
create atomic commits that touch both FPGA and UHD codebases. Continuous
integration testing is also simplified by merging the repositories,
because it was previously difficult to automatically derive the correct
UHD branch when testing a feature branch on the FPGA repository.

This commit also updates the license files and paths therein.

We are therefore merging the repositories again. Future development for
FPGA code will happen in the same repository as the UHD host code and
MPM code.

== Original Codebase and Rebasing ==

The original FPGA repository will be hosted for the foreseeable future
at its original local location: https://github.com/EttusResearch/fpga/

It can be used for bisecting, reference, and a more detailed history.

The final commit from said repository to be merged here is
05003794e2da61cabf64dd278c45685a7abad7ec. This commit is tagged as
v4.0.0.0-pre-uhd-merge.

If you have changes in the FPGA repository that you want to rebase onto
the UHD repository, simply run the following commands:

- Create a directory to store patches (this should be an empty
  directory):

    mkdir ~/patches

- Now make sure that your FPGA codebase is based on the same state as
  the code that was merged:

    cd src/fpga # Or wherever your FPGA code is stored
    git rebase v4.0.0.0-pre-uhd-merge

  Note: The rebase command may look slightly different depending on what
  exactly you're trying to rebase.

- Create a patch set for your changes versus v4.0.0.0-pre-uhd-merge:

    git format-patch v4.0.0.0-pre-uhd-merge -o ~/patches

  Note: Make sure that only patches are stored in your output directory.
  It should otherwise be empty. Make sure that you picked the correct
  range of commits, and only commits you wanted to rebase were exported
  as patch files.

- Go to the UHD repository and apply the patches:

    cd src/uhd # Or wherever your UHD repository is stored
    git am --directory fpga ~/patches/*
    rm -rf ~/patches # This is for cleanup

== Contributors ==

The following people have contributed mainly to these files (this list
is not complete):

Co-authored-by: Alex Williams <alex.williams@ni.com>
Co-authored-by: Andrej Rode <andrej.rode@ettus.com>
Co-authored-by: Ashish Chaudhari <ashish@ettus.com>
Co-authored-by: Ben Hilburn <ben.hilburn@ettus.com>
Co-authored-by: Ciro Nishiguchi <ciro.nishiguchi@ni.com>
Co-authored-by: Daniel Jepson <daniel.jepson@ni.com>
Co-authored-by: Derek Kozel <derek.kozel@ettus.com>
Co-authored-by: EJ Kreinar <ej@he360.com>
Co-authored-by: Humberto Jimenez <humberto.jimenez@ni.com>
Co-authored-by: Ian Buckley <ian.buckley@gmail.com>
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@ni.com>
Co-authored-by: Jon Kiser <jon.kiser@ni.com>
Co-authored-by: Josh Blum <josh@joshknows.com>
Co-authored-by: Jonathon Pendlum <jonathan.pendlum@ettus.com>
Co-authored-by: Martin Braun <martin.braun@ettus.com>
Co-authored-by: Matt Ettus <matt@ettus.com>
Co-authored-by: Michael West <michael.west@ettus.com>
Co-authored-by: Moritz Fischer <moritz.fischer@ettus.com>
Co-authored-by: Nick Foster <nick@ettus.com>
Co-authored-by: Nicolas Cuervo <nicolas.cuervo@ettus.com>
Co-authored-by: Paul Butler <paul.butler@ni.com>
Co-authored-by: Paul David <paul.david@ettus.com>
Co-authored-by: Ryan Marlow <ryan.marlow@ettus.com>
Co-authored-by: Sugandha Gupta <sugandha.gupta@ettus.com>
Co-authored-by: Sylvain Munaut <tnt@246tNt.com>
Co-authored-by: Trung Tran <trung.tran@ettus.com>
Co-authored-by: Vidush Vishwanath <vidush.vishwanath@ettus.com>
Co-authored-by: Wade Fife <wade.fife@ettus.com>


Original-commit: bafa9d95453387814ef25e6b6256ba8db2df612f
2020-01-28 09:35:36 -08:00
Martin Braun 74893643ca Removed copy of FPGA source files.
Original-commit: fd3e84941de463fa1a7ebab0a69515b4bf2614cd
2014-10-07 11:25:20 +02:00
Martin Braun 56e84828fe Merge branch 'maint'
Original-commit: adb88dbd1f996ed26bab654a9a059ea4f3ede823
2014-09-24 19:08:33 -07:00