{"id":19267,"date":"2017-02-22T10:01:06","date_gmt":"2017-02-22T18:01:06","guid":{"rendered":"https:\/\/blog.digilentinc.com\/?p=19267"},"modified":"2025-05-30T08:54:04","modified_gmt":"2025-05-30T15:54:04","slug":"creating-and-programming-our-first-fpga-project-part-1-getting-the-extra-files-ready","status":"publish","type":"post","link":"https:\/\/digilent.com\/blog\/creating-and-programming-our-first-fpga-project-part-1-getting-the-extra-files-ready\/","title":{"rendered":"Creating and Programming our First FPGA Project Part 1 &#8211; Getting the Extra Files Ready"},"content":{"rendered":"<p>Welcome back to the Digilent blog!<\/p>\n<p>So you&#8217;ve heard about FPGAs and learned that you need to download Vivado, so you found a great guide on how to install Vivado, booted it up, and &#8230; now what? If this sounds more familiar than you would like to admit, then you&#8217;ve come to the right place. We&#8217;re going to walk though a series of posts over the next few days to help you get up and running with a new Vivado project including: getting any extra files you need ready to go (the post you&#8217;re reading right now!), initially setting up a Verilog project in Vivado, making changes to our Verilog project and XDC file to have it work on our FPGA, and finally generating the bitstream that we will use to program our FPGA. Let&#8217;s get started!<\/p>\n<p>While it would be nice to think that we can simply just write up an FPGA program and configure our board with it and then move on to the next program, <a href=\"https:\/\/www.youtube.com\/watch?v=gUsHwi4M4xE\" target=\"_blank\" rel=\"noopener noreferrer\">FPGAs are complex enough<\/a> that it is a good idea to add in some pre-made board files to help smooth out the programming process. I will be using <a href=\"https:\/\/digilent.com\/shop\/arty-artix-7-fpga-development-board-for-makers-and-hobbyists\/\" target=\"_blank\" rel=\"noopener noreferrer\">Digilent&#8217;s Arty<\/a>\u00a0throughout the duration of this tutorial series and Verilog as my FPGA programming language of choice as well as the 2016.4 WebPACK edition of Xilinx&#8217;s Vivado Design Suite.<\/p>\n<figure id=\"attachment_19292\" aria-describedby=\"caption-attachment-19292\" style=\"width: 1000px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-19292\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty.png\" alt=\"\" width=\"1000\" height=\"863\" data-wp-pid=\"19292\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty.png 1000w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty-600x518.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty-768x663.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty-110x96.png 110w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Digilents-Arty-800x690.png 800w\" sizes=\"auto, (max-width: 1000px) 100vw, 1000px\" \/><figcaption id=\"caption-attachment-19292\" class=\"wp-caption-text\">Digilent&#8217;s Arty<\/figcaption><\/figure>\n<p>The two files we will be looking for is the Arty XDC (Xilinx Design constraints) file and the Arty board file. The XDC file is used by Vivado to associate the names of the inputs and outputs we &#8220;create&#8221; in our Verilog code to actual pins on the FPGA chip. The board file is used to group different sets of pins on the FPGA together so that they can be readily used when configuring various IP blocks; we won&#8217;t be using any IP blocks in this tutorial, but it&#8217;s nice to already have the board file installed for the future (and makes it much easier to tell Vivado which FPGA we are working with when we are initially creating a project).<\/p>\n<p>To get the Arty board file, go ahead and download the Digilent board files from the Digilent GitHub account (at the\u00a0<a href=\"https:\/\/github.com\/Digilent\/vivado-boards\/archive\/master.zip\" target=\"_blank\" rel=\"noopener noreferrer\">direct download link<\/a>\u00a0or view the board files natively in GitHub <a href=\"https:\/\/github.com\/Digilent\/vivado-boards\/tree\/master\/new\/board_files\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>). Within the board files .zip folder, you&#8217;ll want to extract the &#8220;Arty&#8221; folder (and everything inside it) to the board_files folder that is inside of the Xilinx directory which you already have installed. On a Windows system, the default location for this board_files folder is <span style=\"color: darkorchid;\"><tt>C:\\Xilinx\\Vivado\\2016.4\\data\\boards\\board_files<\/tt><\/span>; copy the whole &#8220;Arty&#8221; folder structure into this folder.<\/p>\n<figure id=\"attachment_19294\" aria-describedby=\"caption-attachment-19294\" style=\"width: 1566px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-19294\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files.png\" alt=\"\" width=\"1566\" height=\"925\" data-wp-pid=\"19294\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files.png 1566w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files-600x354.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files-768x454.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files-1024x605.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Download-the-Digilent-board-files-800x473.png 800w\" sizes=\"auto, (max-width: 1566px) 100vw, 1566px\" \/><figcaption id=\"caption-attachment-19294\" class=\"wp-caption-text\">Download the Digilent board files from the Digilent GitHub<\/figcaption><\/figure>\n<p>Next, we&#8217;ll want to get the XDC file for the Arty so that way we can inform Vivado what physical pins we wish to use with our project. A master XDC file for the Arty (and all of <a href=\"https:\/\/digilent.com\/shop\/fpga-programmable-logic\/system-boards\/\" target=\"_blank\" rel=\"noopener noreferrer\">Digilent&#8217;s FPGA boards<\/a>) can be found in\u00a0their respective Resource Centers on our Wiki. The Arty Resource Center is <a href=\"https:\/\/digilent.com\/reference\/programmable-logic\/arty\/start\" target=\"_blank\" rel=\"noopener noreferrer\">here<\/a>, with the Master XDC file available in the box on the right hand side of the screen underneath &#8220;Design Resources&#8221;. Once you have downloaded the Master XDC file, save it somewhere to your computer where you can easily find it again since we&#8217;ll need to be able to tell Vivado where to find the file when we create our project.<\/p>\n<figure id=\"attachment_19291\" aria-describedby=\"caption-attachment-19291\" style=\"width: 1619px\" class=\"wp-caption aligncenter\"><img loading=\"lazy\" decoding=\"async\" class=\"size-full wp-image-19291\" src=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location.png\" alt=\"\" width=\"1619\" height=\"988\" data-wp-pid=\"19291\" srcset=\"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location.png 1619w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location-600x366.png 600w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location-768x469.png 768w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location-1024x625.png 1024w, https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/Arty-Master-XDC-location-800x488.png 800w\" sizes=\"auto, (max-width: 1619px) 100vw, 1619px\" \/><figcaption id=\"caption-attachment-19291\" class=\"wp-caption-text\">Where you can find the Master XDC file on a Digilent FPGA Resource Center<\/figcaption><\/figure>\n<p>This should be enough to get you started, and stay tuned for the <a href=\"https:\/\/digilent.com\/blog\/creating-and-programming-our-first-fpga-project-part-2-initial-project-creation\/\" target=\"_blank\" rel=\"noopener noreferrer\">next post<\/a> in this tutorial series! Additionally check out <a href=\"https:\/\/digilent.com\/reference\/learn\/software\/tutorials\/verilog-project-2\/start\" target=\"_blank\" rel=\"noopener noreferrer\">our Wiki<\/a>\u00a0for more resources on this project.<\/p>\n<p><strong>Read the rest of the series through the links below:<br \/>\n<\/strong><a href=\"https:\/\/digilent.com\/blog\/creating-and-programming-our-first-fpga-project-part-2-initial-project-creation\/\">Creating and Programming our First FPGA Project Part 2: Initial Project Creation<\/a><br \/>\n<a href=\"https:\/\/digilent.com\/blog\/creating-and-programming-our-first-fpga-project-part-3-modifying-the-project\/\">Creating and Programming our First FPGA Project Part 3: Modifying the Project<\/a><br \/>\n<a href=\"https:\/\/digilent.com\/blog\/creating-and-programming-our-first-fpga-project-part-4\/\">Creating and Programming our First FPGA Project Part 4: Final Steps<\/a><\/p>\n<div class='watch-action'><div class='watch-position align-left'><div class='action-like'><a class='lbg-style6 like-19267 jlk' data-task='like' data-post_id='19267' data-nonce='1cb2a57891' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Like' \/><span class='lc-19267 lc'>0<\/span><\/a><\/div><div class='action-unlike'><a class='unlbg-style6 unlike-19267 jlk' data-task='unlike' data-post_id='19267' data-nonce='1cb2a57891' rel='nofollow'><img src='https:\/\/digilent.com\/blog\/wp-content\/plugins\/wti-like-post-pro\/images\/pixel.gif' title='Unlike' \/><span class='unlc-19267 unlc'>0<\/span><\/a><\/div><\/div> <div class='status-19267 status align-left'>Be the 1st to vote.<\/div><\/div><div class='wti-clear'><\/div>","protected":false},"excerpt":{"rendered":"<p>James helps new users set up their first FPGA project!<\/p>\n","protected":false},"author":17,"featured_media":19321,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[4327,35],"tags":[453],"ppma_author":[4469],"class_list":["post-19267","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-projects","category-fpga","tag-vivado"],"jetpack_featured_media_url":"https:\/\/digilent.com\/blog\/wp-content\/uploads\/2017\/02\/FPGAs-have-a-lot-going-on-with-them.png","authors":[{"term_id":4469,"user_id":17,"is_guest":0,"slug":"jamescolvin","display_name":"James Colvin","avatar_url":"https:\/\/secure.gravatar.com\/avatar\/8aa85f7d11711acc7e571e1ed26c901b614a7064a2e15e522f54d9f26792ea9e?s=96&d=mm&r=g","1":"","2":"","3":"","4":"","5":"","6":"","7":"","8":"","9":"","10":""}],"post_mailing_queue_ids":[],"_links":{"self":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/19267","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=19267"}],"version-history":[{"count":1,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/19267\/revisions"}],"predecessor-version":[{"id":31555,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/posts\/19267\/revisions\/31555"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media\/19321"}],"wp:attachment":[{"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/media?parent=19267"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/categories?post=19267"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/tags?post=19267"},{"taxonomy":"author","embeddable":true,"href":"https:\/\/digilent.com\/blog\/wp-json\/wp\/v2\/ppma_author?post=19267"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}