Commit Graph
514 Commits
Author SHA1 Message Date
Wade Fife d46b94f233 fpga: lib: Add Xilinx FFT IP for various configurations
Original-commit: d96546d6391d10844e6ce0abd2e7e190b738365a
2024-12-17 22:13:42 +01:00
Wade Fife 4f99fee248 fpga: lib: Add complex_to_magphase_int17 IP
The underlying Xilinx CORDIC IP uses 2 bits for the whole part of its
(X,Y) inputs and its magnitude output. So, having 17 bits means we have
enough precision to represent the entire range of an sc16. The 16-bit
CORDIC is insufficient to cover this entire range.


Original-commit: 0d3d69493aac9239ae437b04f291c61669678606
2024-12-17 22:13:42 +01:00
Wade Fife 7e792d4a25 fpga: rfnoc: Add SV packages for use with RFNoC
Original-commit: c2b8eb4a88534230ce31dd4d40e4c069644c4d10
2024-12-17 22:13:42 +01:00
Wade Fife 48d8e384b6 fpga: lib: Add usrp_utils.svh with common macros
Original-commit: 079fbe528347fd4a2fd01064b30d2096f7e7b476
2024-12-17 22:13:42 +01:00
Wade Fife 82e1da1b78 fpga: lib: Cleanup axi_demux module
- Add documentation
- Add generate block labels
- Remove tabs and fix indentation
- Separate the code into three logical sections


Original-commit: 76074ecb319bf770805374b81c966b94cba898c5
2024-12-17 22:13:42 +01:00
Wade FifeandJörg Hofrichter 965c13e861 fpga: tools: Add JUnit XML support to run_testbenches
Co-authored-by: Jörg Hofrichter <joerg.hofrichter@emerson.com>


Original-commit: f1ef9ada680dd6e8ca600d3c01551b0d1b6f52a5
2024-12-11 09:08:11 +01:00
Wade Fife 5a9d9a1eb2 fpga: tools: Add --ignore-warnings to repeat_fpga_build
Original-commit: 381ecf857852a5184402b20d82d8b19f2188f434
2024-11-27 19:35:33 -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 23b44d6538 fpga: tools: Add do file for ModelSim
Original-commit: 99982799869267550844d34a64fe82dfb1aaa79d
2024-10-08 18:15:52 -05:00
Wade Fife 775f1330bc fpga: tools: Add parallel FPGA build support
Add parallel FPGA build support to repeat_fpga_build.py.


Original-commit: b6ce5671f89cd10107b0f83524c4fd86a0a358b6
2024-10-07 11:04:13 -05:00
Max Köhler a460c3ca2c fpga: tools: add diamond build sanity checks
Original-commit: aa10241c7f034739da8905f862beaf0f31d286ed
2024-09-24 10:24:29 -05: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
Max Köhler 08f8b269fa fpga: ci: remove color coding from FPGA bitfile name
Original-commit: eb5fe85748996675f2ec73e1f10857ba81e66c56
2024-07-11 15:29:53 +02: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
Wade Fife 712142efdb fpga: sim: Initialize test_status
Initialize test_status for backwards compatability with testbenches
that don't call start_tb().


Original-commit: 72295360e65d989dd774deabc4add0a54eb6f97e
2024-06-20 11:35:27 +02:00
Ryan Volz 1451ae066b fpga/usrp3: Fix DC truncation bias by adding rounding to DDC chain.
A digital DC bias caused by various truncations in the DDC chain was
previously noticable with small signal levels, especially with high
decimation rates. This patch eliminates the bias by replacing the
truncation with rounding or simply keeping more bits for longer where it
makes sense.

This is essentially a forward port of a similar prior fix to the usrp2
DDC chain: https://github.com/EttusResearch/fpga/pull/4.

Signed-off-by: Ryan Volz <ryan.volz@gmail.com>


Original-commit: a57c162a0d11ab82a83c911a94272ceb6f7ff70a
2024-06-11 10:20:08 +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
Wade Fife 0e6459250b fpga: tools: Force write when saving Vivado project file
Original-commit: 6abfd8a49aa3037a6784dd6acef801bed5ae3ed7
2024-06-11 10:20:08 +02:00
Wade Fife 8685870bf4 fpga: tools: Add --fpga-dir to repeat_fpga_build
Original-commit: 2ff91bcfc057d6d632c6a151ce2aed71d1103e91
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
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
Martin Braun 69e728dba0 fpga: Add passthru CHDR/DMA transport adapter module
Original-commit: badb2356066555807a2f1e1d08fe968261dfdb04
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
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
Max Köhler 75a2526efd fpga: x400: zbx: Set Locale for ZBX Lattice build
Original-commit: 02c1c06f708e035c9ce17d32832944bc94faf099
2024-05-21 20:37:52 -05:00
Max Köhler 10f0bc2e79 fpga: tools: Fix VHDL and Verilog types in modify_bdtcl
Original-commit: 041eef3472e0440730708053d47b1fb7b793c682
2024-05-18 21:29:35 -05:00
Wade Fife 894e5aa9a4 fpga: sim: Fix cast in PkgRandom
Original-commit: c6561226d819b75b18fffad283ec59d58109a951
2024-05-16 09:30:05 -05:00
Wade Fife 70ab61e202 fpga: sim: Fix test_status indices in PkgTestExec
Original-commit: 19a6ad3073647b0a7d98bded0a7d23133dc97945
2024-05-16 09:29:37 -05:00