×

在Vivado 2020.2中开始使用Arty Z7

消耗积分:0 | 格式:zip | 大小:0.80 MB | 2022-12-06

王萍

分享资料个

描述

在这个项目中,我将介绍在 Vivado 中为 Vivado 版本 2020.2 中的 Digilent 的 Arty Z7 FPGA 开发板设置基本硬件设计的步骤。此硬件设计是我在此处找到的 PetaLinux 2020.2 教程的起点

安装板定义文件

由于 Arty Z7 上的 FPGA 有一套硬件,它总是连接到开发板上,Digilent(以及许多其他设计/销售基于 Xilinx 的 FPGA 开发板的公司)为那些静态的提供板预设文件用户可以在其 Vivado 安装中安装的配置。这使用户不必花时间配置硬件设计的那一部分,而直接跳到他们设计的自定义部分。

在此处下载所有 Digilent FPGA 开发板的板预设文件解压缩文件夹并将/new/board_files文件夹的内容复制到//data/boards/board_files中。如果复制文件时 Vivado 正在运行,则需要重新启动它才能看到新添加的威廉希尔官方网站 板预设文件。

pYYBAGNsRZ2AUQZHAAByf-CZTnM929.png
 

创建新的 Vivado 项目

启动 Vivado 并选择创建新项目的选项。在弹出的前几个窗口中为其指定所需的名称并指定所需的文件路径。其中一个窗口将询问正在创建的项目类型。这是一个正在创建的基本 RTL 项目,它不是可扩展的 Vitis 平台,这意味着它不是针对加速应用程序和专用组件(例如它们所需的特定内核)的项目。因此,不要选中Project is an extensible Vitis platform框。除非您已经准备好将 RTL 文件(Verilog 或 VHDL 文件)导入到项目中,否则请选中“此时不要指定源”框

poYBAGNsRaCAHcr7AABBldn7Hc4492.png
 

为了使该项目中安装在上一步中 Vivado 中的 Arty Z7 板的板预设文件可访问,请切换到Default Part窗口中的Boards选项卡并搜索关键字Arty 我正在使用 Arty 板的 Arty Z7-20 版本,但请务必选择您正在使用的相应 Arty 型号。

poYBAGNsRaKACab2AABCV6h5lRE781.png
 

创建块设计

生成新项目后,第一步是创建新的块设计。从 Vivado 窗口左侧的 Flow Navigator 窗口中选择Create Block Design选项。

空白块设计生成后,单击中间的 + 符号,然后在出现的窗口的搜索栏中键入zynq 。双击弹出的ZYNQ7 处理系统选项,添加挂钩以访问在 FPGA 的可编程逻辑中物理实例化的 Zynq ARM 处理器。

poYBAGOIMRKAOk4UAABYwf59C8k693.png
 

一旦 Zynq 处理系统 IP 模块出现在模块设计中,顶部将出现一个横幅,其中包含 Run Block Automation 选项。单击此链接,将出现一个窗口,指定运行块自动化将执行的操作。在这种情况下,它从第一步中安装在 Vivado 中的威廉希尔官方网站 板预设文件中应用 Arty Z7-20 的威廉希尔官方网站 板预设。单击确定,然后等待块自动化完成。

poYBAGOIMRSAOZb7AABGiFRKEoI484.png
 

Zynq 处理系统的模块自动化完成后,可以使用图表左上角窗口中的Board选项卡将 Arty 板外设快速添加到模块设计中(如下所示,窗口中的其他选项卡位于设计信号)。

右键单击要添加到模块设计的每个所需外围设备,然后选择自动连接连接板组件... (允许特定的 IP 选择来连接外围设备而不是自动连接选项)。

poYBAGOIMReAb8w1AAKHpn7-HfE289.png
 

请注意,并非所有外设都可以添加到单个模块设计中,因为其中一些外设需要访问 FPGA 上的相同封装引脚,并且如果没有某种添加了多路复用威廉希尔官方网站 (RTL)。

作为一个基本的起点,我添加了系统时钟、4 个 LED (LD0 - LD3)、2 个开关 (SW0 - SW1)、4 个按钮 (BTN0 - BTN3)、2 个 RGB LED (LD4 - LD5),所有 Arduino屏蔽引脚 (0 - 41) 和 SPI 连接器 (J6)。选择运行出现的所有连接自动化的选项,并在出现的窗口中为每个选项保留默认选择,详细说明运行连接自动化将执行的操作。

