Commit Graph
58 Commits
Author SHA1 Message Date
Wade Fife f13f084b15 fpga: Put dependencies first in Makefile SRCS list
Original-commit: 0de3eb63bba518d94058c985d759958caac388d5
2024-09-06 17:58:33 -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 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
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
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
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 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
Wade Fife 88dd427a98 fpga: Fix RFNoC OOT Makefile inclusion
Original-commit: 4d73b966de307a59fe4b1cf3ad2e584d28f81e63
2023-07-26 15:13:50 -05:00
michael-west e9a6fe4e2e FPGA: Synchronize X300 RX frontends on time change
The frontend synchronization upon time change was removed, but is
required to synchronize the RX frontend modules when sharing LOs on
TwinRX.  This change restores the behavior.

Signed-off-by: michael-west <michael.west@ettus.com>


Original-commit: c70b479007ab9f578577dfb5c2de6660e877d9a3
2023-05-10 14:22:42 -05:00
Wade Fife aeaf219f77 fpga: Update all RFNoC image core files
Original-commit: 0fca5d5ffda1f5f4f7c966c3e5f5200222a5a575
2023-02-24 08:07:17 -06:00
Wade Fife aa9f88602d fpga: Update RFNoC YAML copyright
Original-commit: 69b0989397353560ad804a8d5a5171e481c84c7f
2023-02-22 21:55:02 -06:00
Wade Fife eec959f814 fpga: Add BUILD_BASE_DIR option to makefiles
Adds a BUILD_BASE_DIR makefile variable that allows you to specify the
base directory for FPGA build outputs. This allows you to put the
output from each run of make into a unique directory, or to run
multiple instances of make in parallel with each build's output being
put in a different directory. For example:

make X310_XG BUILD_BASE_DIR=/path/to/builds


Original-commit: bc6db8409ba756bbad0d0c158ffb00c614b58fd9
2023-02-09 07:38:49 -06:00
Wade Fife ab63d78a6c fpga: Add BUILD_SEED variable
Adds a BUILD_SEED make variable that can be set to a 32-bit integer,
and adds an FPGA read-only register initialized by this variable.
Changing this variable will randomly affect the FPGA build results.
This can be useful when your build fails timing by a small amount,
allowing you to build again and get different results with the same
code.

For example, you could run the following to produce an FPGA build with
different timing results from the default build:

make X310_XG BUILD_SEED=123


Original-commit: 3a3a03486f9221c2e59fa6d0826c23d17730956d
2023-02-07 23:04:12 -06:00
michael-west 2c0fea5d1e fpga: Update copyright
Update copyright on recently changed files.

Signed-off-by: michael-west <michael.west@ettus.com>


Original-commit: 92c09f7f766586683ebd67bb3a57005250c4d81d
2023-01-19 15:55:56 -08:00
michael-west b8163da1d1 FPGA: Restore FIR filter in rx_frontend_gen3
The FIR filter applied gain.  Removing it caused incorrect scaling and
signals where every other sample was zero.  Also parameterized heterodyne
frontend processing so it would not use resources in images not
requiring it.

Signed-off-by: michael-west <michael.west@ettus.com>


Original-commit: c27519624ec0f3a44ac1130635a03dafcf2e7f13
2023-01-19 10:05:27 -06:00
Wade Fife 1d9a3018db fpga: n3xx: Cleanup MTU parameters
Original-commit: 9e4c8cbbbb8677eecbab66ab01a02375664ad4a2
2022-09-01 14:41:55 -05:00
Wade Fife 354b59e430 fpga: n3xx: Add PROTOVER to n3xx_mgt_wrapper
Original-commit: 936965c104696b7883674a713d457042eaeb249f
2022-09-01 14:41:55 -05:00
Wade Fife 92abd3945a fpga: n3xx: Remove unused USE_REPLAY parameter
Original-commit: 244b0a575fce2eb9e489b7f46c6e6cd13ec7a0bd
2022-09-01 14:41:55 -05:00
Wade Fife a23ff16c07 fpga: n3xx: Bump FPGA compat to 8.1
Original-commit: 65671437c81fe0395dd2400a1e36bbc5fd934b40
2022-08-29 17:01:45 -05:00
Wade Fife a270cb29d6 fpga: n3xx: Support advanced transport adapter
- Fix NODE_INST
- Fix RFNOC_PROTOVER
- Add option to use SystemVerilog transport adapter for raw UDP


