{"id":16570,"date":"2016-09-09T10:00:39","date_gmt":"2016-09-09T17:00:39","guid":{"rendered":"https:\/\/blog.digilentinc.com\/?p=16570"},"modified":"2016-09-09T13:33:50","modified_gmt":"2016-09-09T20:33:50","slug":"a-first-timers-experience-with-fpga","status":"publish","type":"post","link":"https:\/\/digilent.com\/blog\/a-first-timers-experience-with-fpga\/","title":{"rendered":"A First Time Experience With FPGA"},"content":{"rendered":"<p>Hello and welcome back to the Digilent Blog!<\/p>\n<p>I recently had a rare moment of free time and decided that I was out of excuses and that it was time to take the plunge into the world of FPGAs. The main reason (well, excuse) that I was avoiding them was that I kept telling myself that I did not know how to use Vivado, nor did I have any familiarity with writing in a hardware description language (HDL). Perhaps some of you may also be avoiding\u00a0working with FPGAs for similar reasons. Unfortunately, these\u00a0are rather flimsy excuses\u00a0considering that at one point I didn&#8217;t know how to use a microcontrollers programming environment or C++, that is, until I took the time to learn it.<\/p>\n<p>Similarly,\u00a0I know I could learn to cook if I took the time to practice cooking in the kitchen and learning the various intricacies that are involved\u00a0(presuming my wife allowed me to experiment in the kitchen). On top of that, I work at Digilent which is renowned for making FPGA development boards, so there are countless learning materials and far more experienced FPGA users that I can talk to if I run into problems. Basically, I had no further excuses to not learn how to use the <a href=\"https:\/\/digilent.com\/shop\/arty-board-artix-7-fpga-development-board-for-makers-and-hobbyists\/\" target=\"_blank\">Arty<\/a> board that was sitting on my desk.<\/p>\n<p>Okay, so maybe my desk isn&#8217;t quite that cool.<\/p>\n<p>Let&#8217;s go ahead and get started!<\/p>\n<p>Naturally, before we can use <a href=\"http:\/\/www.xilinx.com\/products\/design-tools\/vivado.html\" target=\"_blank\">Vivado<\/a> and program the FPGA (whether it is a\u00a0<a href=\"https:\/\/digilent.com\/shop\/cmod-a7-breadboardable-artix-7-fpga-module\/\" target=\"_blank\">Cmod A7<\/a>, a <a href=\"https:\/\/digilent.com\/shop\/basys-3-artix-7-fpga-trainer-board-recommended-for-introductory-users\/\" target=\"_blank\">Basys 3<\/a>, or a <a href=\"https:\/\/digilent.com\/shop\/nexys-video-artix-7-fpga-trainer-board-for-multimedia-applications\/\" target=\"_blank\">Nexys Video<\/a>), we need to install Vivado first. I had heard that the installation process for Vivado doesn&#8217;t always go smoothly for everybody, so I followed the <a href=\"https:\/\/digilent.com\/reference\/learn\/software\/tutorials\/vivado-install-guide\/start\" target=\"_blank\">Installing Vivado<\/a> guide available on Digilent&#8217;s reference site and installed Vivado 15.3. Some of you may notice that this is not the most recent edition of Vivado that is currently available; that&#8217;s because I have previously attempted to learn how to use FPGAs when version 15.3 was the most recent edition, but never got any farther than installing Vivado itself. Once Vivado was installed, I double-clicked on the Vivado symbol and encountered a friendly opening screen.<\/p>\n<figure id=\"attachment_16576\" aria-describedby=\"caption-attachment-16576\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16576 size-full\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen.png\" alt=\"The opening Vivado screen.\" width=\"1920\" height=\"1032\" data-wp-pid=\"16576\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen.png 1920w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen-600x323.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen-768x413.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen-1024x550.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/First-Vivado-screen-800x430.png 800w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption id=\"caption-attachment-16576\" class=\"wp-caption-text\">The opening Vivado screen.<\/figcaption><\/figure>\n<p>Encouraged that Vivado seemed to start right up, I went ahead and clicked on the &#8220;Create New Project&#8221; button since that seemed like the most reasonable thing to do and clicked &#8220;Next&#8221; on the introductory page for the new project wizard that popped up and then chose a location for where to store my &#8220;project_1&#8221; &#8230; so far so good, maybe I was worrying about learning Vivado for nothing. Then I encountered the next screen:<\/p>\n<figure id=\"attachment_16599\" aria-describedby=\"caption-attachment-16599\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-16599\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type.png\" alt=\"Choose which project type you plan to use...um...well....\" width=\"1920\" height=\"1032\" data-wp-pid=\"16599\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type.png 1920w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type-600x323.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type-768x413.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type-1024x550.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Choosing-a-project-type-800x430.png 800w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption id=\"caption-attachment-16599\" class=\"wp-caption-text\">Choose which project type you plan to use&#8230; um&#8230; well&#8230;.<\/figcaption><\/figure>\n<p>After taking several moments to recover from the fact that I didn&#8217;t have any idea sort of project I was going to be doing nor what any of the project names and descriptions meant, I figured that I should try out the default option that was chosen for me. I then essentially skipped the next three steps since I didn&#8217;t know what kind of sources or IP or constraints I would need and then found that I need to inform Vivado\u00a0which board I was using for my project. Not seeing anything listed under the boards tab, I went to the <a href=\"https:\/\/digilent.com\/reference\/programmable-logic\/arty\/reference-manual\" target=\"_blank\">Arty Reference Manual<\/a>, found the part that it used (a xc7a35tisg324-1L), selected\u00a0it on the parts list in Vivado, and clicked the &#8220;Finish&#8221; button on the wizard to arrive at the main Vivado page.<\/p>\n<figure id=\"attachment_16578\" aria-describedby=\"caption-attachment-16578\" style=\"width: 1920px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-16578 size-full\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page.png\" alt=\"The main page inside of Vivado.\" width=\"1920\" height=\"1032\" data-wp-pid=\"16578\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page.png 1920w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page-600x323.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page-768x413.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page-1024x550.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Main-Vivado-page-800x430.png 800w\" sizes=\"auto, (max-width: 1920px) 100vw, 1920px\" \/><figcaption id=\"caption-attachment-16578\" class=\"wp-caption-text\">The main page inside of Vivado.<\/figcaption><\/figure>\n<p>At this point, I was forced to admit that I was not necessarily able to figure out what I would need to do to program the FPGA by myself and needed some outside resources in order to continue on with my endeavor. As you can imagine, I was feeling pretty overwhelmed at this point since I had multiple points in the process in which\u00a0I did not know what I needed to do, rather than just a single situation where I was at loss. I needed to find a classic Hello, World or blink an LED tutorial that walked me through the basics.<\/p>\n<p>Luckily, I was able to find a <a href=\"https:\/\/digilent.com\/reference\/vivado\/getting_started\/start\" target=\"_blank\">Getting Started with Vivado guide<\/a> on the Digilent\u00a0Reference Site that walked me through how to properly set up a blinking\u00a0LED project\u00a0inside of Vivado, and\u00a0more importantly explained\u00a0what each portion of the process does and the various options available to us within Vivado.<\/p>\n<figure id=\"attachment_16600\" aria-describedby=\"caption-attachment-16600\" style=\"width: 1192px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-16600\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample.png\" alt=\"A screenshot showing part of the Getting Started with Vivado guide.\" width=\"1192\" height=\"848\" data-wp-pid=\"16600\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample.png 1192w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample-600x427.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample-768x546.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample-1024x728.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Getting-Started-with-Vivado-sample-800x569.png 800w\" sizes=\"auto, (max-width: 1192px) 100vw, 1192px\" \/><figcaption id=\"caption-attachment-16600\" class=\"wp-caption-text\">A screenshot showing a sample\u00a0of the <em>Getting Started with Vivado<\/em> guide.<\/figcaption><\/figure>\n<p>With this, I was able to gain enough confidence to go ahead and try out the <a href=\"https:\/\/learn.blog.digilentinc.com\/list?category=Digital\" target=\"_blank\">Learn Modules on Digital Logic<\/a>\u00a0that are available on the Digilent <a href=\"https:\/\/learn.blog.digilentinc.com\/\" target=\"_blank\">Learn site<\/a>. All of the modules available are designed for Xilinx&#8217;s ISE rather than Vivado, but all of the Verilog HDL that is presented is still viable to programming the FPGA.<\/p>\n<p>And so far it&#8217;s been going great! I&#8217;ve completed multiple projects that are available on the Learn site and am very confident in my ability to set up some logic circuits to run the embedded (or external) LEDs or other simple I\/O devices in whatever combination I need. I definitely still have a long way to go in my learning process, but I encourage people to take a few hours to try it out; it&#8217;s pretty satisfying to get a simple, but complex looking project working.<\/p>\n<figure id=\"attachment_16582\" aria-describedby=\"caption-attachment-16582\" style=\"width: 2560px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-16582\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project.jpg\" alt=\"LED, switch, and button I\/O project on the Arty.\" width=\"2560\" height=\"1440\" data-wp-pid=\"16582\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project.jpg 2560w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project-600x338.jpg 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project-768x432.jpg 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project-1024x576.jpg 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project-800x450.jpg 800w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project-1200x675-cropped.jpg 1200w\" sizes=\"auto, (max-width: 2560px) 100vw, 2560px\" \/><figcaption id=\"caption-attachment-16582\" class=\"wp-caption-text\">LED, switch, and button I\/O project on the Arty.<\/figcaption><\/figure>\n<p>I&#8217;m looking forward into diving into some other essential parts of the FPGA world (clocks here I come!) when I get the chance and sharing what I find, as well as starting some new projects with these powerful boards!<\/p>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style6 like-16570 jlk' data-task='like' data-post_id='16570' data-nonce='e18fa772db' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Like' \/><span class='lc-16570 lc'>0<\/span><\/a><\/div><div class='action-unlike'><a class='unlbg-style6 unlike-16570 jlk' data-task='unlike' data-post_id='16570' data-nonce='e18fa772db' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Unlike' \/><span class='unlc-16570 unlc'>0<\/span><\/a><\/div><\/div> <div class='status-16570 status align-left'>Be the 1st to vote.<\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>James takes the plunge into the world of FPGA!<\/p>\n","protected":false},"author":17,"featured_media":16582,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[35],"tags":[],"ppma_author":[4469],"class_list":["post-16570","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-fpga"],"jetpack_featured_media_url":"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2016\/09\/Arty-IO-Project.jpg","authors":[{"term_id":4469,"user_id":17,"is_guest":0,"slug":"jamescolvin","display_name":"James Colvin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/509febded809c5de0423909f6ae6587f?s=96&d=mm&r=g","author_category":"","user_url":"","last_name":"Colvin","last_name_2":"","first_name":"James","first_name_2":"","job_title":"Applications Engineer \/ Technical Support Engineer \/ Product Support Engineer \/ Technical Writer \/ the person to bother about T&M and JTAG when the senior design engineer is busy","description":"A local Digilent employee who is sometimes tricked into making other content besides documentation and supporting customers on the Digilent Forum, but then I get to write a little more informally so that's a plus. \r\n\r\nA sassy engineer, lover of puns and dad jokes, father and husband. \r\n\r\nI know both way too much and simultaneously almost nothing about a number of nerdy topics. If you want to hear me rant, ask me what data rate USB C operates at."}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/16570","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/users\/17"}],"replies":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/comments?post=16570"}],"version-history":[{"count":0,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/16570\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media\/16582"}],"wp:attachment":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media?parent=16570"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/categories?post=16570"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/tags?post=16570"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=16570"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}