presentation.tex 27 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730
  1. \documentclass{beamer}
  2. \usetheme{Pittsburgh}
  3. \usecolortheme{rose}
  4. \usepackage[backend=bibtex,style=ieee]{biblatex}
  5. \usepackage{tabularx}
  6. \usepackage{xcolor}
  7. \usepackage{minted}
  8. \usemintedstyle{manni}
  9. \addtobeamertemplate{navigation symbols}{}{%
  10. \usebeamerfont{footline}%
  11. \usebeamercolor[fg]{footline}%
  12. \hspace{1em}%
  13. \insertframenumber/\inserttotalframenumber
  14. }
  15. \newcommand*\ruleline[1]{\par\noindent\raisebox{.8ex}{\makebox[\linewidth]{\hrulefill\hspace{1ex}\raisebox{-.8ex}{#1}\hspace{1ex}\hrulefill}}}
  16. % color macros
  17. \definecolor{BrickRed}{HTML}{B6321C}
  18. \definecolor{OliveGreen}{HTML}{3C8031}
  19. \definecolor{MidnightBlue}{HTML}{006795}
  20. \definecolor{RoyalBlue}{HTML}{0091DC}
  21. \newcommand{\red}[1]{\textcolor{BrickRed}{#1} }
  22. \newcommand{\green}[1]{\textcolor{OliveGreen}{#1} }
  23. \newcommand{\blue}[1]{\textcolor{MidnightBlue}{#1} }
  24. \newcommand{\royalblue}[1]{\textcolor{RoyalBlue}{#1} }
  25. \title[fpgas] % (optional, only for long titles)
  26. {System-Level Design Languages}
  27. \subtitle{}
  28. \author[C. Töpfl, N. Tremurici]
  29. {C.~Töpfl, N.~Tremurici}%\inst{1}}
  30. \institute[Universities Here and There] % (optional)
  31. {
  32. %\inst{1}%
  33. Institute of Computer Engineering\newline
  34. TU Wien
  35. }
  36. \date[2023] % (optional)
  37. {HW/SW Codesign VU, 2023}
  38. \subject{Computer Engineering}
  39. \usepackage{filecontents}
  40. \begin{filecontents*}{\jobname.bib}
  41. @ARTICLE{nane2016,
  42. author={Nane and Razvan and Sima and Vlad-Mihai and Pilato and Christian and Choi and Jongsok and Fort and Blair and Canis and Andrew and Chen and Yu Ting and Hsiao and Hsuan and Brown and Stephen and Ferrandi and Fabrizio and Anderson and Jason and Bertels and Koen},
  43. journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems},
  44. title={A Survey and Evaluation of FPGA High-Level Synthesis Tools},
  45. year={2016},
  46. volume={35},
  47. number={10},
  48. pages={1591-1604},
  49. doi={10.1109/TCAD.2015.2513673}
  50. }
  51. @ARTICLE{lahti2019,
  52. author={Lahti and Sakari and Sjövall and Panu and Vanne and Jarno and Hämäläinen and Timo D.},
  53. journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems},
  54. title={Are We There Yet? A Study on the State of High-Level Synthesis},
  55. year={2019},
  56. volume={38},
  57. number={5},
  58. pages={898-911},
  59. doi={10.1109/TCAD.2018.2834439}}@ARTICLE{8356004,
  60. author={Lahti and Sakari and Sjövall and Panu and Vanne and Jarno and Hämäläinen and Timo D.},
  61. journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems},
  62. title={Are We There Yet? A Study on the State of High-Level Synthesis},
  63. year={2019},
  64. volume={38},
  65. number={5},
  66. pages={898-911},
  67. doi={10.1109/TCAD.2018.2834439}
  68. }
  69. @ARTICLE{schafer2020,
  70. author={Schafer and Benjamin Carrion and Wang and Zi},
  71. journal={IEEE Transactions on Computer-Aided Design of Integrated Circuits and Systems},
  72. title={High-Level Synthesis Design Space Exploration: Past, Present, and Future},
  73. year={2020},
  74. volume={39},
  75. number={10},
  76. pages={2628-2639},
  77. doi={10.1109/TCAD.2019.2943570}
  78. }
  79. @book{hwsw-codesign-book,
  80. title = {Hardware/Software Co-Design: Principles and Practice},
  81. author = {Daniel D. Gajski and Jianwen Zhu and Rainer Dömer (auth.) and Jørgen Staunstrup and Wayne Wolf (eds.)},
  82. publisher = {Springer US},
  83. year = {1997},
  84. series = {},
  85. edition = {1},
  86. volume = {},
  87. }
  88. @book{esl-book,
  89. title = {ESL Design and Verification: A Prescription for Electronic System Level Methodology (Systems on Silicon)},
  90. author = {Grant Martin and Brian Bailey and Andrew Piziali},
  91. publisher = {Morgan Kaufmann},
  92. year = {2007},
  93. series = {},
  94. edition = {},
  95. volume = {},
  96. }
  97. @misc{intel-hls-course,
  98. title = {Introduction to High-Level Synthesis (Part 1 of 7)},
  99. author = {Intel},
  100. year = {2017},
  101. url = {https://learning.intel.com/developer/learn/courses/240/introduction-to-high-level-synthesis-part-1-of-7},
  102. }
  103. @misc{intel-hls-videos,
  104. title = {Introduction to High-Level Synthesis (Part 1 of 7)},
  105. author = {Intel},
  106. year = {2017},
  107. url = {https://youtube.com/watch?v=nYbw9k7KNJ4},
  108. }
  109. @misc{systemc,
  110. title = {SystemC - The language for System-level design, modeling and verification},
  111. author = {systemc.org},
  112. year = {2023},
  113. url = {https://systemc.org/overview/systemc/},
  114. }
  115. @misc{learn-systemc,
  116. title = {Learn SystemC by examples - Process: Method},
  117. author = {learnsystemc.com},
  118. year = {2020},
  119. url = {https://learnsystemc.com/basic/method},
  120. }
  121. \end{filecontents*}
  122. \bibliography{\jobname.bib}
  123. \begin{document}
  124. \begin{frame}\titlepage\end{frame}
  125. \begin{frame}
  126. \frametitle{Outline}
  127. \ruleline{1 | What are System-Level Design Languages?}
  128. \newline
  129. \ruleline{2 | What can System-Level Design Languages do?}
  130. \newline
  131. \ruleline{3 | SystemC}
  132. \newline
  133. \ruleline{4 | Intel HLS}
  134. \newline
  135. \end{frame}
  136. \begin{frame}
  137. \frametitle{Implementing a HW/SW System}
  138. In general, what do we specify using language?
  139. \begin{table}[H]
  140. \centering
  141. \begin{tabularx}{\textwidth}{c|cc}
  142. & HW & SW \\ \hline
  143. System instantiation & HW to generate & SW as program to \\
  144. & & store in memory \\ \hline
  145. Test model & Testbench model & Testing program \\
  146. & simulation & trace \\ \hline
  147. Verification model & State space model & State space model \\
  148. & (signals) & (logical) \\
  149. \end{tabularx}
  150. \caption{HW/SW specification comparison}
  151. \end{table}
  152. \end{frame}
  153. \begin{frame}
  154. \frametitle{Implementing a HW/SW System}
  155. Some basic follow-up questions:
  156. \begin{itemize}
  157. \item{What is the HW/SW partition?}
  158. \item{How many languages do we use?}
  159. \item{Can a single language specify all parts of the system?}
  160. \item{What should the language have?}
  161. \item{What sort of languages are available?}
  162. \end{itemize}
  163. \end{frame}
  164. \begin{frame}
  165. \frametitle{Example (Without Codesign)}
  166. A methodology that uses no codesign might use:
  167. \begin{table}[H]
  168. \centering
  169. \begin{tabularx}{\textwidth}{c|cc}
  170. & HW & SW \\ \hline
  171. System instantiation & \red{VHDL} & \green{C} \\ \hline
  172. Test model & \red{VHDL} & \green{C} \\ \hline
  173. Verification model & \blue{temporal logic} & \blue{temporal logic} \\
  174. \end{tabularx}
  175. \caption{HW/SW example}
  176. \end{table}
  177. \end{frame}
  178. \begin{frame}
  179. \frametitle{Using Codesign}
  180. An idealized methodology that uses codesign might use:
  181. \begin{table}[H]
  182. \centering
  183. \begin{tabularx}{\textwidth}{c|cc}
  184. & HW & SW \\ \hline
  185. System instantiation & \red{system language} & \red{system language} \\ \hline
  186. Test model & \green{testing language} & \green{testing language} \\ \hline
  187. Verification model & \blue{verification language} & \blue{verification language} \\
  188. \end{tabularx}
  189. \caption{HW/SW Codesign}
  190. \end{table}
  191. \end{frame}
  192. \begin{frame}
  193. \frametitle{All the Languages \cite{hwsw-codesign-book}}
  194. Categorization from 1997 according to \cite{hwsw-codesign-book}[ch. 7.4]:
  195. \begin{enumerate}
  196. \item{VLSI system design}
  197. \item{protocol specification}
  198. \item{reactive system design (Petri nets)}
  199. \item{programming languages}
  200. \item{parallel programming languages}
  201. \item{functional programming}
  202. \end{enumerate}
  203. \end{frame}
  204. %\begin{frame}
  205. %\frametitle{Language Differences \cite{hwsw-codesign-book}}
  206. %\begin{columns}[c]
  207. %\begin{column}{\textwidth}
  208. %\begin{figure}[ht]
  209. %\begin{center}
  210. %\includegraphics[width=1\columnwidth,keepaspectratio]{graphics/language-expressivity.png}
  211. %\end{center}
  212. %\end{figure}
  213. %\end{column}
  214. %\end{columns}
  215. %\end{frame}
  216. \begin{frame}
  217. \frametitle{Language Differences \cite{hwsw-codesign-book}}
  218. \begin{columns}[c]
  219. \begin{column}{\textwidth}
  220. \begin{figure}[ht]
  221. \begin{center}
  222. \includegraphics[width=.9\columnwidth,keepaspectratio]{graphics/axes-of-language.png}
  223. \end{center}
  224. \end{figure}
  225. \end{column}
  226. \end{columns}
  227. \end{frame}
  228. \begin{frame}
  229. \frametitle{A More Modern Classification \cite{nane2016}}
  230. \begin{columns}[c]
  231. \begin{column}{\textwidth}
  232. \begin{figure}[ht]
  233. \begin{center}
  234. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/nane2016-classification.png}
  235. \end{center}
  236. \end{figure}
  237. \end{column}
  238. \end{columns}
  239. \end{frame}
  240. \begin{frame}
  241. %\frametitle{A More Modern Classification \cite{nane2016}}
  242. \begin{columns}[c]
  243. \begin{column}{\textwidth}
  244. \begin{figure}[ht]
  245. \begin{center}
  246. \includegraphics[width=\columnwidth,height=.89\textheight,keepaspectratio]{graphics/nane2016-table.png}
  247. \end{center}
  248. \end{figure}
  249. \end{column}
  250. \end{columns}
  251. \end{frame}
  252. \begin{frame}
  253. \frametitle{Defining System-Level Design Languages}
  254. \begin{itemize}
  255. \item{What is a \textit{system-level design language}?}
  256. \end{itemize}
  257. Toward a definition: a \textit{system-level design language} is a language used to specify a \textit{system-level design}
  258. \newline
  259. \newline
  260. \begin{itemize}
  261. \item{What is \textit{system-level design}?}
  262. \end{itemize}
  263. Defined in \cite{esl-book} as ``the utilization of appropriate abstractions in order to increase comprehension about a system, and to enhance the probability of a successful implementation of functionality in a cost-effective manner, while meeting necessary constraints.''
  264. \end{frame}
  265. \begin{frame}
  266. \frametitle{Defining System-Level Design Languages}
  267. \begin{itemize}
  268. \item{a related cousin: \textit{high-level synthesis}}
  269. \end{itemize}
  270. As described in \cite{nane2016}: ``HLS allows designers to work at a higher-level of abstraction by using a software program to specify the hardware functionality.''
  271. \end{frame}
  272. \begin{frame}
  273. \frametitle{Compilers}
  274. \begin{itemize}
  275. \item{languages for \textit{system-level design} and \textit{high-level synthesis} are analogous to their respective \textit{tools}}
  276. \item{the \textit{tools} consist of compilers}
  277. \begin{itemize}
  278. \item{built using custom/new compilers}
  279. \item{built by extending existing compilers (e.g. targeting GCC, LLVM, ...)}
  280. \end{itemize}
  281. \end{itemize}
  282. \end{frame}
  283. \begin{frame}
  284. \frametitle{Optimization techniques \cite{nane2016}}
  285. \ruleline{1 | Operation Chaining}
  286. \begin{itemize}
  287. \item{eliminating registers by scheduling combinatorial operators within the same cycle}
  288. \end{itemize}
  289. \end{frame}
  290. \begin{frame}
  291. \frametitle{Optimization techniques \cite{nane2016}}
  292. \ruleline{2 | Bitwidth Analysis}
  293. \begin{itemize}
  294. \item{reducing the number of bits required by datapath operators}
  295. \item{significant optimization, impacts all non-functional requirements (performance, area and power!)}
  296. \item{important note: can not always be automated (requires specific knowledge)}
  297. \end{itemize}
  298. \end{frame}
  299. \begin{frame}
  300. \frametitle{Optimization techniques \cite{nane2016}}
  301. \ruleline{3 | Memory Space Allocation}
  302. \begin{itemize}
  303. \item{exploiting distributed block RAMs}
  304. \item{example: partitioning and mapping data structures onto dedicated BRAMs for low cost memory access}
  305. \item{note: a scheduler could schedule multiple memory operations in a single cycle}
  306. \end{itemize}
  307. \end{frame}
  308. \begin{frame}
  309. \frametitle{Optimization techniques \cite{nane2016}}
  310. \ruleline{4 | Loop Optimizations}
  311. \begin{itemize}
  312. \item{exploiting loop-level parallelism: loop pipelining}
  313. \item{allow loop iterations to start before the completion of its predecessor}
  314. \item{significant optimization for compute-intensive loops}
  315. \item{note: limited by data dependencies}
  316. \end{itemize}
  317. \end{frame}
  318. \begin{frame}
  319. \frametitle{Optimization techniques \cite{nane2016}}
  320. \ruleline{5 | Hardware Resource Library}
  321. \begin{itemize}
  322. \item{optimize for target hardware}
  323. \begin{itemize}
  324. \item{using dedicated resources like DSP elements}
  325. \item{using specific optimizations (like shifts for multiplications/divisions)}
  326. \end{itemize}
  327. \end{itemize}
  328. \end{frame}
  329. \begin{frame}
  330. \frametitle{Optimization techniques \cite{nane2016}}
  331. \ruleline{6 | Speculation and Code Motion}
  332. \begin{itemize}
  333. \item{execute operations in anticipation of conditions that control their execution}
  334. \item{useful if functional units are available and otherwise unused}
  335. \end{itemize}
  336. \end{frame}
  337. \begin{frame}
  338. \frametitle{Optimization techniques \cite{nane2016}}
  339. \ruleline{7 | Exploiting Spatial Parallelism}
  340. \begin{itemize}
  341. \item{instantiate units that run concurrently by analyzing data dependencies and loop-level parallelism}
  342. \item{important note: difficult to automatically extract coarse-grained parallelism}
  343. \item{some tools use OpenMP (C parallelization framework) for better support}
  344. \end{itemize}
  345. \end{frame}
  346. \begin{frame}
  347. \frametitle{Optimization techniques \cite{nane2016}}
  348. \ruleline{8 | If-Conversion}
  349. \begin{itemize}
  350. \item{schedule in parallel disjoin execution paths created by selective statements (e.g. \texttt{if})}
  351. \item{better pipelining because control dependencies are removed}
  352. \item{note: balanced number of cycles for execution paths necessary (otherwise harmful!)}
  353. \item{note: automated use of this optimization becomes a decision problem (to use or not to use), but some promising results}
  354. \end{itemize}
  355. \end{frame}
  356. \begin{frame}{Language dimensions | Usability}
  357. \begin{itemize}
  358. \item[-] learning a new language / new concepts
  359. \item[-] documentation
  360. \item[+] often based on usually known languages (e.g. C++)
  361. \item[+] faster than other methods
  362. \item[+] higher productivity for developer
  363. \end{itemize}
  364. \end{frame}
  365. \begin{frame}{Why even bother with System-Level Design Languages?}
  366. \begin{itemize}
  367. \item faster development time
  368. \item shorter time to market
  369. \item higher possible productivity
  370. \end{itemize}
  371. \end{frame}
  372. \begin{frame}{Why even bother with System-Level Design Languages? | Time \cite{lahti2019}}
  373. \begin{columns}[c]
  374. \begin{column}{\textwidth}
  375. \begin{figure}[ht]
  376. \begin{center}
  377. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/HLS_time_comparison.JPG}
  378. \end{center}
  379. \end{figure}
  380. \end{column}
  381. \end{columns}
  382. \end{frame}
  383. \begin{frame}{Why even bother with System-Level Design Languages? | Time \cite{lahti2019}}
  384. \begin{columns}[c]
  385. \begin{column}{\textwidth}
  386. \begin{figure}[ht]
  387. \begin{center}
  388. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/Developement_Time.JPG}
  389. \end{center}
  390. \end{figure}
  391. \end{column}
  392. \end{columns}
  393. \end{frame}
  394. \begin{frame}{Why even bother with System-Level Design Languages? | Performance \cite{lahti2019}}
  395. \begin{columns}[c]
  396. \begin{column}{\textwidth}
  397. \begin{figure}[ht]
  398. \begin{center}
  399. \includegraphics[width=0.8\columnwidth,keepaspectratio]{graphics/performance_comparison.JPG}
  400. \end{center}
  401. \end{figure}
  402. \end{column}
  403. \end{columns}
  404. \end{frame}
  405. \begin{frame}{SW/HW Automatic Partitioning}
  406. \begin{itemize}
  407. \item no automatic partitioning of SW and HW directly in the design languages
  408. \item tools which can be used separately
  409. \end{itemize}
  410. \end{frame}
  411. \begin{frame}{Evaluation}
  412. \begin{itemize}
  413. \item faster development time
  414. \item shorter time to market
  415. \item verification
  416. \item everything is combined in one language
  417. \item for highly optimised system RTL design is recommended
  418. \end{itemize}
  419. \end{frame}
  420. \begin{frame}{Use in the Industry}
  421. \begin{itemize}
  422. \item Intel/AMD
  423. \item ``viable method for prototyping and designs with short time to market''
  424. \end{itemize}
  425. \end{frame}
  426. \begin{frame}
  427. %\frametitle{A More Modern Classification \cite{nane2016}}
  428. \begin{columns}[c]
  429. \begin{column}{\textwidth}
  430. \begin{figure}[ht]
  431. \begin{center}
  432. \includegraphics[width=\columnwidth,height=.89\textheight,keepaspectratio]{graphics/nane2016-table.png}
  433. \end{center}
  434. \end{figure}
  435. \end{column}
  436. \end{columns}
  437. \end{frame}
  438. \begin{frame}
  439. \frametitle{SystemC \cite{systemc}}
  440. \begin{itemize}
  441. \item based on C++
  442. \item class libraries
  443. \item design, automatic partitioning and verification on different abstraction levels
  444. \item even allows for analog and mixed signal uses
  445. \end{itemize}
  446. \end{frame}
  447. \begin{frame}{SystemC | Structure \cite{systemc}}
  448. \begin{columns}[c]
  449. \begin{column}{\textwidth}
  450. \begin{figure}[ht]
  451. \begin{center}
  452. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/systemc.JPG}
  453. \end{center}
  454. \end{figure}
  455. \end{column}
  456. \end{columns}
  457. \end{frame}
  458. \begin{frame}[containsverbatim]{SystemC | Example FIR header}
  459. \begin{minted}{c++}
  460. #include "systemc.h"
  461. SC_MODULE(FIR16)
  462. {
  463. // port definition
  464. sc_in <bool> clk;
  465. sc_in <bool> rst;
  466. sc_in <sc_uint<32>> x;
  467. sc_out<sc_uint<32>> y;
  468. \end{minted}
  469. \end{frame}
  470. \begin{frame}[containsverbatim]{SystemC | Example FIR header}
  471. \begin{minted}{c++}
  472. // data and function members
  473. void fir16();
  474. sc_uint<32> input, output;
  475. sc_signal<sc_uint<32>> d1, d2, ..., d14, d15;
  476. sc_uint<32> b0, b1, ..., b14, b15;
  477. \end{minted}
  478. \end{frame}
  479. \begin{frame}[containsverbatim]{SystemC | Example FIR header}
  480. \begin{minted}{c++}
  481. // constructor
  482. SC_CTOR(FIR16)
  483. {
  484. // sensitivity list
  485. SC_CTHREAD(fir16, clk.pos());
  486. // positive edge trigger clock
  487. reset_signal_is(rst, false);
  488. // synchronous active-low
  489. }
  490. \end{minted}
  491. \end{frame}
  492. \begin{frame}[containsverbatim]{SystemC | Example FIR reset}
  493. \begin{minted}{c++}
  494. #include "FIR16.h"
  495. void FIR16::fir16()
  496. {
  497. // reset
  498. b0 = 0x00000F0F;
  499. ...
  500. b15 = 0x00000F0F;
  501. d1 = 0;
  502. ...
  503. d15 = 0;
  504. \end{minted}
  505. \end{frame}
  506. \begin{frame}[containsverbatim]{SystemC | Example FIR shift}
  507. \begin{minted}{c++}
  508. //computation
  509. while(1)
  510. {
  511. wait();
  512. input = x.read();
  513. d1 = input;
  514. d2 = d1;
  515. ...
  516. d14 = d13;
  517. d15 = d14;
  518. \end{minted}
  519. \end{frame}
  520. \begin{frame}[containsverbatim]{SystemC | Example FIR output}
  521. \begin{minted}{c++}
  522. output = b0 * input
  523. + b1 * d1.read()
  524. + b2 * d2.read()
  525. + b3 * d3.read()
  526. ...
  527. + b13 * d13.read()
  528. + b14 * d14.read()
  529. + b15 * d15.read();
  530. y.write(output);
  531. \end{minted}
  532. \end{frame}
  533. \begin{frame}[containsverbatim]{SystemC | Example FIR output}
  534. \begin{minted}{c++}
  535. sc_time clkPrd(5, SC_NS); // 200MHz
  536. sc_time clkDly( 0, SC_NS);
  537. sc_clock clk("clk", clkPrd, 0.50, clkDly, true);
  538. // instantiation
  539. FIR16 fir16_1("fir16_1");
  540. fir16_1.clk(clk);
  541. fir16_1.rst(rst);
  542. fir16_1.x(x);
  543. fir16_1.y(y);
  544. \end{minted}
  545. \end{frame}
  546. \begin{frame}[containsverbatim]{C | Example FIR shift}
  547. \begin{minted}{c}
  548. float fir_filter(float input) {
  549. float output = 0.0;
  550. // shift input samples in the buffer
  551. for (int i = NUM_TAPS - 1; i > 0; i--) {
  552. input_signal[i] = input_signal[i - 1];
  553. }
  554. \end{minted}
  555. \end{frame}
  556. \begin{frame}[containsverbatim]{C | Example FIR convolution}
  557. \begin{minted}{c}
  558. // store the latest input sample in the buffer
  559. input_signal[0] = input;
  560. // perform the convolution
  561. for (int i = 0; i < NUM_TAPS; i++) {
  562. output += fir_coeffs[i] * input_signal[i];
  563. }
  564. return output;
  565. }
  566. \end{minted}
  567. \end{frame}
  568. \begin{frame}
  569. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  570. \begin{columns}[c]
  571. \begin{column}{1.18\textwidth}
  572. \begin{figure}[ht]
  573. \begin{center}
  574. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-use-model.png}
  575. \end{center}
  576. \end{figure}
  577. \end{column}
  578. \end{columns}
  579. \end{frame}
  580. %\begin{frame}
  581. %\frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  582. %\begin{columns}[c]
  583. %\begin{column}{1.18\textwidth}
  584. %\begin{figure}[ht]
  585. %\begin{center}
  586. %\includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-compiler.png}
  587. %\end{center}
  588. %\end{figure}
  589. %\end{column}
  590. %\end{columns}
  591. %\end{frame}
  592. \begin{frame}
  593. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  594. \begin{columns}[c]
  595. \begin{column}{1.18\textwidth}
  596. \begin{figure}[ht]
  597. \begin{center}
  598. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-compiler-usage.png}
  599. \end{center}
  600. \end{figure}
  601. \end{column}
  602. \end{columns}
  603. \end{frame}
  604. \begin{frame}
  605. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  606. \begin{columns}[c]
  607. \begin{column}{1.18\textwidth}
  608. \begin{figure}[ht]
  609. \begin{center}
  610. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-procedure.png}
  611. \end{center}
  612. \end{figure}
  613. \end{column}
  614. \end{columns}
  615. \end{frame}
  616. \begin{frame}
  617. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  618. \begin{columns}[c]
  619. \begin{column}{1.18\textwidth}
  620. \begin{figure}[ht]
  621. \begin{center}
  622. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-fir-filter-example.png}
  623. \end{center}
  624. \end{figure}
  625. \end{column}
  626. \end{columns}
  627. \end{frame}
  628. \begin{frame}
  629. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  630. \begin{columns}[c]
  631. \begin{column}{1.18\textwidth}
  632. \begin{figure}[ht]
  633. \begin{center}
  634. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-optimizations-loops.png}
  635. \end{center}
  636. \end{figure}
  637. \end{column}
  638. \end{columns}
  639. \end{frame}
  640. \begin{frame}
  641. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  642. \begin{columns}[c]
  643. \begin{column}{1.18\textwidth}
  644. \begin{figure}[ht]
  645. \begin{center}
  646. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-mem-1-double-pump.png}
  647. \end{center}
  648. \end{figure}
  649. \end{column}
  650. \end{columns}
  651. \end{frame}
  652. \begin{frame}
  653. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  654. \begin{columns}[c]
  655. \begin{column}{1.18\textwidth}
  656. \begin{figure}[ht]
  657. \begin{center}
  658. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-mem-2-local-replication.png}
  659. \end{center}
  660. \end{figure}
  661. \end{column}
  662. \end{columns}
  663. \end{frame}
  664. \begin{frame}
  665. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  666. \begin{columns}[c]
  667. \begin{column}{1.18\textwidth}
  668. \begin{figure}[ht]
  669. \begin{center}
  670. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-mem-3-coalescing.png}
  671. \end{center}
  672. \end{figure}
  673. \end{column}
  674. \end{columns}
  675. \end{frame}
  676. \begin{frame}
  677. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  678. \begin{columns}[c]
  679. \begin{column}{1.18\textwidth}
  680. \begin{figure}[ht]
  681. \begin{center}
  682. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-mem-4-banking.png}
  683. \end{center}
  684. \end{figure}
  685. \end{column}
  686. \end{columns}
  687. \end{frame}
  688. \begin{frame}
  689. \frametitle{Intel HLS \cite{intel-hls-course}\cite{intel-hls-videos}}
  690. \begin{columns}[c]
  691. \begin{column}{1.18\textwidth}
  692. \begin{figure}[ht]
  693. \begin{center}
  694. \includegraphics[width=1\columnwidth,keepaspectratio]{graphics/hls-mem-5-port-sharing.png}
  695. \end{center}
  696. \end{figure}
  697. \end{column}
  698. \end{columns}
  699. \end{frame}
  700. \begin{frame}[allowframebreaks]
  701. \frametitle{Bibliography}
  702. \printbibliography
  703. \end{frame}
  704. \begin{frame}[c]
  705. \ruleline{\textbf{Thank you!}}
  706. \newline
  707. \ruleline{Further questions?}
  708. \end{frame}
  709. \end{document}