qinyunti 发表于 2023-2-11 20:36

【米尔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 >&nbsp;</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 > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<h3 ><b>安装Vivado ML标准版</b></h3>

<p >&nbsp;</p>

<p ><a href="https://china.xilinx.com/support/download.html"><u>https://china.xilinx.com/support/download.html</u></a></p>

<p > &nbsp;</p>

<p >需要登录</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >下载非常快</p>

<p > &nbsp;</p>

<p >弹出用户账户权限控制</p>

<p >点击是</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >只安装需要的器件支持,减少空间占用</p>

<p > &nbsp;</p>

<p >同意所有</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >修改安装路径</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >下载是比较的</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >双击桌面图标打开</p>

<p > &nbsp;</p>

<h2><b>JTAG连接</b></h2>

<p >参考原理图</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >Open target-&gt; Auto connect</p>

<p > &nbsp;</p>

<p >识别到芯片</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >监控系统温度</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >下载程序</p>

<p >xc7a25t上右键点击Program Device即可</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<h2 ><b>新建工程</b></h2>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<h2 ><b>添加源码</b></h2>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >添加代码,保存</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >module flow_led(</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_clk &nbsp;, &nbsp;//系统时钟</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;input &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;sys_rst_n, &nbsp;//系统复位,低电平有效</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;output &nbsp;reg &nbsp; &nbsp;led &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;//4个LED灯</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;);</p>

<p >&nbsp;</p>

<p >//reg define</p>

<p >reg counter;</p>

<p >&nbsp;</p>

<p >//*****************************************************</p>

<p >//** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main code</p>

<p >//*****************************************************</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</p>

<p >//计数器对系统时钟计数,计时0.2秒</p>

<p >always @(posedge sys_clk or negedge sys_rst_n) begin</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;if (!sys_rst_n)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter &lt;= 24&#39;d0;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;else if (counter &lt; 24&#39;d1000_0000 - 1&#39;d1)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;//else if (counter &lt; 24&#39;d5) //仅用于仿真</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter &lt;= counter + 1&#39;b1;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;else</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;counter &lt;= 24&#39;d0;</p>

<p >end</p>

<p >&nbsp;</p>

<p >//通过移位寄存器控制IO口的高低电平,从而改变LED的显示状态</p>

<p >always @(posedge sys_clk or negedge sys_rst_n) begin</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;if (!sys_rst_n)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led &lt;= 4&#39;b0001;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;else if(counter == 24&#39;d1000_0000 - 1&#39;d1)</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;//else if (counter == 24&#39;d5) //仅用于仿真</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led &lt;= {led,led};</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;else</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;led &lt;= led;</p>

<p >end</p>

<p >&nbsp;</p>

<p >endmodule</p>

<p >&nbsp;</p>

<h2 ><b>添加仿真文件</b></h2>

<p >EEWORLDIMGTK20</p>

<p >EEWORLDIMGTK21</p>

<p >EEWORLDIMGTK22</p>

<p >EEWORLDIMGTK23</p>

<p >EEWORLDIMGTK24</p>

<p >&nbsp;</p>

<p >添加如下代码,保存</p>

<p >EEWORLDIMGTK25</p>

<p >`timescale &nbsp;1ns/1ns &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 定义仿真时间单位1ns和仿真时间精度为1ns</p>

<p >&nbsp;</p>

<p >module &nbsp;tb_flow_led(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 测试模块</p>

<p >&nbsp;</p>

<p >//输入</p>

<p >reg &nbsp;sys_clk; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 时钟信号</p>

<p >reg &nbsp;sys_rst_n; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 复位信号</p>

<p >&nbsp;</p>

<p >//输出</p>

<p >wire &nbsp; &nbsp;led;</p>

<p >&nbsp;</p>

<p >//*****************************************************</p>

<p >//** &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;main code</p>

<p >//*****************************************************</p>

<p >&nbsp;</p>

<p >//给输入信号初始值</p>

<p >initial begin</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;sys_clk &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1&#39;b0;</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;sys_rst_n &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;= 1&#39;b0; &nbsp;&nbsp;&nbsp;&nbsp;// 复位</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;#20 &nbsp;sys_rst_n &nbsp;= 1&#39;b1; &nbsp;&nbsp;&nbsp;&nbsp;// 在第21ns的时候复位信号信号拉高</p>

<p >end</p>

<p >&nbsp;</p>

<p >//50Mhz的时钟,周期则为1/50Mhz=20ns,所以每10ns,电平取反一次</p>

<p >always #10 sys_clk = ~sys_clk;</p>

<p >&nbsp;</p>

<p >//例化led模块</p>

<p >flow_led &nbsp;u0_flow_led (</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;.sys_clk &nbsp;&nbsp;&nbsp;&nbsp;(sys_clk &nbsp;),</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;.sys_rst_n &nbsp;&nbsp;(sys_rst_n),</p>

<p >&nbsp;&nbsp;&nbsp;&nbsp;.led &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(led &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;)</p>

<p >);</p>

<p >&nbsp;</p>

<p >Endmodule</p>

<p >&nbsp;</p>

<h2 ><b>仿真</b></h2>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >出现波形</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >可以设置仿真时间,点击如下按钮缩放到合适大小</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >鼠标框选指定区域可以放大指定区域,或者ctrl加滚轮缩放</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<h2 ><b>综合</b></h2>

<p > &nbsp;</p>

<p >右上角显示状态</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<h2 ><b>约束</b></h2>

<p > &nbsp;</p>

<p >右上角选择I/O Planning</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >&nbsp;</p>

<p >板子FOGA端没有LED,所以任意选择几个引出的IO</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p > &nbsp;</p>

<p >Ctrl+s保存</p>

<p > &nbsp;</p>

<p >&nbsp;</p>

<p >修改引脚约束后,重新综合</p>

<p >&nbsp;</p>

<h2 ><b>生成bit文件</b></h2>

<p > &nbsp;</p>

<p >等待右上角显示完成</p>

<p >&nbsp;</p>

<h2 ><b>下载</b></h2>

<p >见JTAG连接</p>

<h2 ><b>在线逻辑分析仪仿真</b></h2>

<p >&nbsp;</p>

<h2 ><b>测试</b></h2>

<p >使用逻辑分析仪测试对应的引脚查看波形。</p>

<p >&nbsp;</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>

lugl4313820 发表于 2023-2-23 12:09

大佬 的作品很优秀呀,FPGA学习起来简单吗?
页: [1]
查看完整版本: 【米尔ARM+FPGA架构之作MYD-JX8MMA7开发板】FPGA端开发体验-STEPBYSTEP