Skip to content

Commit 1023466

Browse files
authored
Release v1.4.15 (#496)
* Add Vitis Debug document (#601) * Create Debug_OpenCL_Kernel.md * Update and rename Debug_OpenCL_Kernel.md to Debug_Vitis_Kernel.md * Updated the shell interface spec to reflect current shell (#603) * Updated the shell interface spec to reflect current shell and pointed to the DDR Data Retention doc * Update hdk/docs/AWS_Shell_Interface_Specification.md * Enhance DDR Model Build qualifiers in hdk_setup.sh script. (#604) * Enhance DDR Model Build qualifiers in hdk_setup.sh script. * Enhance the DDR model build's lock file creation+check to not rely on external tools. * Update Virtual_JTAG_XVC.md (#606) * AR73068 patching (#608) * Added patching mechanism for Vivado AR73068 * Updated supported versions * Added dma range error to interrupt status register metrics (#591) * added dma range error to interrupt status register metrics * updated tests to match change to output * Fixing test_fpga_tools to accomodate dma range error addition. (#609) * Fixed the lines where we expect ` clock group c `
1 parent 8762e6f commit 1023466

21 files changed

+273
-87
lines changed

.gitignore

+1
Original file line numberDiff line numberDiff line change
@@ -110,3 +110,4 @@ patches/*
110110
.batch
111111
.temp
112112

113+
.python-version

ERRATA.md

+16-5
Original file line numberDiff line numberDiff line change
@@ -9,14 +9,25 @@
99
* DRAM Data retention is not supported for CL designs with less than 4 DDRs enabled
1010
* Combinatorial loops in CL designs are not supported.
1111
* Connecting one of the clocks provided from the shell (clk_main_a0, clk_extra_a1, etc...) directly to a BUFG in the CL is not supported by the Xilinx tools and may result in a non-functional clock. To workaround this limitation, it is recommended to use an MMCM to feed the BUFG (clk_from_shell -> MMCM -> BUFG). Please refer to [Xilinx AR# 73360](https://www.xilinx.com/support/answers/73360.html) for further details.
12+
13+
### Xilinx Design Advisory for UltraScale/UltraScale+ DDR4/DDR3 IP - Memory IP Timing Exceptions (AR# 73068)
14+
AWS EC2 F1 customers using the DDR4 IP in customer logic (HDK or SDAccel/Vitis designs) may be impacted by a recent design advisory from Xilinx.
15+
16+
AWS customers may experience hardware failures including: post calibration data errors and DQS gate tracking issues. The error condition is build dependent and errors would need to be detected on the first write/read access after a successful calibration to prevent further data corruption.
17+
18+
To detect if your build is impacted by this bug, AWS recommends all EC2 F1 customers utilizing the DDR4 IP in their designs should run a TCL script on the design checkpoint point (DCP) to check to determine if the design is susceptible to this issue. If the check passes, your design is safe to use as the hardware will function properly.
19+
If the check fails, the design is susceptible to the issue and will need to be regenerated using the same tool version with the AR 73068 patch.
20+
For designs under development, we recommend applying the patch to your on-premises tools or update to developer kit v1.4.15.
21+
For additional details, please refer to the [Xilinx Answer Record #73068](https://www.xilinx.com/support/answers/73068.html)
22+
1223
### 2019.1
1324
* Vivado `compile_simlib` command fails to generate the following verilog IP libraries for the following simulators.
25+
* Please refer to the Xilinx Answer record for details.
1426

15-
| Library(verilog) | Simulator |
16-
|---|---|
17-
| `sync_ip` | Cadence IES |
18-
| `hdmi_gt_controller_v1_0_0` | Synopsys VCS |
19-
* We are working with Xilinx to provide a fix for these.
27+
| Library(verilog) | Simulator | Xilinx Answer Record |
28+
|---|---|---|
29+
| `sync_ip` | Cadence IES | [AR72795](https://www.xilinx.com/support/answers/72795.html) |
30+
| `hdmi_gt_controller_v1_0_0` | Synopsys VCS | [AR72601](https://www.xilinx.com/support/answers/72601.html) |
2031

2132
## SDK
2233

README.md

+6-5
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
1. [Overview of AWS EC2 FPGA Development Kit](#overviewdevkit)
66
- [Development environments](#overviewdevenv)
77
- [Runtime environments](#overviewrunenv)
8-
- [Example applications](#overviewexapps)
98
- [Development tools](#overviewdevtools)
9+
- [Example applications](#overviewexapps)
1010
2. [Getting Started](#gettingstarted)
1111
3. [FPGA Developer AMI available on AWS Marketplace](#devAmi)
1212
4. [FPGA Hardware Development Kit (HDK)](#fpgahdk)
@@ -18,7 +18,9 @@
1818
<a name="overviewdevkit"></a>
1919
# Overview of AWS EC2 FPGA Development Kit
2020

21-
The AWS EC2 FPGA Development Kit is provided by AWS to support development and runtime on [AWS FPGA instances](https://aws.amazon.com/ec2/instance-types/f1/). Amazon EC2 FPGA instances are high-performance compute instances with field programmable gate arrays (FPGAs) that are programmed to create custom hardware accelerations in EC2. F1 instances are easy to program and AWS provides everything needed to develop, simulate, debug, compile and run hardware accelerated applications. Using the [FPGA Developer AMI](https://aws.amazon.com/marketplace/pp/B06VVYBLZZ), developers create an FPGA design. Once the FPGA design (also called CL - Custom logic) is complete, developers create the Amazon FPGA Image (AFI), and easily deploy it to the F1 instance. AFIs are reusable, shareable and can be deployed in a scalable and secure way.
21+
AWS EC2 FPGA Development Kit is a set of free development and runtime tools that provide everything needed to develop, simulate, debug, compile and run hardware accelerated applications on [Amazon EC2 F1 instances](https://aws.amazon.com/ec2/instance-types/f1/), EC2 F1 instances are high-performance compute instances with field programmable gate arrays (FPGAs) that enable the development and deployment of custom hardware accelerators on AWS cloud.
22+
23+
AWS EC2 FPGA Development Kit content is distributed between this github repository and [FPGA Developer AMI](https://aws.amazon.com/marketplace/pp/B06VVYBLZZ) provided by AWS, developers are able to develop, simulate and debug an FPGA design on compute [EC2 instance](https://aws.amazon.com/ec2/) with no cost of development or runtime tools. Once the FPGA design (also called CL - Custom logic) is complete, developers create the Amazon FPGA Image (AFI), and easily deploy it to the F1 instance. AFIs are reusable, shareable and can be deployed in a scalable and secure way.
2224
![Alt text](hdk/docs/images/f1-Instance-How-it-Works-flowchart.jpg)
2325

2426
<a name="overviewdevenv"></a>
@@ -78,13 +80,12 @@ The AWS EC2 FPGA Development Kit is provided by AWS to support development and r
7880
<a name="gettingstarted"></a>
7981
# Getting Started
8082

81-
### New to AWS?
83+
### Getting familiar with AWS
8284
If you have never used AWS before, we recommend you start with [AWS getting started training](https://aws.amazon.com/getting-started/), and focus on the basics of the [AWS EC2](https://aws.amazon.com/ec2/) and [AWS S3](https://aws.amazon.com/s3/) services. Understanding the fundamentals of these services will make it easier to work with AWS FPGAs.
8385

8486
AWS FPGA generation and EC2 F1 instances are supported in the us-east-1 (N. Virginia), us-west-2 (Oregon), eu-west-1 (Ireland) and us-gov-west-1 ([GovCloud US](https://aws.amazon.com/govcloud-us/)) [regions](https://aws.amazon.com/about-aws/global-infrastructure/).
8587

86-
87-
### New to AWS FPGAs and setting up a development environment?
88+
### Setting up development environment for the first time
8889
The developer kit is supported for Linux operating systems only.
8990
You have the choice to develop on AWS EC2 using the [FPGA Developer AMI](https://aws.amazon.com/marketplace/pp/B06VVYBLZZ) or on-premises. Within a linux environment, you can execute `git clone https://github.com/aws/aws-fpga.git` to download the latest release to your EC2 Instance or local server. Help on cloning from github is available [here](https://help.github.com/articles/which-remote-url-should-i-use/). When using a SSH connection, execute `git clone [email protected]:aws/aws-fpga.git`. [To get help with connecting to Github via SSH](https://help.github.com/articles/connecting-to-github-with-ssh/).
9091

RELEASE_NOTES.md

+6
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@
2424
* 1 DDR controller implemented in the SH (always available)
2525
* 3 DDR controllers implemented in the CL (configurable number of implemented controllers allowed)
2626

27+
## Release 1.4.15 (See [ERRATA](./ERRATA.md) for unsupported features)
28+
* Added Xilinx AR#73068 patching
29+
* Added DMA range error to the interrupt status register metrics
30+
* Enhanced DDR model rebuild qualifiers in hdk_setup.sh
31+
* Updated Virtual JTAG Documentation
32+
2733
## Release 1.4.14 (See [ERRATA](./ERRATA.md) for unsupported features)
2834
* Updated Vitis Platform file to fix a DDR bandwidth issue
2935
* Added Vitis Debug Documentation

SDAccel/examples/3rd_party/README.md

+2-9
Original file line numberDiff line numberDiff line change
@@ -81,7 +81,6 @@ make TARGETS=hw DEVICES=$AWS_PLATFORM all
8181

8282
* For more information on running this example on an F1 instance, see [this](../../README.md#runonf1).
8383

84-
8584
## Xilinx and third party Implementation Differences
8685
#### Host Code
8786
| third party FPGA | Xilinx |
@@ -104,18 +103,12 @@ make TARGETS=hw DEVICES=$AWS_PLATFORM all
104103
| declares and initializes an struct object together | declare an struct object and then initialize it separately |
105104

106105
## SUPPORT
107-
For more information check here:
108-
[SDAccel User Guides][]
106+
For more information check the [SDAccel User Guides](http://www.xilinx.com/support/documentation-navigation/development-tools/software-development/sdaccel.html?resultsTablePreSelect=documenttype:SeeAll#documentation)
109107

110-
For questions and to get help on this project or your own projects, visit the [SDAccel Forums][].
108+
For questions and to get help on this project or your own projects, visit the [SDAccel Forums](https://forums.xilinx.com/t5/SDAccel/bd-p/SDx)
111109

112110
## REVISION HISTORY
113111

114112
Date | Readme Version | Revision Description
115113
--------|----------------|-------------------------
116114
SEP2017 | 1.0 | Initial release
117-
118-
119-
120-
[SDAccel Forums]: https://forums.xilinx.com/t5/SDAccel/bd-p/SDx
121-
[SDAccel User Guides]: http://www.xilinx.com/support/documentation-navigation/development-tools/software-development/sdaccel.html?resultsTablePreSelect=documenttype:SeeAll#documentation

hdk/common/verif/scripts/.gitignore

+2
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
.done
2+

hdk/common/verif/scripts/Makefile

+34
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
#-------------------------------------------------------------------------------
2+
# Amazon FPGA Hardware Development Kit
3+
#
4+
# Copyright 2016 Amazon.com, Inc. or its affiliates. All Rights Reserved.
5+
#
6+
# Licensed under the Amazon Software License (the "License"). You may not use
7+
# this file except in compliance with the License. A copy of the License is
8+
# located at
9+
#
10+
# http://aws.amazon.com/asl/
11+
#
12+
# or in the "license" file accompanying this file. This file is distributed on
13+
# an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, express or
14+
# implied. See the License for the specific language governing permissions and
15+
# limitations under the License.
16+
#-------------------------------------------------------------------------------
17+
18+
DONE_FILE := $(HDK_COMMON_DIR)/verif/scripts/.done
19+
DEPS_FILE := $(HDK_SHELL_DESIGN_DIR)/ip/ddr4_core/ddr4_core.xci
20+
DEPS_FILE += $(HDK_COMMON_DIR)/verif/scripts/init.tcl
21+
DEPS_FILE += $(HDK_COMMON_DIR)/verif/scripts/init.sh
22+
23+
all: $(DONE_FILE)
24+
25+
$(DONE_FILE): $(DEPS_FILE)
26+
@ echo "INFO: Building in $(shell dirname $@)"
27+
@ echo "INFO: This could take 5-10 minutes, please be patient!"
28+
@ git clean -fXdq $(shell dirname $@)
29+
@ cd $(shell dirname $@)\
30+
&& ./init.sh $(MODEL_DIR)\
31+
&& echo "INFO: DDR4 model build passed."\
32+
|| (echo "ERROR: DDR4 model build failed." && exit 2)
33+
@ touch $@
34+

hdk/common/verif/scripts/init.sh

+8-8
Original file line numberDiff line numberDiff line change
@@ -16,12 +16,12 @@
1616
# limitations under the License.
1717

1818
if [[ ":$HDK_COMMON_DIR" == ":" ]]; then
19-
echo "error: HDK_COMMON_DIR not set. Source hdk_setup.sh first."
19+
echo "ERROR: HDK_COMMON_DIR not set. Source hdk_setup.sh first."
2020
exit 2
2121
fi
2222

2323
if [[ ":$VIVADO_VER" == ":" ]]; then
24-
echo "error: VIVADO_VER not set. Source hdk_setup.sh first."
24+
echo "ERROR: VIVADO_VER not set. Source hdk_setup.sh first."
2525
exit 2
2626
fi
2727

@@ -39,12 +39,12 @@ lockfile_filename=$models_dir/build.lock
3939
# Prevent multiple users from building in the same directory.
4040
# Set the number of retries to 0 so that we will just fail
4141
# and let the other process complete the build.
42-
if [ -e /bin/lockfile ]; then
43-
if ! lockfile -r 0 $lockfile_filename; then
44-
echo "error: $lockfile_filename exists"
45-
echo "error: Another process is already building the models."
46-
exit 2
47-
fi
42+
if [ -e $lockfile_filename ]; then
43+
echo "ERROR: $lockfile_filename exists"
44+
echo "ERROR: Another process is already building the models."
45+
exit 2
46+
else
47+
touch $lockfile_filename
4848
fi
4949

5050
echo "$VIVADO_VER" > $models_dir/.vivado_version

hdk/docs/AFI_Manifest.md

+1
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,7 @@ The manifest file is a text file formatted with key=value pairs. Some keys are m
4040

4141
| vivado tool version | field value |
4242
|------------------- | -----------|
43+
| 2019.2 | tool_version=v2019.2 |
4344
| 2019.1 | tool_version=v2019.1 |
4445
| 2018.3 | tool_version=v2018.3 |
4546
| 2018.2 | tool_version=v2018.2 |

hdk/docs/AWS_Shell_Interface_Specification.md

+4-12
Original file line numberDiff line numberDiff line change
@@ -222,9 +222,10 @@ These parameters are used to control which DDR controllers are impemented in the
222222
...
223223
```
224224

225-
### DRAM Content Preservation between AFI Loads (Future)
225+
### DRAM Content Preservation between AFI Loads
226226

227-
In future Shell versions a DRAM content preservation feature will be implemented. This feature allows the DDR state to be preserved when dynamically changing CL logic. The current Shell version will not guarantee preservation of DRAM contents if the CL logic is re-loaded.
227+
Shell version 1.4 allows the DDR state to be preserved when dynamically changing CL logic. Any AFI generated with a v1.4 shell will enable DRAM content preservation by default.
228+
Please refer to the [guide on how to use the DRAM data retention mode to preserve the content of DRAM across AFI loads](./data_retention.md) for more details on utilizing this feature.
228229

229230
<a name="dma"></a>
230231
## DMA
@@ -649,12 +650,6 @@ It is ideal to place logic that interfaces to the shell in the same SLR as the S
649650
For the interfaces that are in both the MID/BOTTOM the recommendation is to use flops for pipelining, but don’t constrain to an SLR. Also it is recommended to not use the SDA interface because it spans two SLR's (use BAR1 or OCL instead). You can constrain logic to a particular SLR by creating PBLOCKs (one per SLR), and assigning logic to the PBLOCKs (refer to cl_dram_dma example [cl_pnr_user.xdc](../cl/examples/cl_dram_dma/build/constraints/cl_pnr_user.xdc)).
650651
Dataflow should be mapped so that SLR crossing is minimized (for example a pipeline should be organized such that successive stages are mostly in the same SLR).
651652

652-
Here’s an example post on the Xilinx forum which points to some documentation related to solving this:
653-
<https://forums.xilinx.com/t5/UltraScale-Architecture/Ultrascale-SLR-crossing/td-p/798435>
654-
655-
There are some good timing closure tips in this methodology doc pointed to by the Xilinx forum post:
656-
<https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_1/ug949-vivado-design-methodology.pdf>
657-
658653
<a name="impl_tips_logic_levels"></a>
659654
### Logic Levels
660655
You can report all paths that are greater than a certain number of logic levels. This can be used to iterate on timing in synthesis rather than waiting for place and route. For example at 250MHz a general rule of thumb is try to keep logic levels to around 10. The following commands report on all paths that have more than 10 logic levels:
@@ -692,13 +687,10 @@ You have to be careful that pipeline registers do not infer a shift register com
692687

693688
<a name="impl_tips_vivado"></a>
694689
### Vivado Analysis
695-
Vivado has some nice analysis capabilities:
690+
Vivado has the following analysis capabilities:
696691
* report_methodology (includes CDC report)
697692
* clock interaction report (see if paths between async clocks are erroneously being timed)
698693
* congestion heat map
699694
* power analysis
700695
* physical implementation analysis (placement, routing)
701696
* linked timing/schematic/physical views
702-
703-
<https://www.xilinx.com/support/documentation/sw_manuals/xilinx2017_4/ug906-vivado-design-analysis.pdf>
704-

hdk/docs/Virtual_JTAG_XVC.md

+26-6
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ To connect the debug Xilinx Hardware Manager to Virtual JTAG XVC server on the t
142142

143143
`> connect_hw_server -url <hostname or IP address>:3121`
144144

145+
If the above command fails, it is most likely because hw_server is not running on target F1 instance. Please follow see this [FAQ](#hw_serverRunOnF1Instance) on how to start hw_server
145146

146147
<img src="./images/connect_hw_server.jpg" width="600">
147148

@@ -153,7 +154,7 @@ To connect the debug Xilinx Hardware Manager to Virtual JTAG XVC server on the t
153154

154155
**NOTES:**
155156

156-
- If the above command fails, its most likely that either the virtual jtag server is not running, the IP/Port are wrong, or a firewall/security-group rule is blocking the connection. See the [FAQ](#faq) section in the end of this document.
157+
- If the above command fails, its most likely that either the virtual jtag server or hw_server is not running, the IP/Port are wrong, or a firewall/security-group rule is blocking the connection. See the [FAQ](#faq) section in the end of this document.
157158

158159

159160
Upon successful connection, Vivado's Hardware panel will be populated with a debug bridge instance.
@@ -228,7 +229,6 @@ The following list describes the steps to successfully setup debug in a CL:
228229

229230

230231
# Frequently Asked Questions
231-
232232

233233

234234
**Q: Do I need to run Vivado or Hardware Manager on the target EC2 instance to debug?**
@@ -238,6 +238,11 @@ No, you may run Vivado on a "remote" host as long as your instance/VPC has the r
238238

239239
**Q: How do I configure Linux firewalls and EC2 network security groups to enable remote debug?**
240240

241+
If your OS has the `firewalld` service running, you can disable it for the time being for setting up remote debug by calling:
242+
```sudo systemctl stop firewalld```
243+
244+
You will also have to allow incoming and outgoing traffic to TCP ports 3121 and 10201.
245+
To open up incoming and outgoing traffic on those ports for your instance, please refer to the [EC2 Security Group documentation](https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/security-group-rules-reference.html#sg-rules-other-instances)
241246

242247
**Q: Can I have a secure connection (i.e. SSL/TLS) to the target FPGA-enable EC2 Instance running Virtual JTAG service?**
243248

@@ -249,20 +254,35 @@ You may use the ssh "port forwarding" option (-L) to forward connections from th
249254
No, you need the Vivado Lab Edition which does not require a license.
250255

251256

252-
253257
**Q: How do I stop the Virtual JTAG service on the target instance?**
254258

255-
259+
After starting the Virtual JTAG service, you can stop it by calling `Ctrl + C` from your keyboard.
256260

257261
**Q: Can I debug multiple FPGAs on same target EC2 instance concurrently?**
258262

259263
Yes, you must start the the `$ fpga-start-virtual-jtag` with a different Slot/Port for each FPGA. You can launch multiple Vivado sessions, and have each session connect to the corresponding TCP port associated with the FPGA.
260264

261-
265+
<a name="hw_serverRunOnF1Instance"></a>
262266
**Q: What are some of the best practices I should be aware when working with Virtual JTAG?**
263267

264268
If you are running Vivado on a remote machine trying to connect to Virtual JTAG - we recommend running the hw_server on the F1 instance - to ensure optimal performance between Vivado and the Virtual JTAG server.
265-
269+
On your target F1 Instance:
270+
```
271+
[$] sudo su
272+
[$]# hw_server &
273+
****** Xilinx hw_server v2019.2
274+
**** Build date : Oct 24 2019 at 19:23:45
275+
** Copyright 1986-2019 Xilinx, Inc. All Rights Reserved.
276+
277+
INFO: hw_server application started
278+
INFO: Use Ctrl-C to exit hw_server application
279+
280+
INFO: To connect to this hw_server instance use url: TCP:ip-xxx-xx-xx-xxx.ec2.internal:3121
281+
282+
[$]# fpga-start-virtual-jtag -P 10201 -S 0
283+
Starting Virtual JTAG XVC Server for FPGA slot id 0, listening to TCP port 10201.
284+
Press CTRL-C to stop the service.
285+
```
266286

267287
**Q: Can other instances running on the same F1 server access the Virtual JTAG of my instance?**
268288

hdk/hdk_version.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
HDK_VERSION=1.4.14
1+
HDK_VERSION=1.4.15

0 commit comments

Comments
 (0)