https://github.com/esnet/esnet-smartnic-fw
ESnet SmartNIC firmware design repository.
https://github.com/esnet/esnet-smartnic-fw
high-touch
Last synced: about 1 year ago
JSON representation
ESnet SmartNIC firmware design repository.
- Host: GitHub
- URL: https://github.com/esnet/esnet-smartnic-fw
- Owner: esnet
- License: other
- Created: 2022-04-06T14:14:08.000Z (about 4 years ago)
- Default Branch: main
- Last Pushed: 2025-04-15T18:38:45.000Z (about 1 year ago)
- Last Synced: 2025-04-15T19:43:22.672Z (about 1 year ago)
- Topics: high-touch
- Language: C
- Homepage:
- Size: 1.08 MB
- Stars: 10
- Watchers: 18
- Forks: 2
- Open Issues: 0
-
Metadata Files:
- Readme: README.fw.artifacts
- License: LICENSE.md
Awesome Lists containing this project
README
================================
Inside of the firmware container
================================
FPGA files imported from the FPGA hardware (HW) build are embedded into the firmware (FW) container.
```
$ tree /usr/local/lib/firmware/esnet-smartnic/
/usr/local/lib/firmware/esnet-smartnic/
├── debug_nets.ltx <------------ chipscope probe points
├── esnet-smartnic.bit <------------ FPGA bit file to be loaded over JTAG
├── esnet-smartnic.mcs <------------ FPGA flash image to be loaded into FLASH
├── esnet-smartnic.p4 <------------ copy of the user's P4 program built into this FPGA
└── open_nic_shell.ltx <------------ chipscope probe points
$ tree /usr/local/share/esnet-smartnic/
/usr/local/share/esnet-smartnic/
└── esnet-smartnic-top-ir.yaml <------ PCIe register map definition used to directly read/write registers for debug using regio tool
$ tree /usr/local/share/esnet-smartnic-dev/
/usr/local/share/esnet-smartnic-dev/
└── spec <------ original yaml definitions for registers within blocks/decoders (informational only)
├── box0_250mhz_decoder.yaml <------ regmap specification for blocks in box0_250mhz smartnic platform and user design
├── box1_322mhz_decoder.yaml <------ regmap specification for blocks in box1_322mhz smartnic platform and user design
├── cmac.yaml
├── cmac_adapter.yaml
├── cmac_decoder.yaml
├── esnet-smartnic-top.yaml
├── qdma_decoder.yaml
├── qdma_device_csrs.yaml
├── qdma_device_queues.yaml
├── qdma_function.yaml
├── qdma_pf_decoder.yaml
├── qdma_subsystem.yaml
├── qsfp28_i2c.yaml
├── syscfg.yaml
├── sysmon.yaml
└── sysmon_decoder.yaml
```
Tools used during build-time and run-time to interact with the FPGA
```
$ tree /usr/local/bin/
/usr/local/bin/
├── dpdk-devbind.py <------------ misc DPDK related tools
├── dpdk-dumpcap
├── dpdk-hugepages.py
├── dpdk-pdump
├── dpdk-pmdinfo.py
├── dpdk-proc-info
├── dpdk-telemetry.py
├── dpdk-test
├── dpdk-test-acl
├── dpdk-test-bbdev
├── dpdk-test-cmdline
├── dpdk-test-compress-perf
├── dpdk-test-crypto-perf
├── dpdk-test-eventdev
├── dpdk-test-fib
├── dpdk-test-flow-perf
├── dpdk-test-gpudev
├── dpdk-test-pipeline
├── dpdk-test-regex
├── dpdk-test-sad
├── dpdk-testpmd
├── meson <------------ meson build tool used during firmware and software build
├── pktgen <------------ pktgen-dpdk packet generator
├── regio <------------ regio tool for reading/writing FPGA registers over PCIe
├── regio-elaborate <------------ regio tools used for regmap parsing during firmware build
├── regio-generate
├── regio-info
├── sn-cfg <------------ smartnic platform configuration gRPC client which can send commands to the agent for operating on the esnet-smartnic FPGA
├── sn-cfg-agent <------------ smartnic platform configuration gRPC server which is automatically started and listens for commands for operating on the esnet-smartnic FPGA
├── sn-p4 <------------ smartnic p4 gRPC client which can send commands to the p4 agent for table inserts/deletes
└── sn-p4-agent <------------ smartnic p4 gRPC server which is automatically started and listens for p4 table commands
```
Python packages
```
$ tree -L 1 /usr/local/lib/python3.8/dist-packages
/usr/local/lib/python3.8/dist-packages
...
├── regio <------------ library for programmatic register accesses
├── regmap_esnet_smartnic <------------ auto-generated programmatic register map for the esnet-smartnic FPGA
├── sn_cfg <------------ library for the sn-cfg gRPC client tool
├── sn_cfg_proto <------------ library wrapper for the sn-cfg auto-generated protobuf and gRPC code
├── sn_cfg_v1_pb2.py <------------ auto-generated protobuf code for the messages supported by sn-cfg-agent
├── sn_cfg_v1_pb2_grpc.py <------------ auto-generated gRPC code for use by clients of sn-cfg-agent
├── sn_p4 <------------ library for the sn-p4 gRPC client tool
├── sn_p4_proto <------------ library wrapper for the sn-p4 auto-generated probotbuf and gRPC code
├── sn_p4_v2_pb2.py <------------ auto-generated protobuf code for the messages supported by sn-p4-agent
├── sn_p4_v2_pb2_grpc.py <------------ auto-generated gRPC code for use by clients of sn-p4-agent
...
```
C language header files used during builds
```
/usr/local/include/ <------------ contains a full set of DPDK header files for SW builds
/usr/local/include/esnet-smartnic/ <---- contains header files for all blocks in the FPGA image, used for FW and SW builds
```
pkgconfig files used during builds
```
tree /usr/local/lib/x86_64-linux-gnu/pkgconfig/
/usr/local/lib/x86_64-linux-gnu/pkgconfig/
├── libdpdk-libs.pc
├── libdpdk.pc
├── opennic.pc
├── snp4.pc
└── snutil.pc
```
Source code used to build the firmware
```
/sn-fw
```
This is included in the container to allow source-level debug inside the container using gdb