【米尔ARM+FPGA架构之作MYD-JX8MMA7开发板】FPGA端开发体验-STEPBYSTEP
<div class='showpostmsg'><h1><b>前言</b></h1><p >MYD-JX8MMA7 硬件平台,由 FPGA+ARM 异构,FPGA 和 ARM 通过 PCIE 接口来进行数据的交互,FPGA 使用的是 Xilinx 公司的 Artix-7 系列芯片。</p>
<p >型号为xc7a25t ,逻辑资源 23360,一个PCIE 接口,4 个 GTP 高速串行接口,3 个 bank,一共有 150 个 FPGA 管脚。</p>
<p >配置:两路光口,SD卡,CSI并口摄像头,一路PCIE,复位按键,JTAG,启动模式配置拨码开关,IO通过ASP座引出。</p>
<p > </p>
<h1 ><b>过程</b></h1>
<h2 ><b>安装开发环境</b></h2>
<h3 ><b>选择什么版本vivado</b></h3>
<p ><a href="https://china.xilinx.com/products/design-tools/vivado/vivado-ml.html#licensing"><u>https://china.xilinx.com/products/design-tools/vivado/vivado-ml.html#licensing</u></a></p>
<p >由于只做硬件开发,所以选择Vivado而不是vitis</p>
<p >我们的器件是 Artix‐7 系列所以选择Vivado ML标准版即可支持,是免费的。</p>
<p > </p>
<p > </p>
<p > </p>
<h3 ><b>安装Vivado ML标准版</b></h3>
<p > </p>
<p ><a href="https://china.xilinx.com/support/download.html"><u>https://china.xilinx.com/support/download.html</u></a></p>
<p > </p>
<p >需要登录</p>
<p > </p>
<p > </p>
<p > </p>
<p >下载非常快</p>
<p > </p>
<p >弹出用户账户权限控制</p>
<p >点击是</p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p >只安装需要的器件支持,减少空间占用</p>
<p > </p>
<p >同意所有</p>
<p > </p>
<p > </p>
<p >修改安装路径</p>
<p > </p>
<p > </p>
<p >下载是比较的</p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p >双击桌面图标打开</p>
<p > </p>
<h2><b>JTAG连接</b></h2>
<p >参考原理图</p>
<p > </p>
<p > </p>
<p >Open target-> Auto connect</p>
<p > </p>
<p >识别到芯片</p>
<p > </p>
<p > </p>
<p >监控系统温度</p>
<p > </p>
<p > </p>
<p > </p>
<p >下载程序</p>
<p >xc7a25t上右键点击Program Device即可</p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<h2 ><b>新建工程</b></h2>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<h2 ><b>添加源码</b></h2>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<p >添加代码,保存</p>
<p > </p>
<p > </p>
<p >module flow_led(</p>
<p > input sys_clk , //系统时钟</p>
<p > input sys_rst_n, //系统复位,低电平有效</p>
<p > </p>
<p > output reg led //4个LED灯</p>
<p > );</p>
<p > </p>
<p >//reg define</p>
<p >reg counter;</p>
<p > </p>
<p >//*****************************************************</p>
<p >//** main code</p>
<p >//*****************************************************</p>
<p > </p>
<p >//计数器对系统时钟计数,计时0.2秒</p>
<p >always @(posedge sys_clk or negedge sys_rst_n) begin</p>
<p > if (!sys_rst_n)</p>
<p > counter <= 24'd0;</p>
<p > else if (counter < 24'd1000_0000 - 1'd1)</p>
<p > //else if (counter < 24'd5) //仅用于仿真</p>
<p > counter <= counter + 1'b1;</p>
<p > else</p>
<p > counter <= 24'd0;</p>
<p >end</p>
<p > </p>
<p >//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态</p>
<p >always @(posedge sys_clk or negedge sys_rst_n) begin</p>
<p > if (!sys_rst_n)</p>
<p > led <= 4'b0001;</p>
<p > else if(counter == 24'd1000_0000 - 1'd1)</p>
<p > //else if (counter == 24'd5) //仅用于仿真</p>
<p > led <= {led,led};</p>
<p > else</p>
<p > led <= led;</p>
<p >end</p>
<p > </p>
<p >endmodule</p>
<p > </p>
<h2 ><b>添加仿真文件</b></h2>
<p >EEWORLDIMGTK20</p>
<p >EEWORLDIMGTK21</p>
<p >EEWORLDIMGTK22</p>
<p >EEWORLDIMGTK23</p>
<p >EEWORLDIMGTK24</p>
<p > </p>
<p >添加如下代码,保存</p>
<p >EEWORLDIMGTK25</p>
<p >`timescale 1ns/1ns // 定义仿真时间单位1ns和仿真时间精度为1ns</p>
<p > </p>
<p >module tb_flow_led(); // 测试模块</p>
<p > </p>
<p >//输入</p>
<p >reg sys_clk; // 时钟信号</p>
<p >reg sys_rst_n; // 复位信号</p>
<p > </p>
<p >//输出</p>
<p >wire led;</p>
<p > </p>
<p >//*****************************************************</p>
<p >//** main code</p>
<p >//*****************************************************</p>
<p > </p>
<p >//给输入信号初始值</p>
<p >initial begin</p>
<p > sys_clk = 1'b0;</p>
<p > sys_rst_n = 1'b0; // 复位</p>
<p > #20 sys_rst_n = 1'b1; // 在第21ns的时候复位信号信号拉高</p>
<p >end</p>
<p > </p>
<p >//50Mhz的时钟,周期则为1/50Mhz=20ns,所以每10ns,电平取反一次</p>
<p >always #10 sys_clk = ~sys_clk;</p>
<p > </p>
<p >//例化led模块</p>
<p >flow_led u0_flow_led (</p>
<p > .sys_clk (sys_clk ),</p>
<p > .sys_rst_n (sys_rst_n),</p>
<p > .led (led )</p>
<p >);</p>
<p > </p>
<p >Endmodule</p>
<p > </p>
<h2 ><b>仿真</b></h2>
<p > </p>
<p > </p>
<p >出现波形</p>
<p > </p>
<p > </p>
<p >可以设置仿真时间,点击如下按钮缩放到合适大小</p>
<p > </p>
<p > </p>
<p >鼠标框选指定区域可以放大指定区域,或者ctrl加滚轮缩放</p>
<p > </p>
<p > </p>
<h2 ><b>综合</b></h2>
<p > </p>
<p >右上角显示状态</p>
<p > </p>
<p > </p>
<p > </p>
<p > </p>
<h2 ><b>约束</b></h2>
<p > </p>
<p >右上角选择I/O Planning</p>
<p > </p>
<p > </p>
<p > </p>
<p >板子FOGA端没有LED,所以任意选择几个引出的IO</p>
<p > </p>
<p > </p>
<p > </p>
<p >Ctrl+s保存</p>
<p > </p>
<p > </p>
<p >修改引脚约束后,重新综合</p>
<p > </p>
<h2 ><b>生成bit文件</b></h2>
<p > </p>
<p >等待右上角显示完成</p>
<p > </p>
<h2 ><b>下载</b></h2>
<p >见JTAG连接</p>
<h2 ><b>在线逻辑分析仪仿真</b></h2>
<p > </p>
<h2 ><b>测试</b></h2>
<p >使用逻辑分析仪测试对应的引脚查看波形。</p>
<p > </p>
<h1 ><b>总结</b></h1>
<p >参考《MYIR MYD-JX8MMA7 FPGA指导手册V1.0.0.pdf》提供了3个测试Demo,</p>
<p >《04_Sources\FPGA_Demo》提供了测试代码。</p>
<p >但是FGPA相关的文档内容没有CPU端的多,比如FPGA的时钟源等资源就没有介绍,提供的Demo也只有上述三个比较复杂的Demo,建议可以提供更多的针对外设和功能的由简单到复杂的Demo。</p>
</div><script> var loginstr = '<div class="locked">查看本帖全部内容,请<a href="javascript:;" style="color:#e60000" class="loginf">登录</a>或者<a href="https://bbs.eeworld.com.cn/member.php?mod=register_eeworld.php&action=wechat" style="color:#e60000" target="_blank">注册</a></div>';
if(parseInt(discuz_uid)==0){
(function($){
var postHeight = getTextHeight(400);
$(".showpostmsg").html($(".showpostmsg").html());
$(".showpostmsg").after(loginstr);
$(".showpostmsg").css({height:postHeight,overflow:"hidden"});
})(jQuery);
} </script><script type="text/javascript">(function(d,c){var a=d.createElement("script"),m=d.getElementsByTagName("script"),eewurl="//counter.eeworld.com.cn/pv/count/";a.src=eewurl+c;m.parentNode.insertBefore(a,m)})(document,523)</script> 大佬 的作品很优秀呀,FPGA学习起来简单吗?
页:
[1]