{"id":363793,"date":"2024-05-21T02:03:35","date_gmt":"2024-05-21T02:03:35","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=363793"},"modified":"-0001-11-30T00:00:00","modified_gmt":"2024-05-21T02:03:35","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=363793","title":{"rendered":"<span>Toward the January meetup on portable SystemVerilog examples in Silicon Valley<\/span>"},"content":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/ff9\/a4e\/702\/ff9a4e702acc0804e69942f913904c25.jpg\" width=\"3840\" height=\"2160\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/ff9\/a4e\/702\/ff9a4e702acc0804e69942f913904c25.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>The\u00a0<a href=\"https:\/\/www.linkedin.com\/groups\/14348665\/\" rel=\"noopener noreferrer nofollow\">team developing a set of portable SystemVerilog examples\u00a0<\/a>decided to organize the first event in Silicon Valley on Sunday, January 14 from 2PM till 5PM at\u00a0<a href=\"https:\/\/maps.app.goo.gl\/UApZ6r65jqSPX4pBA\" rel=\"noopener noreferrer nofollow\">Hacker Dojo in Mountain View, CA<\/a>. If the first event is successful we are going to make it recurrent. You can register for the event on\u00a0<a href=\"https:\/\/www.meetup.com\/hackerdojo\/events\/297949410\/\" rel=\"noopener noreferrer nofollow\">Meetup<\/a>\u00a0or\u00a0<a href=\"https:\/\/www.linkedin.com\/events\/portablesystemverilogexamplesfo7141484467780501504\/comments\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>.<\/p>\n<p>The current directions of the group:<\/p>\n<p>1. Scripts for abstracting FPGA boards to develop board-independent and toolchain-independent SystemVerilog examples. This allows for teaching university courses and running educational seminars with a variety of boards available at a given place. The current state is in\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/basics-graphics-music\" rel=\"noopener noreferrer nofollow\">basics-graphics-music<\/a>\u00a0GitHub repository.<\/p>\n<p>2. Integration of the peripherals to make the classes more interesting. Adding sound generation and recognition, computer graphics and sensors, also with an abstraction level to allow the students to use different microphones and display interfaces with different numbers of color bits per pixel.<\/p>\n<p>3. The examples and homework exercises to teach the students the mechanics of Register-Transfer Level (RTL) design methodology, the basics of pipelining, flow control, and microarchitectural primitives, such as FIFOs and arbiters. The current public (without solutions) repositories include\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/systemverilog-homework\" rel=\"noopener noreferrer nofollow\">systemverilog-homework<\/a>\u00a0and\u00a0<a href=\"https:\/\/gitflic.ru\/project\/yuri-panchul\/valid-ready-etc\" rel=\"noopener noreferrer nofollow\">valid-ready-etc<\/a>\u00a0.<\/p>\n<p>4. Wrapping various RISC-V CPU cores in the board-independent platform to give the students an opportunity to compare different microarchitectures, from a simplified single-cycle implementation of a subset of RISC-V architecture &#8212; to cache-less MCU-level cores &#8212; to more complicated cores with caches, TLB MMU, superscalar execution and the ability to run Linux. The examples we have worked with so far included\u00a0<a href=\"https:\/\/github.com\/zhelnio\/schoolRISCV\" rel=\"noopener noreferrer nofollow\">schoolRISCV<\/a>\u00a0and\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/yrv-plus\" rel=\"noopener noreferrer nofollow\">yrv-plus<\/a>\u00a0.<\/p>\n<p>5. Connecting FPGA-based training to ASIC design. Making sure all the microarchitectural and CPU-based examples are synthesizable with Open Lane ASIC synthesis, demonstrating how microarchitecture decisions affect ASIC timing, exploring ASIC platforms like Efabless Caravel, etc.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/10c\/92b\/b4d\/10c92bb4d219b2defa7adf1e56ad746b.jpg\" alt=\"Altera Terasic: DE0, DE0-CV, DE0-Nano, DE10-Lite, DE1-SoC, DE2-115, Omdazz. Altera: RzRd, Piswords-6, Saylinx, Zeowaa, EPI-MiniCY4. Xilinx: Digilent Basys3, Nexys4, Nexys4-DDR, Nexys A7. Gowin: Tang Primer 20K Dock.\" title=\"Altera Terasic: DE0, DE0-CV, DE0-Nano, DE10-Lite, DE1-SoC, DE2-115, Omdazz. Altera: RzRd, Piswords-6, Saylinx, Zeowaa, EPI-MiniCY4. Xilinx: Digilent Basys3, Nexys4, Nexys4-DDR, Nexys A7. Gowin: Tang Primer 20K Dock.\" width=\"2160\" height=\"3840\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/10c\/92b\/b4d\/10c92bb4d219b2defa7adf1e56ad746b.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>Altera Terasic: DE0, DE0-CV, DE0-Nano, DE10-Lite, DE1-SoC, DE2-115, Omdazz.<br \/> Altera: RzRd, Piswords-6, Saylinx, Zeowaa, EPI-MiniCY4.<br \/> Xilinx: Digilent Basys3, Nexys4, Nexys4-DDR, Nexys A7.<br \/> Gowin: Tang Primer 20K Dock.<\/figcaption><\/div>\n<\/figure>\n<p>More details about the scripts for abstracting FPGA boards:<\/p>\n<p>We implemented a push-button synthesis and simulation platform for a set of SystemVerilog examples. The platform is written in a way that the same SV source code works with any of the supported 30 FPGA boards, 5 synthesis toolchains (Altera, Xilinx, Gowin, Lattice, Yosys) and 2 simulators (Icarus and Questa).<\/p>\n<p>No complicated setup or scripting is required on the part of the platform user. He should install the necessary toolchains to their default locations, clone the example repository, select the board, go to the example directory and run a script, such as 03_synthesize_for_fpga.bash.<\/p>\n<p>The script automatically locates the necessary EDA and board configuration software, creates the project files, runs the synthesis and configures the FPGA on the selected board. The script produces meaningful error messages, so the user does not have to dig through the log files and scripts.<\/p>\n<p>The scripts work under Linux and Windows. For Windows, we are using bash shell from Git. The scripts could be adopted for Windows Subsystem for Linux (WSL), but it was not done yet. If you attempt to run it under WSL, it will ask to run either under true Linux or under true Windows with Git bash.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f7f\/8c3\/72d\/f7f8c372dbdf348e2b6110c0bdaf3087.png\" width=\"690\" height=\"560\" data-src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/f7f\/8c3\/72d\/f7f8c372dbdf348e2b6110c0bdaf3087.png\"\/><\/figure>\n<p>More details on integration of the peripherals to make the classes more interesting: right now our examples support the following parts:<\/p>\n<ol>\n<li>\n<p>INMP441 and Pmod MIC3 microphones<\/p>\n<\/li>\n<li>\n<p>I2S audio output via Pmod AMP3 and HiLetgo PCM5102<\/p>\n<\/li>\n<li>\n<p>VGA connectors Pmod VGA and VGA666<\/p>\n<\/li>\n<li>\n<p>External I\/O module based on TM1638 chip <\/p>\n<\/li>\n<\/ol>\n<p>TODO: It is necessary to improve support for VGA by adding the parameters for RGB channel width, from 1 to 8 bits per channel.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/33c\/1a0\/310\/33c1a0310a8670f5107bc400de401492.jpg\" alt=\"INMP441 and Pmod MIC3 microphones connected to Omdazz FPGA board with Altera Cyclone IV FPGA\" title=\"INMP441 and Pmod MIC3 microphones connected to Omdazz FPGA board with Altera Cyclone IV FPGA\" width=\"2160\" height=\"3840\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/33c\/1a0\/310\/33c1a0310a8670f5107bc400de401492.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>INMP441 and Pmod MIC3 microphones connected to Omdazz FPGA board with Altera Cyclone IV FPGA<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/63c\/764\/9f3\/63c7649f3f468bc2007f10b2d2ca6f89.jpg\" alt=\"TM1638-based 7-segment \/ button \/ LED module and Pmod VGA connected to SiPEED Tang Primer 20K Doc board with Gowin FPGA\" title=\"TM1638-based 7-segment \/ button \/ LED module and Pmod VGA connected to SiPEED Tang Primer 20K Doc board with Gowin FPGA\" width=\"1684\" height=\"3564\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/63c\/764\/9f3\/63c7649f3f468bc2007f10b2d2ca6f89.jpg\" data-blurred=\"true\"\/><\/p>\n<div><figcaption>TM1638-based 7-segment \/ button \/ LED module and Pmod VGA connected to SiPEED Tang Primer 20K Doc board with Gowin FPGA<\/figcaption><\/div>\n<\/figure>\n<p>It is necessary to test and adopt the following peripherals:<\/p>\n<ol>\n<li>\n<p>HiLetgo and Adafruit I2S MEMS Microphone based on SPH0645LM4H<\/p>\n<\/li>\n<li>\n<p>I2S audio output based on CJMCU-1334 chip.<\/p>\n<\/li>\n<li>\n<p>TM1638-based external I\/O module (7-segment, buttons, LEDs) <a href=\"https:\/\/www.aliexpress.us\/item\/3256802635508991.html\" rel=\"noopener noreferrer nofollow\">with keyboard matrix.<\/a><\/p>\n<\/li>\n<li>\n<p>USB-to-UART interfaces for the examples that require communication of FPGA board with a computer.<\/p>\n<\/li>\n<li>\n<p>HDMI support<\/p>\n<\/li>\n<li>\n<p>Rotary encoder &#8212; this is a good task for an exam<\/p>\n<\/li>\n<li>\n<p>Ultrasonic Distance Sensor based on HC-SR04 &#8212; this is a good task for an exam<\/p>\n<\/li>\n<li>\n<p>Infrared receiver<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.aliexpress.us\/item\/3256802635508991.html\" rel=\"noopener noreferrer nofollow\">MAX7219-based 7-segment display<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.aliexpress.us\/item\/2251832485913909.html\" rel=\"noopener noreferrer nofollow\">Matrix keyboard &#8212; this is a good task for an exam<\/a><\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w780q1\/getpro\/habr\/upload_files\/85b\/bb8\/8dd\/85bbb88dd247b94f6ed4a9a0c403a861.jpg\" width=\"2160\" height=\"2877\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/85b\/bb8\/8dd\/85bbb88dd247b94f6ed4a9a0c403a861.jpg\" data-blurred=\"true\"\/><\/figure>\n<p>We elaborate on board-specific topics in the <a href=\"https:\/\/habr.com\/ru\/articles\/784138\/\" rel=\"noopener noreferrer nofollow\">follow-up article<\/a>.<\/p>\n<p>Note that FPGA board and periphery support is only a part of the planned activity. It is suitable for those who wants to start or explore another FPGA toolchain. But the more we move we are going to focus on microarchitectural and CPU examples, as well as making sure the code is compatible with Open Lane ASIC synthesis toolchain.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/411\/f85\/bbb\/411f85bbb3d1c930a3e79b7bc0f89e4e.png\" width=\"6930\" height=\"2438\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/411\/f85\/bbb\/411f85bbb3d1c930a3e79b7bc0f89e4e.png\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74f\/cb3\/727\/74fcb3727cbca605d97d814a04273a9f.gif\" width=\"844\" height=\"523\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/74f\/cb3\/727\/74fcb3727cbca605d97d814a04273a9f.gif\"\/><\/figure>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/r\/w1560\/getpro\/habr\/upload_files\/302\/880\/346\/30288034613d9a300c58b8036434c96e.png\" width=\"1546\" height=\"880\" data-src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/302\/880\/346\/30288034613d9a300c58b8036434c96e.png\"\/><\/figure>\n<p>The related posts about the event:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/784138\/\" rel=\"noopener noreferrer nofollow\">Why would a software engineer attend an FPGA hardware meetup at Hacker Dojo?<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/779936\/\" rel=\"noopener noreferrer nofollow\">The first Silicon Valley meetup on portable SystemVerilog examples for ASIC and FPGA<\/a><\/p>\n<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/782654\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">What topic is interesting for you the most?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">50% <\/span><span class=\"tm-article-poll__answer-label\">RTL example portability accross the boards and toolchains: Altera, Xilinx, Gowin, Lattice<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">100% <\/span><span class=\"tm-article-poll__answer-label\">Peripherals for FPGA boards, graphics and sound<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">50% <\/span><span class=\"tm-article-poll__answer-label\">Microarchitectural elements: pipelines, arbiters, flow control, FIFOs, memory architecture<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">100% <\/span><span class=\"tm-article-poll__answer-label\">CPU and GPU<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">100% <\/span><span class=\"tm-article-poll__answer-label\">Open Lane ASIC design tools<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 2 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/782654\/\"> https:\/\/habr.com\/ru\/articles\/782654\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<div><!--[--><!--]--><\/div>\n<div id=\"post-content-body\">\n<div>\n<div class=\"article-formatted-body article-formatted-body article-formatted-body_version-2\">\n<div xmlns=\"http:\/\/www.w3.org\/1999\/xhtml\">\n<figure class=\"full-width\"><\/figure>\n<p>The\u00a0<a href=\"https:\/\/www.linkedin.com\/groups\/14348665\/\" rel=\"noopener noreferrer nofollow\">team developing a set of portable SystemVerilog examples\u00a0<\/a>decided to organize the first event in Silicon Valley on Sunday, January 14 from 2PM till 5PM at\u00a0<a href=\"https:\/\/maps.app.goo.gl\/UApZ6r65jqSPX4pBA\" rel=\"noopener noreferrer nofollow\">Hacker Dojo in Mountain View, CA<\/a>. If the first event is successful we are going to make it recurrent. You can register for the event on\u00a0<a href=\"https:\/\/www.meetup.com\/hackerdojo\/events\/297949410\/\" rel=\"noopener noreferrer nofollow\">Meetup<\/a>\u00a0or\u00a0<a href=\"https:\/\/www.linkedin.com\/events\/portablesystemverilogexamplesfo7141484467780501504\/comments\/\" rel=\"noopener noreferrer nofollow\">LinkedIn<\/a>.<\/p>\n<p>The current directions of the group:<\/p>\n<p>1. Scripts for abstracting FPGA boards to develop board-independent and toolchain-independent SystemVerilog examples. This allows for teaching university courses and running educational seminars with a variety of boards available at a given place. The current state is in\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/basics-graphics-music\" rel=\"noopener noreferrer nofollow\">basics-graphics-music<\/a>\u00a0GitHub repository.<\/p>\n<p>2. Integration of the peripherals to make the classes more interesting. Adding sound generation and recognition, computer graphics and sensors, also with an abstraction level to allow the students to use different microphones and display interfaces with different numbers of color bits per pixel.<\/p>\n<p>3. The examples and homework exercises to teach the students the mechanics of Register-Transfer Level (RTL) design methodology, the basics of pipelining, flow control, and microarchitectural primitives, such as FIFOs and arbiters. The current public (without solutions) repositories include\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/systemverilog-homework\" rel=\"noopener noreferrer nofollow\">systemverilog-homework<\/a>\u00a0and\u00a0<a href=\"https:\/\/gitflic.ru\/project\/yuri-panchul\/valid-ready-etc\" rel=\"noopener noreferrer nofollow\">valid-ready-etc<\/a>\u00a0.<\/p>\n<p>4. Wrapping various RISC-V CPU cores in the board-independent platform to give the students an opportunity to compare different microarchitectures, from a simplified single-cycle implementation of a subset of RISC-V architecture &#8212; to cache-less MCU-level cores &#8212; to more complicated cores with caches, TLB MMU, superscalar execution and the ability to run Linux. The examples we have worked with so far included\u00a0<a href=\"https:\/\/github.com\/zhelnio\/schoolRISCV\" rel=\"noopener noreferrer nofollow\">schoolRISCV<\/a>\u00a0and\u00a0<a href=\"https:\/\/github.com\/yuri-panchul\/yrv-plus\" rel=\"noopener noreferrer nofollow\">yrv-plus<\/a>\u00a0.<\/p>\n<p>5. Connecting FPGA-based training to ASIC design. Making sure all the microarchitectural and CPU-based examples are synthesizable with Open Lane ASIC synthesis, demonstrating how microarchitecture decisions affect ASIC timing, exploring ASIC platforms like Efabless Caravel, etc.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>Altera Terasic: DE0, DE0-CV, DE0-Nano, DE10-Lite, DE1-SoC, DE2-115, Omdazz.<br \/> Altera: RzRd, Piswords-6, Saylinx, Zeowaa, EPI-MiniCY4.<br \/> Xilinx: Digilent Basys3, Nexys4, Nexys4-DDR, Nexys A7.<br \/> Gowin: Tang Primer 20K Dock.<\/figcaption><\/div>\n<\/figure>\n<p>More details about the scripts for abstracting FPGA boards:<\/p>\n<p>We implemented a push-button synthesis and simulation platform for a set of SystemVerilog examples. The platform is written in a way that the same SV source code works with any of the supported 30 FPGA boards, 5 synthesis toolchains (Altera, Xilinx, Gowin, Lattice, Yosys) and 2 simulators (Icarus and Questa).<\/p>\n<p>No complicated setup or scripting is required on the part of the platform user. He should install the necessary toolchains to their default locations, clone the example repository, select the board, go to the example directory and run a script, such as 03_synthesize_for_fpga.bash.<\/p>\n<p>The script automatically locates the necessary EDA and board configuration software, creates the project files, runs the synthesis and configures the FPGA on the selected board. The script produces meaningful error messages, so the user does not have to dig through the log files and scripts.<\/p>\n<p>The scripts work under Linux and Windows. For Windows, we are using bash shell from Git. The scripts could be adopted for Windows Subsystem for Linux (WSL), but it was not done yet. If you attempt to run it under WSL, it will ask to run either under true Linux or under true Windows with Git bash.<\/p>\n<figure class=\"full-width\"><\/figure>\n<p>More details on integration of the peripherals to make the classes more interesting: right now our examples support the following parts:<\/p>\n<ol>\n<li>\n<p>INMP441 and Pmod MIC3 microphones<\/p>\n<\/li>\n<li>\n<p>I2S audio output via Pmod AMP3 and HiLetgo PCM5102<\/p>\n<\/li>\n<li>\n<p>VGA connectors Pmod VGA and VGA666<\/p>\n<\/li>\n<li>\n<p>External I\/O module based on TM1638 chip <\/p>\n<\/li>\n<\/ol>\n<p>TODO: It is necessary to improve support for VGA by adding the parameters for RGB channel width, from 1 to 8 bits per channel.<\/p>\n<figure class=\"full-width\">\n<div><figcaption>INMP441 and Pmod MIC3 microphones connected to Omdazz FPGA board with Altera Cyclone IV FPGA<\/figcaption><\/div>\n<\/figure>\n<figure class=\"full-width\">\n<div><figcaption>TM1638-based 7-segment \/ button \/ LED module and Pmod VGA connected to SiPEED Tang Primer 20K Doc board with Gowin FPGA<\/figcaption><\/div>\n<\/figure>\n<p>It is necessary to test and adopt the following peripherals:<\/p>\n<ol>\n<li>\n<p>HiLetgo and Adafruit I2S MEMS Microphone based on SPH0645LM4H<\/p>\n<\/li>\n<li>\n<p>I2S audio output based on CJMCU-1334 chip.<\/p>\n<\/li>\n<li>\n<p>TM1638-based external I\/O module (7-segment, buttons, LEDs) <a href=\"https:\/\/www.aliexpress.us\/item\/3256802635508991.html\" rel=\"noopener noreferrer nofollow\">with keyboard matrix.<\/a><\/p>\n<\/li>\n<li>\n<p>USB-to-UART interfaces for the examples that require communication of FPGA board with a computer.<\/p>\n<\/li>\n<li>\n<p>HDMI support<\/p>\n<\/li>\n<li>\n<p>Rotary encoder &#8212; this is a good task for an exam<\/p>\n<\/li>\n<li>\n<p>Ultrasonic Distance Sensor based on HC-SR04 &#8212; this is a good task for an exam<\/p>\n<\/li>\n<li>\n<p>Infrared receiver<\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.aliexpress.us\/item\/3256802635508991.html\" rel=\"noopener noreferrer nofollow\">MAX7219-based 7-segment display<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/www.aliexpress.us\/item\/2251832485913909.html\" rel=\"noopener noreferrer nofollow\">Matrix keyboard &#8212; this is a good task for an exam<\/a><\/p>\n<\/li>\n<\/ol>\n<figure class=\"full-width\"><\/figure>\n<p>We elaborate on board-specific topics in the <a href=\"https:\/\/habr.com\/ru\/articles\/784138\/\" rel=\"noopener noreferrer nofollow\">follow-up article<\/a>.<\/p>\n<p>Note that FPGA board and periphery support is only a part of the planned activity. It is suitable for those who wants to start or explore another FPGA toolchain. But the more we move we are going to focus on microarchitectural and CPU examples, as well as making sure the code is compatible with Open Lane ASIC synthesis toolchain.<\/p>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\"><\/figure>\n<figure class=\"full-width\"><\/figure>\n<p>The related posts about the event:<\/p>\n<ul>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/784138\/\" rel=\"noopener noreferrer nofollow\">Why would a software engineer attend an FPGA hardware meetup at Hacker Dojo?<\/a><\/p>\n<\/li>\n<li>\n<p><a href=\"https:\/\/habr.com\/ru\/articles\/779936\/\" rel=\"noopener noreferrer nofollow\">The first Silicon Valley meetup on portable SystemVerilog examples for ASIC and FPGA<\/a><\/p>\n<\/p>\n<\/li>\n<\/ul>\n<\/div>\n<\/div>\n<\/div>\n<p><!----><!----><\/div>\n<p><!----><\/p>\n<div class=\"tm-article-poll-container\"><!--[--><\/p>\n<div class=\"tm-article-poll tm-article-poll_variant-bordered\">\n<div class=\"tm-notice tm-notice_positive tm-article-poll__notice\"><!----><\/p>\n<div class=\"tm-notice__inner\"><!----><\/p>\n<div class=\"tm-notice__content\" data-test-id=\"notice-content\"><!--[--><span>\u0422\u043e\u043b\u044c\u043a\u043e \u0437\u0430\u0440\u0435\u0433\u0438\u0441\u0442\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 \u043c\u043e\u0433\u0443\u0442 \u0443\u0447\u0430\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u0432 \u043e\u043f\u0440\u043e\u0441\u0435. <a rel=\"nofollow\" href=\"\/kek\/v1\/auth\/habrahabr\/?back=\/ru\/articles\/782654\/&#038;hl=ru\">\u0412\u043e\u0439\u0434\u0438\u0442\u0435<\/a>, \u043f\u043e\u0436\u0430\u043b\u0443\u0439\u0441\u0442\u0430.<\/span><!--]--><\/div>\n<\/div>\n<\/div>\n<p><!--[--><\/p>\n<div class=\"tm-article-poll__header\">What topic is interesting for you the most?<\/div>\n<div class=\"tm-article-poll__answers\"><!--[--><\/p>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">50% <\/span><span class=\"tm-article-poll__answer-label\">RTL example portability accross the boards and toolchains: Altera, Xilinx, Gowin, Lattice<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">100% <\/span><span class=\"tm-article-poll__answer-label\">Peripherals for FPGA boards, graphics and sound<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">50% <\/span><span class=\"tm-article-poll__answer-label\">Microarchitectural elements: pipelines, arbiters, flow control, FIFOs, memory architecture<\/span><span class=\"tm-article-poll__answer-votes\">1<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 50%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent\">100% <\/span><span class=\"tm-article-poll__answer-label\">CPU and GPU<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<div class=\"tm-article-poll__answer\">\n<div class=\"tm-article-poll__answer-data\"><span class=\"tm-article-poll__answer-percent tm-article-poll__answer-percent_winning\">100% <\/span><span class=\"tm-article-poll__answer-label\">Open Lane ASIC design tools<\/span><span class=\"tm-article-poll__answer-votes\">2<\/span><\/div>\n<div class=\"tm-article-poll__answer-bar\">\n<div class=\"tm-article-poll__answer-progress tm-article-poll__answer-progress_winning\" style=\"width: 100%\"><\/div>\n<\/div>\n<\/div>\n<p><!--]--><\/div>\n<div class=\"tm-article-poll__stats\"> \u041f\u0440\u043e\u0433\u043e\u043b\u043e\u0441\u043e\u0432\u0430\u043b\u0438 2 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f.    \u0412\u043e\u0437\u0434\u0435\u0440\u0436\u0430\u0432\u0448\u0438\u0445\u0441\u044f \u043d\u0435\u0442. <\/div>\n<p><!--]--><\/div>\n<p><!--]--><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/articles\/782654\/\"> https:\/\/habr.com\/ru\/articles\/782654\/<\/a><br \/><\/br><\/br><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-363793","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/363793","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=363793"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/363793\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=363793"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=363793"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=363793"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}