连接所有内容后,使用位于图表顶部工具栏上的圆形箭头按钮重新生成布局(也就是使块设计看起来漂亮且有条理)。之后,验证设计以验证没有严重警告或错误(现在可以忽略常规级别的警告)。单击位于图表顶部工具栏上的带有复选标记的框的图标以运行验证。

 
 
 
poYBAGOIMRuAU12oAAHhyIi3FlY222.png
 
1 / 3重新生成布局。
 

成功验证后保存并关闭块设计。

 
 
 
pYYBAGOIMR2AYlS6AAA87kekfwY954.png
 
1 / 2保存块设计。
 

创建 HDL 包装器

返回到Board选项卡所在的同一个小窗口中的Sources选项卡,您会在顶部看到块设计文件。右键单击它并选择选项Create HDL Wrapper...这将创建将块设计实例化到项目中的顶级 Verilog 文件。

选择该选项以允许 Vivado 管理包装器并自动对其进行更新。

 
 
 
pYYBAGOIMR-AJpOrAAA94w-ay5E606.png
 
1 / 2
 

允许 Vivado 生成 HDL 包装器并等待更新...文本从Sources选项卡的右上角消失。

poYBAGOIMSOAE65_AARbJPpknLE845.png
 

运行综合、实现和生成比特流

至此,设计已完成,可以进行综合、布局和布线,并为其生成比特流。Synthesis 必须首先运行,因此Flow Navigator窗口中选择Run Synthesis或按 F6。

pYYBAGOIMSWAODLdAABeelhw5pI395.png
 

将出现一个窗口,指示即将启动哪些综合运行,在这种情况下,只有一个综合要运行,因此将选项设置为默认值并单击 OK。成功完成后,将出现一个对话框,询问下一步要采取的操作。选择Run Implementation选项对设计进行布局和布线,然后单击 OK。将出现另一个窗口,指示即将启动哪些实现运行,再次将选项设置为默认值,然后单击确定。

 
 
 
pYYBAGOIMSeAJyPoAAAgyNRV7O0576.png
 
1 / 2
 

实施成功完成后,将出现另一个对话框,询问下一步要采取的操作。选择生成比特流的选项,然后单击确定。再次,将选项设置为默认值,然后在随后出现的窗口中单击“确定”,指示将要启动哪些运行以生成比特流。

 
 
 
pYYBAGOIMSqAf8wGAAAXYikSHCQ005.png
 
1 / 3
 

成功生成比特流后,选择打开已实现设计的选项并查看 Arty Z7 的 FPGA 设计的最终结果。Package选项卡概述哪些信号连接到哪些封装引脚,Device选项卡将显示 Block Design 中创建的设计使用了多少可编程逻辑。

 
 
 
poYBAGOIMTSALznmAAUvIdsIM8w041.png
 
1 / 3
 

出口硬件

为了在 Vitis 创建的嵌入式应用程序中使用此硬件设计,或作为使用 PetaLinux 创建的嵌入式 Linux 映像的基础,需要将其打包并从 Vivado 中导出。

单击Vivado 主窗口左上角的文件选项卡,然后选择导出>导出硬件...

 
 
 
pYYBAGOIMTaAPogqAACIZjNYBQc553.png
 
1 / 4
 

选择选项以在导出的硬件平台中包含比特流并指定所需的输出文件路径。我个人喜欢为各自的 Vivado 项目使用主项目文件夹。弹出窗口中的最后一个屏幕将汇总您的选择​​以供验证。单击完成以将硬件导出为 Xilinx 文件类型.XSA


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

评论(0)
发评论

下载排行榜

全部0条评论

快来发表一下你的评论吧 !

'+ '

'+ '