Original-commit: 693ec2c896306bcba3686385e5861593040d4cbd
2022-08-29 17:01:45 -05:00
Wade Fife f010ce051e fpga: Fix target dependencies in Makefile.xxx.inc
Original-commit: e0147fd19347e4e2b2ec1cae193d4c295b9c427b
2022-08-29 07:53:32 -05:00
Humberto Jimenez 5f2dd66658 fpga: n3xx: Add BUFG to SPI output line to ease timing
Vivado has demonstrated difficulty meeting timing with the spi0_mosi split. To
improve the chances of meeting timing, we are routing this signal through a
BUFG. This makes the routing step use a more efficient net routing that eases
timing closure.


Original-commit: 8c49730e4cf6af172d26ee6a5d35182ed3160058
2022-08-25 13:55:30 -05:00
Humberto Jimenez b6d9977685 fpga: Use AR76780 patch for fir_compiler
Original-commit: 719cccea7fd6a8a27d6cb96242984240c583a2ee
2022-08-25 13:55:30 -05:00
Sam O'Brien 2997319b47 fpga: n3xx: Fix async clocks relationship
Original-commit: 9774025b1e0769da31277c97461b442a21df51b4
2022-08-25 13:55:30 -05:00
Sam O'Brien 931bd6491a fpga: n3xx: Upgrade to Vivado 2021.1
Original-commit: c9886751dc361e44345a61e9b8bed310c3d8a9c2
2022-08-25 13:55:30 -05:00
Wade Fife 81bb2ae28f fpga: Update makefiles to allow parallel FPGA builds
This adds the ability to do IP generation and FPGA builds using the
--jobs (-j) option with Make. For example, rather than generating each
IP one after another, you can generate up to N at a time using N Vivado
instances. This greatly reduces the IP generation time. Similarly,
parallel jobs can be used to easily build different FPGA variants
simultaneously.

Because FPGA builds can consume a lot of memory, care must be taken to
ensure that the number of jobs is not too high for the amount of memory
available.

New IP make targets were added for each USRP so that IP can be built
separately from the FPGA. The IP targets are now a dependency on each
FPGA target.

For example, you can generate the IP for X310 using 4 parallel jobs
using the following command:

  make -j4 X310_IP

Or, build two X310 bitstreams simultaneously:

  make -j2 X310_XG X310_HG


Original-commit: 4b03e237a96ee277eefff257d65b08708c38662c
2022-08-16 10:16:22 -05:00
Wade Fife b8ded164e5 fpga: rfnoc: Remove rfnoc_version from target YAML
This causes the latest RFNoC protocol version to be used by default
and avoids the need to update YAML files every time the RFNoC
protocol version gets bumped.


Original-commit: 92016a585a5223a9a7678134e318e412875b64c2
2022-05-11 12:29:35 -07:00
Wade Fife 16c1235b30 fpga: Update all RFNoC images
Original-commit: 002ff9698e09b94c396736613e493f79e9c56442
2022-03-31 13:51:23 -07:00
Wade Fife b81ab96b12 rfnoc: Update device port names in image core YAML
Update USRP RFNoC iamge core YAML files to use the more consistent
device port names. Clean up the formatting and make the files more
consistent.


Original-commit: 6318eaeff548f760056af7c8172937a296409d25
2022-03-31 13:51:23 -07:00
Wade Fife 4784032014 fpga: n3xx: Add missing BIST image core headers
Original-commit: 958eab7ea804337bd904c119427d363a05aa5cf6
2022-03-29 14:45:04 -05:00
Wade Fife 61ee0ddec3 fpga: Use PROTOVER and CHDR_W from RFNoC image builder
This updates all RFNoC devices so that they get the RFNoC protocol
version and CHDR width in the same way, from the output generated by
the RFNoC image builder.


