Skip to content

Commit e6164cb

Browse files
authored
v1.3.5 Release (#385)
1 parent fa9e8f8 commit e6164cb

File tree

157 files changed

+5412
-1794
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

157 files changed

+5412
-1794
lines changed

ERRATA.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@
2121
* FPGA to FPGA over the 400Gbps Ring for F1.16xl
2222
* Aurora and Reliable Aurora modules for the FPGA-to-FPGA
2323
* Preserving the DRAM content between different AFI loads (by the same running instance)
24-
* Cadence RTL simulations tools
24+
* Cadence Xcelium simulations tools
2525
* PCIM and DMA-PCIS AXI-4 interfaces do not support AxSIZE other than 3'b110 (64B)
2626

2727
## Known Bugs/Issues

FAQs.md

+16-1
Original file line numberDiff line numberDiff line change
@@ -110,6 +110,7 @@ The developer can create multiple AFIs at no extra cost, up to a defined limited
110110
AWS FPGA generation and EC2 F1 instances are supported in us-east-1 (N. Virginia), us-west-2 (Oregon) and eu-west-1 (Ireland).
111111

112112

113+
113114
**Q: What is the process for creating an AFI?**
114115

115116
The AFI process starts by creating Custom Logic (CL) code that conforms to the [Shell Specification](./hdk/docs/AWS_Shell_Interface_Specification.md). Then, the CL must be compiled using the HDK scripts which leverages Vivado tools to create a Design Checkpoint (DCP). That DCP is submitted to AWS for generating an AFI using the `aws ec2 create-fpga-image` API.
@@ -137,6 +138,20 @@ Yes, use [delete-fpga-image](./hdk/docs/delete_fpga_image.md) to delete an AFI i
137138

138139
Use [delete-fpga-image](./hdk/docs/delete_fpga_image.md) carefully. Once all AFIs of the same global AFI ID are deleted, the AFIs cannot be recovered from deletion. Review [IAM policy best practices](http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) to restrict access to this API.
139140

141+
**Q: Can I share an AFI with other AWS accounts?**
142+
143+
Yes, sharing allows accounts other than the owner account to load and use an AFI. Use [modify-fpga-image-attribute](./hdk/docs/fpga_image_attributes.md) API to update `loadPermission` attribute to grant/remove AFI load permission. AWS AFIs support two load permission types:
144+
* `UserId`: share AFI with specific AWS accounts using account IDs.
145+
* `UserGroups`: only supports `all` group to make an AFI public or private.
146+
147+
Use [reset-fpga-image-attribute](./hdk/docs/fpga_image_attributes.md) API to revoke all load permissions.
148+
149+
**Q: Can I delete an AFI?**
150+
151+
Yes, use [delete-fpga-image](./hdk/docs/delete_fpga_image.md) to delete an AFI in a specific region. Deleting an AFI in one region does not affect AFIs in other regions.
152+
153+
Use [delete-fpga-image](./hdk/docs/delete_fpga_image.md) carefully. Once all AFIs of the same global AFI ID are deleted, the AFIs cannot be recovered from deletion. Review [IAM policy best practices](http://docs.aws.amazon.com/IAM/latest/UserGuide/best-practices.html#grant-least-privilege) to resrict access to this API.
154+
140155
**Q: Can I bring my own bitstream for loading on an F1 FPGA?**
141156

142157
No. There is no mechanism for loading a bitstream directly onto the FPGAs of an F1 instance. All Custom Logic is loaded onto the FPGA by calling `$ fpga-local-load-image` tool at [AWS FPGA SDK](./sdk).
@@ -170,7 +185,7 @@ No. AWS supports a cloud-only development model and provides the necessary eleme
170185

171186
**Q: Do I need to design for a specific power envelope?**
172187

173-
Yes, the design scripts provided in the HDK include checks for power consumption that exceeds the allocated power for the Custom Logic (CL) region. Developers do not need to include design considerations for DRAM, Shell, or Thermal. AWS includes the design considerations for those as part of providing the power envelop for the CL region.
188+
Yes, the Xilinx UltraScale+ FPGA devices used on the F1 instances have a maximum power limit that must be maintained. If a loaded AFI consumes maximum power, the F1 instance will automatically gate the input clocks provided to the AFI in order to prevent errors within the FPGA. Developers are provided warnings when power (Vccint) is greater than 85 watts. Above that level, the CL is in danger of being clock gated. [Additional details on AFI power](hdk/docs/afi_power.md)
174189

175190

176191
**Q: What IP blocks are provided in the HDK?**

Jenkinsfile

+507-153
Large diffs are not rendered by default.

RELEASE_NOTES.md

+8
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,14 @@
2626
* 1 DDR controller implemented in the SH (always available)
2727
* 3 DDR controllers implemented in the CL (configurable number of implemented controllers allowed)
2828

29+
## Release 1.3.5 (See [ERRATA](./ERRATA.md) for unsupported features)
30+
* [Amazon FPGA Images (AFIs) Tagging](hdk/docs/describe_fpga_images.md) - To help with managing AFIs, you can optionally assign your own metadata to each AFI in the form of tags. Tags are managed using the AWS EC2 CLI commands create-tags, describe-tags and delete-tags. Tags are custom key/value pairs that can be used to identify or group EC2 resources, including AFIs. Tags can be used as filters in the describe-fpga-images API to search and filter the AFIs based on the tags you add.
31+
* [EDMA driver fixes and improvements](sdk/linux_kernel_drivers/edma/README.md), including polled DMA descriptor completion mode which improves performance on smaller IO (<1MB)
32+
  *   [AFI Power metrics and warnings](hdk/docs/afi_power.md) – developers can avoid power violations by monitoring metrics that provide recent FPGA power, maximum FPGA power and average FPGA power. CL designs can use power state pins to help developers throttle CL to avoid power violation.
33+
* Improved IPI 3rd party simulator support
34+
  *   Simulation model fixes
35+
  *   SDAccel improvements - Removal of settings64 script from SDAccel setup and switching between DSAs
36+
2937
## Release 1.3.4 (See [ERRATA](./ERRATA.md) for unsupported features)
3038
* EDMA/XDMA Driver improvements
3139
* Additional SDAccel Platforms

SDAccel/README.md

+8-6
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ There are three simple steps for accelerating your application on an AWS F1 inst
77

88
This quick start guide will use a simple "Hello World" SDAccel example to get you started.
99

10-
It is highly recommended you read the documentation and utilize software and hardware emulation prior to running on F1. The F1 HW compile time is 4-5hrs, therefore, software and hardware emulation should be used during development.
10+
It is highly recommended you read the documentation and utilize software and hardware emulation prior to running on F1. The F1 HW compile time is ~4hrs (4DDR) and ~1hr (1DDR), therefore, software and hardware emulation should be used during development.
1111

1212

1313
# Table of Content
@@ -64,17 +64,19 @@ It is highly recommended you read the documentation and utilize software and har
6464
$ cd $AWS_FPGA_REPO_DIR
6565
$ source sdaccel_setup.sh
6666
```
67+
* Select a platform:
68+
* AWS_PLATFORM_4DDR - Default AWS F1 platform with 4 DDRs and profiling support. Optimized for multi DDR use cases. This platform should be used for all production applications which require more than 1 DDR bank.
69+
* AWS_PLATFORM_4DDR_DEBUG - This platform is a debug variant of the 4DDR platform and should be used for hardware debugging of kernels. This version consists of an additional debug feature which allows advanced users to insert ILA’s in the kernels for debugging purposes. All other features are identical to the AWS_PLATFORM_4DDR platform.
70+
* AWS_PLATFORM_1DDR - This platform consist of 1 DDR that is located in the shell region. This allow maximum space for kernels. This also allows much faster compile times for all the use cases which require only 1 DDR bank. This platform does not support APM and hence no profiling data can be obtained.
6771

72+
```
73+
$ export AWS_PLATFORM=$AWS_PLATFORM_1DDR
74+
```
6875
<a name="createapp"></a>
6976
# 1. Build the host application, Xilinx FPGA binary and verify you are ready for FPGA acceleration
7077

7178
This section will walk you through creating, emulating and compiling your host application and FPGA Binary
7279

73-
Start by sourcing the setup for the Xilinx SDAccel Emulation and Build Environment
74-
```
75-
$ source $XILINX_SDX/settings64.sh
76-
```
77-
7880
<a name="emu"></a>
7981
# Emulate your Code
8082

SDAccel/docs/README_third_party.md

-3
Original file line numberDiff line numberDiff line change
@@ -62,23 +62,20 @@ mv tmp twid_radix4_8.cl
6262
* To run in software emulation mode, use the following commands.
6363
```
6464
make clean
65-
source $XILINX_SDX/settings64.sh
6665
make TARGETS=sw_emu DEVICES=$AWS_PLATFORM all
6766
./main -hw=sw_emu
6867
```
6968

7069
* To run in hardware emulation mode, use the following commands.
7170
```
7271
make clean
73-
source $XILINX_SDX/settings64.sh
7472
make TARGETS=hw_emu DEVICES=$AWS_PLATFORM all
7573
./main -hw=hw_emu
7674
```
7775

7876
* To run on an F1 instance, use the following commands.
7977
```
8078
make clean
81-
source $XILINX_SDX/settings64.sh
8279
make TARGETS=hw DEVICES=$AWS_PLATFORM all
8380
./main
8481
```

SDAccel/tests/conftest.py

+3-2
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,11 @@
2323

2424
def pytest_addoption(parser):
2525
parser.addoption("--examplePath", action="store", required=False, type=str,
26-
help="Path to the Xilinx Example to test")
26+
help="Path to the Xilinx Example to test", default="SDAccel/examples/xilinx/getting_started/host/helloworld_ocl")
2727

2828
def pytest_generate_tests(metafunc):
29-
if metafunc.module.__name__ == 'test_run_sdaccel_examples' :
29+
30+
if metafunc.cls.ADD_EXAMPLEPATH:
3031
print("Configuring parameters of {}::{}".format(metafunc.module.__name__, metafunc.function.__name__))
3132
print("examplePath = " + metafunc.config.getoption('examplePath'))
3233
metafunc.parametrize("examplePath", [metafunc.config.getoption('examplePath')])

SDAccel/tests/readme_examples/run_test.py

-137
This file was deleted.
+115
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
#!/usr/bin/env python2.7
2+
3+
# Amazon FPGA Hardware Development Kit
4+
#
5+
# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
6+
#
7+
# Licensed under the Amazon Software License (the "License"). You may not use
8+
# this file except in compliance with the License. A copy of the License is
9+
# located at
10+
#
11+
# http://aws.amazon.com/asl/
12+
#
13+
# or in the "license" file accompanying this file. This file is distributed on
14+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or
15+
# implied. See the License for the specific language governing permissions and
16+
# limitations under the License.
17+
'''
18+
Pytest module:
19+
20+
Call using ```pytest test_build_sdaccel_examples.py```
21+
22+
See TESTING.md for details.
23+
'''
24+
25+
from __future__ import print_function
26+
import os
27+
from os.path import dirname, realpath, basename
28+
import json
29+
try:
30+
import aws_fpga_utils
31+
import aws_fpga_test_utils
32+
from aws_fpga_test_utils.AwsFpgaTestBase import AwsFpgaTestBase
33+
except ImportError as e:
34+
traceback.print_tb(sys.exc_info()[2])
35+
print("error: {}\nMake sure to source shared/bin/setup_test_env.sh".format(sys.exc_info()[1]))
36+
sys.exit(1)
37+
38+
logger = aws_fpga_utils.get_logger(__name__)
39+
40+
class TestBuildSDAccelExample(AwsFpgaTestBase):
41+
'''
42+
Pytest test class.
43+
44+
NOTE: Cannot have an __init__ method.
45+
46+
'''
47+
ADD_EXAMPLEPATH = True
48+
49+
@classmethod
50+
def setup_class(cls):
51+
'''
52+
Do any setup required for tests.
53+
'''
54+
55+
AwsFpgaTestBase.setup_class(cls, __file__)
56+
57+
AwsFpgaTestBase.assert_sdk_setup()
58+
AwsFpgaTestBase.assert_sdaccel_setup()
59+
60+
return
61+
62+
def test_sw_emu(self, examplePath):
63+
target = "sw_emu"
64+
self.base_test(examplePath=examplePath, target=target, check=True)
65+
66+
def test_hw_emu(self, examplePath):
67+
target = "hw_emu"
68+
self.base_test(examplePath=examplePath, target=target, check=True)
69+
70+
def test_hw_build(self, examplePath):
71+
target = "hw"
72+
self.base_test(examplePath=examplePath, target=target, check=False)
73+
74+
def check_build(self, examplePath, target):
75+
76+
xclbin_path = self.get_sdaccel_xclbin_dir(examplePath)
77+
78+
logger.info("Checking if SDAccel Example xclbin path={} exists".format(xclbin_path))
79+
assert os.path.exists(xclbin_path), "SDAccel Example xclbinpath={} does not exist".format(xclbin_path)
80+
81+
logger.info("Checking that a non zero size xclbin file exists in {}".format(xclbin_path))
82+
xclbin = self.assert_non_zero_file(os.path.join(xclbin_path, "*.{}.*.xclbin".format(target)))
83+
logger.info("xclbin: {}".format(xclbin))
84+
85+
return xclbin
86+
87+
def base_test(self, examplePath, target, clean=True, check=True):
88+
89+
full_example_path = self.get_sdaccel_example_fullpath(examplePath=examplePath)
90+
logger.info("SDAccel Example path={}".format(full_example_path))
91+
92+
assert os.path.exists(full_example_path), "SDAccel Example path={} does not exist".format(full_example_path)
93+
94+
os.chdir(full_example_path)
95+
96+
if clean:
97+
(rc, stdout_lines, stderr_lines) = self.run_cmd("make clean")
98+
assert rc == 0, "SDAccel build failed while cleaning with rc={}".format(rc)
99+
100+
check_string = ""
101+
if check:
102+
check_string = "check"
103+
104+
(rc, stdout_lines, stderr_lines) = self.run_cmd("make {0} TARGETS={1} DEVICES={2} all".format(check_string, target, os.environ['AWS_PLATFORM']))
105+
assert rc == 0, "SDAccel build failed with rc={}".format(rc)
106+
107+
# Check for non zero xclbin
108+
xclbin = self.check_build(examplePath=examplePath, target=target)
109+
110+
xclbin_key = os.path.join(self.get_sdaccel_example_s3_xclbin_tag(examplePath=examplePath, target=target), basename(xclbin))
111+
112+
logger.info("Uploading xclbin to {}".format(os.path.join(self.s3_bucket, xclbin_key)))
113+
self.s3_client().upload_file(xclbin, self.s3_bucket, xclbin_key)
114+
115+
return

0 commit comments

Comments
 (0)