'+ ''+ '
'+ ''+ ''+ '
'+ ''+ '' ); $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code ==5){ $(pop_this).attr('href',"/login/index.html"); return false } if(data.code == 2){ //跳转到VIP升级页面 window.location.href="//m.obk20.com/vip/index?aid=" + webid return false } //是会员 if (data.code > 0) { $('body').append(htmlSetNormalDownload); var getWidth=$("#poplayer").width(); $("#poplayer").css("margin-left","-"+getWidth/2+"px"); $('#tips').html(data.msg) $('.download_confirm').click(function(){ $('#dialog').remove(); }) } else { var down_url = $('#vipdownload').attr('data-url'); isBindAnalysisForm(pop_this, down_url, 1) } }); }); //是否开通VIP $.get('/article/vipdownload/aid/'+webid,function(data){ if(data.code == 2 || data.code ==5){ //跳转到VIP升级页面 $('#vipdownload>span').text("开通VIP 免费下载") return false }else{ // 待续费 if(data.code == 3) { vipExpiredInfo.ifVipExpired = true vipExpiredInfo.vipExpiredDate = data.data.endoftime } $('#vipdownload .icon-vip-tips').remove() $('#vipdownload>span').text("VIP免积分下载") } }); }).on("click",".download_cancel",function(){ $('#dialog').remove(); }) var setWeixinShare={};//定义默认的微信分享信息,页面如果要自定义分享,直接更改此变量即可 if(window.navigator.userAgent.toLowerCase().match(/MicroMessenger/i) == 'micromessenger'){ var d={ title:'在Vivado 2020.2中开始使用Arty Z7',//标题 desc:$('[name=description]').attr("content"), //描述 imgUrl:'https://'+location.host+'/static/images/ele-logo.png',// 分享图标,默认是logo link:'',//链接 type:'',// 分享类型,music、video或link,不填默认为link dataUrl:'',//如果type是music或video,则要提供数据链接,默认为空 success:'', // 用户确认分享后执行的回调函数 cancel:''// 用户取消分享后执行的回调函数 } setWeixinShare=$.extend(d,setWeixinShare); $.ajax({ url:"//www.obk20.com/app/wechat/index.php?s=Home/ShareConfig/index", data:"share_url="+encodeURIComponent(location.href)+"&format=jsonp&domain=m", type:'get', dataType:'jsonp', success:function(res){ if(res.status!="successed"){ return false; } $.getScript('https://res.wx.qq.com/open/js/jweixin-1.0.0.js',function(result,status){ if(status!="success"){ return false; } var getWxCfg=res.data; wx.config({ //debug: true, // 开启调试模式,调用的所有api的返回值会在客户端alert出来,若要查看传入的参数,可以在pc端打开,参数信息会通过log打出,仅在pc端时才会打印。 appId:getWxCfg.appId, // 必填,公众号的唯一标识 timestamp:getWxCfg.timestamp, // 必填,生成签名的时间戳 nonceStr:getWxCfg.nonceStr, // 必填,生成签名的随机串 signature:getWxCfg.signature,// 必填,签名,见附录1 jsApiList:['onMenuShareTimeline','onMenuShareAppMessage','onMenuShareQQ','onMenuShareWeibo','onMenuShareQZone'] // 必填,需要使用的JS接口列表,所有JS接口列表见附录2 }); wx.ready(function(){ //获取“分享到朋友圈”按钮点击状态及自定义分享内容接口 wx.onMenuShareTimeline({ title: setWeixinShare.title, // 分享标题 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享给朋友”按钮点击状态及自定义分享内容接口 wx.onMenuShareAppMessage({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 type: setWeixinShare.type, // 分享类型,music、video或link,不填默认为link dataUrl: setWeixinShare.dataUrl, // 如果type是music或video,则要提供数据链接,默认为空 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ”按钮点击状态及自定义分享内容接口 wx.onMenuShareQQ({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到腾讯微博”按钮点击状态及自定义分享内容接口 wx.onMenuShareWeibo({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); //获取“分享到QQ空间”按钮点击状态及自定义分享内容接口 wx.onMenuShareQZone({ title: setWeixinShare.title, // 分享标题 desc: setWeixinShare.desc, // 分享描述 link: setWeixinShare.link, // 分享链接 imgUrl: setWeixinShare.imgUrl, // 分享图标 success: function () { setWeixinShare.success; // 用户确认分享后执行的回调函数 }, cancel: function () { setWeixinShare.cancel; // 用户取消分享后执行的回调函数 } }); }); }); } }); } function openX_ad(posterid, htmlid, width, height) { if ($(htmlid).length > 0) { var randomnumber = Math.random(); var now_url = encodeURIComponent(window.location.href); var ga = document.createElement('iframe'); ga.src = 'https://www1.elecfans.com/www/delivery/myafr.php?target=_blank&cb=' + randomnumber + '&zoneid=' + posterid+'&prefer='+now_url; ga.width = width; ga.height = height; ga.frameBorder = 0; ga.scrolling = 'no'; var s = $(htmlid).append(ga); } } openX_ad(828, '#berry-300', 300, 250);