oneapi-src / oneapi-src/oneAPI-samples

FPGA tests don't all work using Quartus

Open
#1,355 2 comments 0 reactions 0 assignees View on GitHub

Nobody has claimed this yet.

bug
Dominant language
C++
Stars
1.2k
Forks
745
PR merge metrics
No merged PRs in 30d

Description

Summary

The board_test example (and other examples I've tested) from DirectProgramming/C++SYCL_FPGA/ReferenceDesigns fails on the part of the test that tries to extract the reference frequency using the aocl binedit functionality.

Version

Report oneAPI Toolkit version and oneAPI Sample version or hash.

oneAPI version 2022.0.2
quartus version 20.4
oneAPI sample hash f6660eef7007d0acb7de1bce9c6e5844c6615a80

Environment

Intel Stratix 10, Bittware N520 MX

Steps to reproduce

cd ~/oneAPI-samples/DirectProgramming/C++SYCL_FPGA/ReferenceDesigns/board_test
mkdir build
cd build
cmake .. -DFPGA_BOARD=s10mx:p520_hpc_m210h_g3x16
make fpga
./board_test.fpga

Observed behavior

When compiled and run the board_test.fpga executable fails, with this output at the end of the run:

*****************************************************************
*******************  Kernel Clock Frequency Test  ***************
*****************************************************************

terminate called after throwing an instance of 'std::logic_error'
  what():  basic_string::_M_construct null not valid

Digging into the code it is because this functionality:

   std::string temp_cmd = "aocl binedit " + kBinaryName + " print .acl.quartus_report";
   const char *open_cmd_rep = temp_cmd.c_str();

Doesn't actually work. The executable (board_test.fpga) does not have anything to report when using 1aocl binedit board_test.fpga list, i.e. it produces an empty output:

Sections in package file:

This can be fixed by changing the command to this:

   std::string temp_cmd = "aocl binedit " + kBinaryName + ".prj/base.aocx" + " print .acl.quartus_report";
   const char *open_cmd_rep = temp_cmd.c_str();

Which then can be used to extract the reference FPGA frequency.

I can commit this as a pull request.

Expected behavior

The board_test to run without issues.

Contributor guide

Open the contributing guide

First steps

  1. Read the whole issue, then the project's contributing guide.
  2. Comment on the issue to say you are picking it up — it saves two people doing the same work.
  3. Fork the repository and make your change on a branch.
  4. Open a pull request that references the issue number.

Research direction

Start in DirectProgramming/C++SYCL_FPGA/ReferenceDesigns/board_test and search for the kBinaryName or aocl binedit usage shown in the report. Reproduce with the provided CMake and make commands on the stated FPGA setup, then verify that board_test.fpga completes the Kernel Clock Frequency Test without the logic_error and reports the reference frequency.

Written by the indexing model from the issue text.

Assessment

Tech stack
cmake, cpp
Domain
embedded-iot, testing-qa
Issue type
Bug
Difficulty
2/5
Estimated time
1-3 hours
Activity status
Stale
Clarity
Clearly specified
Newbie friendliness
48/100

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.