Skip to content

Commit be7fe8a

Browse files
Add simulator targets to several FPGA Tutorials (#1100)
1 parent 1fcda7f commit be7fe8a

File tree

40 files changed

+849
-280
lines changed

40 files changed

+849
-280
lines changed

DirectProgramming/DPC++/ProjectTemplates/cmake-fpga/README.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ This code sample is minimal project template for FPGA using the `CMake` build sy
1111

1212
This project is a template designed to help you quickly create your own SYCL*-compliant application for FPGA targets.
1313

14-
The template assumes the use of `CMake` to build your application. The supplied `CMakeLists.txt` file contains the compiler options and libraries needed to compile an application for FPGA targets.
14+
The template assumes the use of `CMake` to build your application. The supplied `CMakeLists.txt` file contains the compiler options and libraries needed to compile an application for FPGA targets.
1515

1616
The `main.cpp` source file shows the header files- that you should include and the recommended "device selector" code for targeting the application runtime device.
1717

@@ -60,7 +60,7 @@ The basic steps to build and run a sample using VS Code include:
6060
3. Open a terminal in VS Code (**Terminal > New Terminal**).
6161
4. Run the sample in the VS Code terminal using the instructions below.
6262

63-
To learn more about the extensions and how to configure the oneAPI environment, see the
63+
To learn more about the extensions and how to configure the oneAPI environment, see the
6464
[Using Visual Studio Code with Intel® oneAPI Toolkits User Guide](https://www.intel.com/content/www/us/en/develop/documentation/using-vs-code-with-intel-oneapi/top.html).
6565

6666
### On Linux*
@@ -125,7 +125,7 @@ qsub -I -l nodes=1:fpga_runtime:ppn=2 -d .
125125
|FPGA Runtime (Stratix 10) |`qsub -l nodes=1:fpga_runtime:stratix10:ppn=2 -d .`
126126
|GPU |`qsub -l nodes=1:gpu:ppn=2 -d .`
127127
|CPU |`qsub -l nodes=1:xeon:ppn=2 -d .`
128-
128+
129129
130130
131131
>**Note**: For more information on how to specify compute nodes read, [Launch and manage jobs](https://devcloud.intel.com/oneapi/documentation/job-submission/) in the Intel® DevCloud for oneAPI Documentation.
@@ -143,4 +143,4 @@ Neither compiling nor executing programs on FPGA hardware are supported on the l
143143
Code samples are licensed under the MIT license. See
144144
[License.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/License.txt) for details.
145145
146-
Third party program Licenses can be found here: [third-party-programs.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/third-party-programs.txt).
146+
Third party program Licenses can be found here: [third-party-programs.txt](https://github.com/oneapi-src/oneAPI-samples/blob/master/third-party-programs.txt).

DirectProgramming/DPC++/ProjectTemplates/cmake-fpga/src/CMakeLists.txt

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
set(SOURCE_FILE main.cpp)
22
set(TARGET_NAME cmake)
33
set(EMULATOR_TARGET ${TARGET_NAME}.fpga_emu)
4+
set(SIMULATOR_TARGET ${TARGET_NAME}.fpga_sim)
45
set(FPGA_TARGET ${TARGET_NAME}.fpga)
56

67

@@ -18,6 +19,8 @@ endif()
1819
# Compile flags
1920
set(EMULATOR_COMPILE_FLAGS "-fintelfpga -DFPGA_EMULATOR ")
2021
set(EMULATOR_LINK_FLAGS "-fintelfpga ")
22+
set(SIMULATOR_COMPILE_FLAGS "-fintelfpga -DFPGA_SIMULATOR")
23+
set(SIMULATOR_LINK_FLAGS "-fintelfpga -Xssimulation -Xsghdl -Xstarget=${FPGA_DEVICE_NAME} ${USER_HARDWARE_FLAGS}")
2124
set(HARDWARE_COMPILE_FLAGS "-fintelfpga")
2225
set(HARDWARE_LINK_FLAGS "-fintelfpga -Xshardware -Xstarget=${FPGA_DEVICE_NAME} ${USER_HARDWARE_FLAGS}")
2326
# use: cmake -D USER_HARDWARE_FLAGS=<flags> to set additional flags for FPGA backend compilation
@@ -29,7 +32,6 @@ add_custom_target(fpga_emu DEPENDS ${EMULATOR_TARGET})
2932
set_target_properties(${EMULATOR_TARGET} PROPERTIES COMPILE_FLAGS ${EMULATOR_COMPILE_FLAGS})
3033
set_target_properties(${EMULATOR_TARGET} PROPERTIES LINK_FLAGS ${EMULATOR_LINK_FLAGS})
3134

32-
3335
# Generate report (without compiling all the way to FPGA hardware)
3436
set(DEVICE_OBJ_FILE ${TARGET_NAME}_report.a)
3537
add_custom_target(report DEPENDS ${DEVICE_OBJ_FILE})
@@ -40,6 +42,11 @@ add_custom_command(OUTPUT ${DEVICE_OBJ_FILE}
4042
COMMAND ${CMAKE_CXX_COMPILER} ${CMAKE_CXX_FLAGS_LIST} ${HARDWARE_LINK_FLAGS_LIST} -fsycl-link ${SOURCE_FILE} -o ${CMAKE_BINARY_DIR}/${DEVICE_OBJ_FILE}
4143
DEPENDS ${SOURCE_FILE})
4244

45+
# FPGA simulator
46+
add_executable(${SIMULATOR_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE})
47+
add_custom_target(fpga_sim DEPENDS ${SIMULATOR_TARGET})
48+
set_target_properties(${SIMULATOR_TARGET} PROPERTIES COMPILE_FLAGS ${SIMULATOR_COMPILE_FLAGS})
49+
set_target_properties(${SIMULATOR_TARGET} PROPERTIES LINK_FLAGS ${SIMULATOR_LINK_FLAGS})
4350

4451
# FPGA hardware
4552
add_executable(${FPGA_TARGET} EXCLUDE_FROM_ALL ${SOURCE_FILE})
@@ -53,7 +60,12 @@ add_custom_target(run_emu
5360
COMMAND ../${TARGET_NAME}.fpga_emu
5461
DEPENDS ${TARGET_NAME}.fpga_emu)
5562

63+
# Run FPGA simulator
64+
add_custom_target(run_sim
65+
COMMAND ../${TARGET_NAME}.fpga_sim
66+
DEPENDS ${TARGET_NAME}.fpga_sim)
67+
5668
# Run FPGA hardware
5769
add_custom_target(run_hw
58-
COMMAND ../${TARGET_NAME}.fpga_emu
59-
DEPENDS ${TARGET_NAME}.fpga_emu)
70+
COMMAND ../${TARGET_NAME}.fpga
71+
DEPENDS ${TARGET_NAME}.fpga)

DirectProgramming/DPC++FPGA/ReferenceDesigns/decompress/src/CMakeLists.txt

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -79,7 +79,7 @@ else()
7979
set(SEED 1)
8080
endif()
8181
endif()
82-
82+
8383
set(SEED_FLAG "-Xsseed=${SEED}")
8484
endif()
8585

@@ -97,7 +97,7 @@ endif()
9797
set(EMULATOR_COMPILE_FLAGS "-Wall ${CONSTEXPR_STEPS} ${WIN_FLAG} -fsycl -fintelfpga ${AC_TYPES_FLAG} ${LITERALS_PER_CYCLE_FLAG} ${DECOMPRESS_FORMAT_FLAG} -DFPGA_EMULATOR")
9898
set(EMULATOR_LINK_FLAGS "-fsycl -fintelfpga ${AC_TYPES_FLAG}")
9999
set(SIMULATOR_COMPILE_FLAGS "-Wall ${CONSTEXPR_STEPS} ${WIN_FLAG} -fsycl -fintelfpga ${AC_TYPES_FLAG} ${LITERALS_PER_CYCLE_FLAG} ${DECOMPRESS_FORMAT_FLAG} -DFPGA_SIMULATOR")
100-
set(SIMULATOR_LINK_FLAGS "-fsycl -fintelfpga -Xssimulation ${SEED_FLAG} -Xstarget=${FPGA_DEVICE} ${USER_HARDWARE_FLAGS}")
100+
set(SIMULATOR_LINK_FLAGS "-fsycl -fintelfpga -Xssimulation -Xsghdl -Xstarget=${FPGA_DEVICE} ${USER_HARDWARE_FLAGS}")
101101
set(HARDWARE_COMPILE_FLAGS "-Wall ${CONSTEXPR_STEPS} ${WIN_FLAG} -fsycl -fintelfpga ${AC_TYPES_FLAG} ${LITERALS_PER_CYCLE_FLAG} ${DECOMPRESS_FORMAT_FLAG}")
102102
set(REPORT_LINK_FLAGS "-fsycl -fintelfpga -Xshardware ${PROFILE_FLAG} ${FLAT_COMPILE_FLAG} -Xsparallel=2 ${SEED_FLAG} -Xstarget=${FPGA_DEVICE} ${USER_HARDWARE_FLAGS}")
103103
set(HARDWARE_LINK_FLAGS "${REPORT_LINK_FLAGS} ${AC_TYPES_FLAG}")
@@ -112,15 +112,6 @@ set_target_properties(${EMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${EMULATOR_CO
112112
set_target_properties(${EMULATOR_TARGET} PROPERTIES LINK_FLAGS "${EMULATOR_LINK_FLAGS}")
113113
add_custom_target(fpga_emu DEPENDS ${EMULATOR_TARGET})
114114

115-
###############################################################################
116-
### FPGA Simulator
117-
###############################################################################
118-
add_executable(${SIMULATOR_TARGET} ${SOURCE_FILE})
119-
target_include_directories(${SIMULATOR_TARGET} PRIVATE ../../../include)
120-
set_target_properties(${SIMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${SIMULATOR_COMPILE_FLAGS}")
121-
set_target_properties(${SIMULATOR_TARGET} PROPERTIES LINK_FLAGS "${SIMULATOR_LINK_FLAGS}")
122-
add_custom_target(fpga_sim DEPENDS ${SIMULATOR_TARGET})
123-
124115
###############################################################################
125116
### Generate Report
126117
###############################################################################
@@ -133,6 +124,15 @@ set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES COMPILE_FLAGS "${HARDWARE_C
133124
set_target_properties(${FPGA_EARLY_IMAGE} PROPERTIES LINK_FLAGS "${REPORT_LINK_FLAGS} -fsycl-link=early")
134125
# fsycl-link=early stops the compiler after RTL generation, before invoking Quartus
135126

127+
###############################################################################
128+
### FPGA Simulator
129+
###############################################################################
130+
add_executable(${SIMULATOR_TARGET} ${SOURCE_FILE})
131+
target_include_directories(${SIMULATOR_TARGET} PRIVATE ../../../include)
132+
set_target_properties(${SIMULATOR_TARGET} PROPERTIES COMPILE_FLAGS "${SIMULATOR_COMPILE_FLAGS}")
133+
set_target_properties(${SIMULATOR_TARGET} PROPERTIES LINK_FLAGS "${SIMULATOR_LINK_FLAGS}")
134+
add_custom_target(fpga_sim DEPENDS ${SIMULATOR_TARGET})
135+
136136
###############################################################################
137137
### FPGA Hardware
138138
###############################################################################

DirectProgramming/DPC++FPGA/ReferenceDesigns/decompress/src/common/common.hpp

Lines changed: 0 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -187,27 +187,6 @@ auto CTZ(const ac_int<bits, is_signed>& in) {
187187
return ret;
188188
}
189189

190-
//
191-
// Selects a SYCL device using a string. This is typically used to select
192-
// the FPGA simulator device
193-
//
194-
class select_by_string : public sycl::default_selector {
195-
public:
196-
select_by_string(std::string s) : target_name(s) {}
197-
virtual int operator()(const sycl::device& device) const {
198-
std::string name = device.get_info<sycl::info::device::name>();
199-
if (name.find(target_name) != std::string::npos) {
200-
// The returned value represents a priority, this number is chosen to be
201-
// large to ensure high priority
202-
return 10000;
203-
}
204-
return -1;
205-
}
206-
207-
private:
208-
std::string target_name;
209-
};
210-
211190
//
212191
// Reads 'filename' and returns an array of chars (the bytes of the file)
213192
//

DirectProgramming/DPC++FPGA/ReferenceDesigns/decompress/src/main.cpp

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,9 +128,7 @@ int main(int argc, char* argv[]) {
128128
#if defined(FPGA_EMULATOR)
129129
sycl::ext::intel::fpga_emulator_selector selector;
130130
#elif defined(FPGA_SIMULATOR)
131-
std::string simulator_device_string =
132-
"SimulatorDevice : Multi-process Simulator (aclmsim0)";
133-
select_by_string selector = select_by_string{simulator_device_string};
131+
sycl::ext::intel::fpga_simulator_selector selector;
134132
#else
135133
sycl::ext::intel::fpga_selector selector;
136134
#endif

DirectProgramming/DPC++FPGA/ReferenceDesigns/mvdr_beamforming/src/CMakeLists.txt

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -91,10 +91,10 @@ endif()
9191
# For this reason, FPGA backend flags must be passed as link flags in CMake.
9292
set(EMULATOR_COMPILE_FLAGS "-Wall ${WIN_FLAG} -fsycl -fintelfpga -fbracket-depth=512 ${AC_TYPES_FLAG} ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${STREAMING_PIPE_WIDTH_FLAG} -DFPGA_EMULATOR")
9393
set(EMULATOR_LINK_FLAGS "-fsycl -fintelfpga ${AC_TYPES_FLAG} ${ENABLE_USM}")
94-
set(SIMULATOR_COMPILE_FLAGS "-Wall -fsycl -fintelfpga -fbracket-depth=512 ${AC_TYPES_FLAG} ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${STREAMING_PIPE_WIDTH_FLAG}")
95-
set(SIMULATOR_LINK_FLAGS "-Wall -fsycl -fintelfpga -fbracket-depth=512 ${AC_TYPES_FLAG} ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${STREAMING_PIPE_WIDTH_FLAG} -Xssimulation -Xsghdl")
94+
set(SIMULATOR_COMPILE_FLAGS "${WIN_FLAG} -Wall -fsycl -fintelfpga -fbracket-depth=512 ${AC_TYPES_FLAG} ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${STREAMING_PIPE_WIDTH_FLAG} -DFPGA_SIMULATOR")
9695
set(HARDWARE_COMPILE_FLAGS "${WIN_FLAG} -fbracket-depth=512 -fsycl -fintelfpga ${AC_TYPES_FLAG} ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${REAL_IO_PIPES_FLAG} ${STREAMING_PIPE_WIDTH_FLAG}")
9796
set(REPORT_LINK_FLAGS "-Wall -fsycl -fintelfpga -Xshardware -fbracket-depth=512 ${ENABLE_USM} ${SENSOR_SIZE_FLAG} ${NUM_SENSORS_FLAG} ${QRD_MIN_ITERATIONS_FLAG} ${REAL_IO_PIPES_FLAG} ${STREAMING_PIPE_WIDTH_FLAG} ${PROFILE_FLAG} -Xsparallel=2 -Xstarget=${FPGA_DEVICE} ${USER_HARDWARE_FLAGS} ${UDP_LINK_FLAGS}")
97+
set(SIMULATOR_LINK_FLAGS "${REPORT_LINK_FLAGS} ${AC_TYPES_FLAG} -Xssimulation -Xsghdl")
9898
set(HARDWARE_LINK_FLAGS "${REPORT_LINK_FLAGS} ${AC_TYPES_FLAG}")
9999
# use cmake -D USER_HARDWARE_FLAGS=<flags> to set extra flags for FPGA backend compilation
100100

DirectProgramming/DPC++FPGA/ReferenceDesigns/qri/sample.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,4 +74,4 @@
7474
]
7575
},
7676
"expertise": "Reference Designs and End to End"
77-
}
77+
}

0 commit comments

Comments
 (0)