当前位置: 代码迷 >> 综合 >> FPGA入门开发完整流程(Vivado2020+Verilog)
  详细解决方案

FPGA入门开发完整流程(Vivado2020+Verilog)

热度:47   发布时间:2023-11-26 14:26:55.0

一、总体流程

开发工具:

  • Vivado2020
  • Verilog
  • ARTIX-7 FPGA AX7035

这是我做的完整流程,涉及到初级开发的功能;

  1. 新建工程:(RTL Project)芯片选型;
  2. 编写程序:源文件,仿真文件,约束文件;
  3. 时序仿真;
  4. 约束:IO配置;
  5. 综合;
  6. 实现生成二进制文件,下载验证。

这是网上找的的开发流程框图
在这里插入图片描述

二、具体流程

2.1 新建工程

在这里插入图片描述在这里插入图片描述在这里插入图片描述

现在进入了开发主界面,认识一下IDE的各部分
在这里插入图片描述可以在右上角把自己拖拽好的布局保存下来。

2.2 编写程序

新建源文件:
在这里插入图片描述然后有3个选择,分别对应约束文件,设计文件和仿真文件。此处先选择设计文件,也就是我们写的功能。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
新建程序完成,开始写程序
这里忽视Verilog基础知识,可以先梳理整个流程。
然后反过来再看基础语法,推荐一个:传送门

在这里插入图片描述代码:代码的意思先不说

module myLed(clk,  rst_n,  led);input clk;input rst_n;output led;reg [27:0] cnt; //定义一个计数器计时always @ (posedge clk or negedge rst_n)if(!rst_n)cnt<=0;  //复位置0计数器else if(cnt<=27'd50000000)   //需要经过50000000个周期才达到1scnt<=cnt+1'd1;elsecnt<=0;assign led=(cnt<=25000000) ? 1'b1:1'b0;  //占空比50%
endmodule

这里有一个不好,和MATLAB2018一样,输入中文我的搜狗输入法会卡住,这就很烦人哦

2.3 时序仿真

新建仿真文件:

在这里插入图片描述
编写仿真文件:

`timescale 1ns / 1psmodule sim_myLed();reg clk;     //输入时钟reg rst_n;   //输入复位//reg [27:0] cnt1; //定义一个计数器计时, how to sew this?wire led;myLed later(.clk(clk),.rst_n(rst_n),//.cnt1(cnt),.led(led));initial beginrst_n = 1;clk=1;        #100;$finish;   //wait for user to click run button simulate, then start simendalways #100 clk = ~clk; // 125M ,as the simulation staeted, it works
endmodule

写完仿真文件后,在sim_myLed上右击,set as Top,然后进行仿真
在这里插入图片描述

在这里插入图片描述
这里需要说明一下,仿真起来要和编写的仿真文件是相关的。仿真文件的编写,下面分析一下。

reg clk;     //输入时钟
reg rst_n;   //输入复位
//reg [27:0] cnt1; //定义一个计数器计时, how to sew this?
wire led;

这三个是当前仿真文件下申明的变量,其中输入时reg,输出是wire。

myLed later(.clk(clk),.rst_n(rst_n),//.cnt1(cnt),.led(led));

这个叫做例化。可以理解为一个类的实例化。
其中,myLed是之前的设计文件,later是实例化的名字。
.clk(clk)就是参数,.clk()就是仿真文件里面的变量,括号里面就是myLed里面的。就相当于绑定在一起了。
(类比面向对象中类的实例化)

initial beginrst_n = 1;clk=1;        #100;$finish;   //wait for user to click run button simulate,then start simend    
always #100 clk = ~clk; // 125M ,as the simulation staeted, it works

这里initial下面这一段是启动仿真软件是执行的部分,也就是仿真的初始化,#100就是延时100单位时间,$finish就是等待用户进行下面的仿真。
always就是从头到尾一直执行的部分,这里一是是100个单位时间进行一次翻转,也就是时钟信号了。

3.4 约束文件

新建约束文件就略过了。

这里需要知道自己的开发板对应的IO口。
我用的开发板是这个:传送门

先点击左侧Schematic
再双击电路图上面的IO Ports
最后再下面选择Package Pin(需要对照原理图的接线)

I/O std 先不要动,还没深入了解
在这里插入图片描述好了之后可以看到约束文件:
觉得熟悉之后直接写约束文件会更高效。
在这里插入图片描述

2.5 综合

在这里插入图片描述说一下我遇到的问题,可能大家也会遇到
好长时间综合没反应。
在工程综合的run的目录下运行系统cmd,看看能不能执行目录下面的这个bat文件。
在这里插入图片描述
在这里插入图片描述
试过论坛的好多方法都没有成功,千万别轻易相信换系统换软件版本的方法,成本太大。

我最后发现是电脑管家拦截了
在这里插入图片描述但是也不绝对,问题现象一样但是原因未必。

2.6 生成二进制文件,下载验证

需要开发板打开电源,安装下载器驱动

在这里插入图片描述

实验效果是这样的:

在这里插入图片描述

Tip

学习笔记,有问题欢迎指教。

  相关解决方案