Original-commit: 6f038dc2f69b38e715206b2e700fdd3a1bbc638e
2022-03-29 14:45:04 -05:00
Wade Fife a0987ea0f8 fpga: n3xx: Fix clock frequency comments
Original-commit: 40f0d8e4e59a4d13a6d9b7ac07b4d649a5c813f9
2022-03-26 21:52:26 -05: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
Wade Fife 1c0724aae2 fpga: n3xx: Fix DRAM FIFO address alignment
Original-commit: 59e35418ea5e6a0383e124425829e3de7dfa3237
2022-02-10 19:46:39 -07:00
Humberto Jimenez 653c9bacf3 images: Update N32x CPLD manifest
Original-commit: a4fc11e6ef08be2141f3cfea7c521aae0ba65634
2022-01-31 15:03:50 -06:00
Humberto Jimenez 95c58d5ed6 fpga: n3xx: rh: cpld: Refactor CPLD build process
Original-commit: 739b37ba40e7aba288ed781922aa8fa3b1bfc16e
2022-01-25 18:28:57 -07:00
Wade Fife 3c4c049943 fpga: n3xx: Update synchronizer constraint
Original-commit: ab4b0c6e0eacbc68df3f211ce27790b1cfbc002f
2021-09-13 13:20:37 -05:00
Wade Fife 869861c8cf fpga: Set default part for sim in setupenv.sh
This sets the ARCH and PART_ID environment variables so that the
selected part family is used for simulations by default. This can be
overridden by changing them in the Makefile for the testbench if a
testbench requires a specific part family. Prior to this change, the
default was always ARCH=kintex7, PART_ID=xc7k410t/ffg900/-2, which
required support for that part to be installed.


Original-commit: c176046dff4941bcec27b0b72e5a68264c4808e5
2021-08-30 08:20:10 -05:00
michael-west 8164e94fbd N3xx: Fix White Rabbit
Reconnect the signals from the White Rabbit module to the TDC in the
FPGA.

Signed-off-by: michael-west <michael.west@ettus.com>


Original-commit: c0637bae1e4a0ddb996cf2b7eadfad22f782874b
2021-08-04 15:19:58 -05:00
Wade Fife fcfc6bf387 fpga: Update testbenches to work in ModelSim
Original-commit: 0076076467303247c4e62e5824e5bf8ce79cbe66
2021-06-17 08:16:59 -05:00
Wade Fife 43e32abd11 fpga: Update rfnoc_image_core for all targets
Update rfnoc_image_core.v to take into account the new image_core_name
fields and version strings. Add new rfnoc_image_core.vh. Update YAML
where needed.


Original-commit: b0033158a4c520063540881451d8daac91e98714
2021-06-10 11:56:58 -05:00
Wade Fife 3b1d62928d fpga: Change RFNoC YAML version numbers to strings
Change version from a numeric to a string, in order to
differentiate between versions like "1.1" and "1.10".


Original-commit: ca21048bd2f832b20bb36763f76d46b861b697a5
2021-06-08 15:48:59 -05:00
mattprost 52172aaaf3 fpga: Add Replay Block to RFNoC Core Image
Add the Replay RFNoC block to the RFNoC core image for x300, x310, n300,
n310, n320/n321, and e320. The Replay block is contained within its own
static connection, so previous default behavior is still supported.

Signed-off-by: mattprost <matt.prost@ni.com>


Original-commit: 437381bd2cfe137c5e7e2a70aab8226bfb1c70cd
2020-09-03 15:26:33 -05:00
Wade Fife eab91d8ed0 fpga: Update DRAM IO signatures
This updates the IO signatures so that all devices and RFNoC blocks use
the same IO signature for the DRAM. This is needed because the IO
signatures must match between the RFNoC blocks and the devices. This
means that some devices have extra bits in the IO signature for the
address, but the extra bits will simply be ignored.


Original-commit: 8f09caaa06725d2364c63ac7cff02f3298895f4a
2020-09-03 15:26:33 -05:00
Wade Fife bd5d539bc2 fpga: n3xx: Update AXI interconnect address range
This change allows the entire 2 GiB address space to be accessed on
each memory port.


Original-commit: c6bb9924e56664ccb337694f8ef485ba8245edfd
2020-08-28 15:07:38 -05:00
Wade Fife 2253f7dbb0 fpga: n3xx: Fix timeout for timekeeper registers
This implements the same change that was made for E31x. The same issue
wasn't reproduced on N3xx, however this change keeps the code
consistent and eliminates the potential for the same problem.


Original-commit: e94a209c5b2559348593a6732d694fd49ab59ad0
2020-08-19 12:28:22 -05:00