0%

中科院实习——FPGA

关于数据的读取与保存的任务已经完成,下面开始进入FPGA学习阶段。
该篇包括:FGPA的安装、FPGA的设计思路、利用一个简单的例子(二选一多路器)完成整个设计思路、固化文件的生成。

软件安装

安装软件时注意选择自己需要的硬件、库即可,不然会很大。具体操作可参考:
link
link

FPGA设计思想与验证方法

  1. 在电路板实现功能,在实现功能的时候积累开发和调试经验。(自己写代码,写不出来的时候看参考×;学会调试,找问题)
  2. 学会如何使用现成的代码?(FPGA有70%~80%是自己写)
  3. verilog语法,FPGA常见的设计方法。 自己写代码,下载代码进行使用,使用厂家或者第三方提供的IP核
    自己写代码(状态机、线性序列机)
    IP核(FIFO、RAM、ROM)
    常见的接口设计,SPI、IIC、UART
    例子:DDS:矩阵键盘、DAC、LCD/数码管,这些模块之间使用怎样的接口逻辑,来确保数据的正确传递。
    高速数据采集系统:数据流接口的设计。
    调试、分析问题的经验积累起来了,能力就培养起来了。
  4. 二选一多路器;三八译码器;计数器电灯;==>学习开发工具的使用
    以太网接口、摄像头、VGA
    一定要自己独立去写,写出问题不要怕,这是成长的机会。
  5. 仿真的认识:
    仿真的两大作用1)检查验证设计功能是否正确;2)调试问题,仿真可以看到设计中每一个信号每一个时刻的值。通过仿真来分析设计中的信号异常原因,一步一步溯源,最终找到问题的原因并解决。
    在做设计时,超过50%的时间不是在写代码,而是通过仿真调试代码找问题。

通用FPGA开发流程

verilog;状态机、线性序列机;学习仿真。
概述:写一套硬件描述语言,能够在指定硬件平台上实现相应的功能。

  • 设计定义(让LED灯一秒闪烁一次);
  • 设计输入(编写逻辑(使用Verilog代码描述逻辑),画逻辑图,使用IP核);
  • 分析综合(有专业的EDA软件进行,Quartus、Vivado、ISE),对缩写的逻辑描述内容进行分析,并得到逻辑门级别的电路内容;
  • 功能仿真(前仿真、逻辑仿真):使用专门的仿真工具进行仿真,验证设计的逻辑功能能够实现;
    仿真时理想情况,可靠度不是那么高,不要依赖仿真××
    对于数字电路来说,仿真是基本接近于真实情况的,是可信的。
  • 布局布线(接线会影响输出);
  • 性能分析:时序仿真Modelsim(非常耗费时间)与静态时序分析;
  • 下载到目标板上查看运行结果、板级调试。
    ILA\Signaltap ll
    最终:让设计的逻辑在目标板上正确工作,(功能正常、性能稳定)

基于Vivado的FPGA开发流程

创建工程

  1. 打开软件,创建工程;
  2. 选择器件后一直next;
  3. 左边点击ADD Source:选择ADD or create design sources;
  4. 点击create file-选择语言(verilog),文件名称与工程名一致;

开始编程

以二选一多路器为例:

image.png
SL = 1,out = a;
SL = 0,out = b;

module mux2(

a,
b,
sl,
out
); //moudle+名字+(变量定义)
input a;
input b;
input sl;
output out; //定义变量

assign out = (sl == 1) ?a : b; //赋值
 
endmodule //结束  

分析综合

点击 run

功能仿真

ADD Sources=>Add or create simulation source=>命名Mux2_tb (tb:test bench):主要三步
`timescale 1ns / 1ns

module mux2_tb();

reg s_a;
reg s_b;
reg sl;
wire out;

 mux2 mux2(
.a(s_a),
.b(s_b),
.sl(sl),
.out(out) 
);//例化

 initial begin
s_a = 0;s_b = 0;sl = 0;
#200;//延时200,只能在仿真处使用,在实际中无法使用#延时
s_a = 0;s_b = 0;sl = 0;
#200;
s_a = 0;s_b = 0;sl = 1;
#200;
s_a = 0;s_b = 1;sl = 0;
#200;
s_a = 1;s_b = 0;sl = 0;
#200;
 s_a = 1;s_b = 1;sl = 0;
#200;
s_a = 1;s_b = 0;sl = 1;
#200;
s_a = 0;s_b = 1;sl = 1;
#200; 
$stop;  
 end
 
 
endmodule 

点击run simulation

布局布线

点击 run Implementation

实际仿真

run simulation =>run post-implementation Timing simulation
实际仿真存在时间误差

扳机调试

IMPLEMENTATION =>点击Open Implemented Design=>Layout=>I/O planing=>根据自己的板子设置端口=>ctrl+S保存=>Gennerate Bitstream=>open hardware manager=>open target

创建工程写代码,进行仿真,分析仿真结果与设计是否一致。

MCS文件的生成及烧录

MCS文件的生成及烧录
link

-------------本文结束感谢您的阅读-------------